1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <hwext/gtest-ext.h> 17 #include <hwext/gtest-tag.h> 18 19 #include "htrace_cpu_detail_parser.h" 20 #include "htrace_event_parser.h" 21 #include "power.pb.h" 22 #include "stat_filter.h" 23 #include "trace_streamer_selector.h" 24 25 using namespace testing::ext; 26 using namespace SysTuning::TraceStreamer; 27 28 namespace SysTuning { 29 namespace TraceStreamer { 30 class HtraceCpuDetailParserTest : public ::testing::Test { 31 public: SetUp()32 void SetUp() 33 { 34 stream_.InitFilter(); 35 } 36 TearDown() const37 void TearDown() const{} 38 39 public: 40 SysTuning::TraceStreamer::TraceStreamerSelector stream_ = {}; 41 }; 42 43 /** 44 * @tc.name: ParseCpudetaulNoEvents 45 * @tc.desc: Parse a cpudetaul with no events 46 * @tc.type: FUNC 47 */ 48 HWTEST_F(HtraceCpuDetailParserTest, ParseCpudetaulNoEvents, TestSize.Level1) 49 { 50 TS_LOGI("test12-1"); 51 TracePluginResult tracePacket; 52 FtraceCpuDetailMsg* cpuDetail = tracePacket.add_ftrace_cpu_detail(); 53 54 HtraceCpuDetailParser htraceCpuDetailParser(stream_.traceDataCache_.get(), stream_.streamFilters_.get()); 55 htraceCpuDetailParser.Parse(&tracePacket, TS_CLOCK_REALTIME); 56 htraceCpuDetailParser.FilterAllEvents(); 57 auto size = tracePacket.ftrace_cpu_detail_size(); 58 auto eventSize = cpuDetail->event_size(); 59 EXPECT_EQ(size, 1); 60 EXPECT_EQ(eventSize, 0); 61 } 62 /** 63 * @tc.name: ParseHtraceWithoutCpuDetailData 64 * @tc.desc: Parse a cpu that does not contain any cpudetail 65 * @tc.type: FUNC 66 */ 67 HWTEST_F(HtraceCpuDetailParserTest, ParseHtraceWithoutCpuDetailData, TestSize.Level1) 68 { 69 TS_LOGI("test12-2"); 70 TracePluginResult tracePacket; 71 FtraceCpuDetailMsg* cpuDetail = tracePacket.add_ftrace_cpu_detail(); 72 auto event = cpuDetail->add_event(); 73 74 HtraceCpuDetailParser htraceCpuDetailParser(stream_.traceDataCache_.get(), stream_.streamFilters_.get()); 75 htraceCpuDetailParser.Parse(&tracePacket, TS_CLOCK_REALTIME); 76 htraceCpuDetailParser.FilterAllEvents(); 77 auto size = tracePacket.ftrace_cpu_detail_size(); 78 auto eventSize = cpuDetail->event_size(); 79 EXPECT_EQ(size, 1); 80 EXPECT_EQ(eventSize, 1); 81 } 82 /** 83 * @tc.name: ParseHtraceCpuDetailData 84 * @tc.desc: Parse a cpudetail data 85 * @tc.type: FUNC 86 */ 87 HWTEST_F(HtraceCpuDetailParserTest, ParseHtraceCpuDetailData, TestSize.Level1) 88 { 89 TS_LOGI("test12-3"); 90 TracePluginResult tracePacket; 91 FtraceCpuDetailMsg* cpuDetail = tracePacket.add_ftrace_cpu_detail(); 92 auto event = cpuDetail->add_event(); 93 cpuDetail->set_cpu(1); 94 event->set_timestamp(1501983446213000000); 95 event->set_tgid(1); 96 CpuFrequencyFormat* freq = new CpuFrequencyFormat(); 97 freq->set_cpu_id(1); 98 freq->set_state(1500); 99 event->set_allocated_cpu_frequency_format(freq); 100 101 HtraceCpuDetailParser htraceCpuDetailParser(stream_.traceDataCache_.get(), stream_.streamFilters_.get()); 102 htraceCpuDetailParser.Parse(&tracePacket, TS_CLOCK_REALTIME); 103 htraceCpuDetailParser.FilterAllEvents(); 104 auto size = tracePacket.ftrace_cpu_detail_size(); 105 auto eventSize = cpuDetail->event_size(); 106 auto state = stream_.traceDataCache_->GetConstMeasureData().ValuesData()[0]; 107 EXPECT_EQ(size, 1); 108 EXPECT_EQ(eventSize, 1); 109 EXPECT_EQ(state, 1500); 110 } 111 /** 112 * @tc.name: ParseMultipleCpuDetailData 113 * @tc.desc: Parse multiple cpudetail data 114 * @tc.type: FUNC 115 */ 116 HWTEST_F(HtraceCpuDetailParserTest, ParseMultipleCpuDetailData, TestSize.Level1) 117 { 118 TS_LOGI("test12-4"); 119 TracePluginResult tracePacket; 120 FtraceCpuDetailMsg* cpuDetail = tracePacket.add_ftrace_cpu_detail(); 121 auto event = cpuDetail->add_event(); 122 cpuDetail->set_cpu(1); 123 event->set_timestamp(1501983446213000000); 124 event->set_tgid(1); 125 CpuFrequencyFormat* freq0 = new CpuFrequencyFormat(); 126 freq0->set_cpu_id(1); 127 freq0->set_state(1500); 128 event->set_allocated_cpu_frequency_format(freq0); 129 130 cpuDetail = tracePacket.add_ftrace_cpu_detail(); 131 event = cpuDetail->add_event(); 132 cpuDetail->set_cpu(1); 133 event->set_timestamp(1501983446213000000); 134 event->set_tgid(1); 135 CpuFrequencyFormat* freq1 = new CpuFrequencyFormat(); 136 freq1->set_cpu_id(2); 137 freq1->set_state(3000); 138 event->set_allocated_cpu_frequency_format(freq1); 139 140 HtraceCpuDetailParser htraceCpuDetailParser(stream_.traceDataCache_.get(), stream_.streamFilters_.get()); 141 htraceCpuDetailParser.Parse(&tracePacket, TS_CLOCK_REALTIME); 142 htraceCpuDetailParser.FilterAllEvents(); 143 auto size = tracePacket.ftrace_cpu_detail_size(); 144 auto eventSize = cpuDetail->event_size(); 145 auto state0 = stream_.traceDataCache_->GetConstMeasureData().ValuesData()[0]; 146 auto cpuId0 = stream_.traceDataCache_->GetConstMeasureData().FilterIdData()[0]; 147 auto state1 = stream_.traceDataCache_->GetConstMeasureData().ValuesData()[1]; 148 auto cpuId1 = stream_.traceDataCache_->GetConstMeasureData().FilterIdData()[1]; 149 EXPECT_EQ(size, 2); 150 EXPECT_EQ(eventSize, 1); 151 EXPECT_EQ(state0, 1500); 152 EXPECT_EQ(state1, 3000); 153 } 154 } // namespace TraceStreamer 155 } // namespace SysTuning 156