1 /* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved. 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 #ifndef HTRACE_CPU_DATA_PARSER_H 16 #define HTRACE_CPU_DATA_PARSER_H 17 #include <cstdint> 18 #include <map> 19 #include <string> 20 #include "cpu_plugin_result.pbreader.h" 21 #include "event_parser_base.h" 22 #include "htrace_plugin_time_parser.h" 23 #include "trace_data_cache.h" 24 #include "trace_streamer_config.h" 25 #include "trace_streamer_filters.h" 26 27 namespace SysTuning { 28 namespace TraceStreamer { 29 class PbreaderCpuDataParser : public EventParserBase, public HtracePluginTimeParser { 30 public: 31 PbreaderCpuDataParser(TraceDataCache *dataCache, const TraceStreamerFilters *ctx); 32 ~PbreaderCpuDataParser(); 33 void Parse(ProtoReader::BytesView tracePacket, uint64_t ts); 34 void Finish(); 35 enum TSCpuDataType { TS_CPU_DATA_TYPE_USAGE, TS_CPU_DATA_TYPE_THREAD_INFO, TS_CPU_DATA_TYPE_LOAD }; 36 class TsCpuData { 37 public: TsCpuData()38 TsCpuData() 39 { 40 ts_ = 0; 41 cpuDataType_ = TS_CPU_DATA_TYPE_USAGE; 42 } SetCpuUsage(uint64_t ts)43 void SetCpuUsage(uint64_t ts) 44 { 45 ts_ = ts; 46 cpuDataType_ = TS_CPU_DATA_TYPE_USAGE; 47 } SetThreadInfo(uint64_t ts)48 void SetThreadInfo(uint64_t ts) 49 { 50 ts_ = ts; 51 cpuDataType_ = TS_CPU_DATA_TYPE_THREAD_INFO; 52 } SetExtInfo(double totalLoad,double userLoad,double sysLoad,double processNum)53 void SetExtInfo(double totalLoad, double userLoad, double sysLoad, double processNum) 54 { 55 totalLoad_ = totalLoad; 56 userLoad_ = userLoad; 57 sysLoad_ = sysLoad; 58 processNum_ = processNum; 59 cpuDataType_ = TS_CPU_DATA_TYPE_LOAD; 60 } 61 uint64_t ts_; 62 TSCpuDataType cpuDataType_; 63 double userLoad_ = 0; 64 double sysLoad_ = 0; 65 double processNum_ = 0; 66 double totalLoad_ = 0; 67 }; 68 std::vector<std::unique_ptr<TsCpuData>> cpuData_; 69 70 private: 71 std::string threadStateDesc_[ProtoReader::THREAD_WAITING + 1] = {"undefined", "Running", "Sleep", "Sloped", 72 "Watting"}; 73 }; 74 } // namespace TraceStreamer 75 } // namespace SysTuning 76 77 #endif // HTRACE_CPU_DATA_PARSER_H 78