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 16 #ifndef THREAD_MEASURE_FILTER_H 17 #define THREAD_MEASURE_FILTER_H 18 19 #include <cstdint> 20 #include <map> 21 #include <string_view> 22 #include <tuple> 23 24 #include "double_map.h" 25 #include "filter_base.h" 26 #include "trace_data_cache.h" 27 #include "trace_streamer_filters.h" 28 29 namespace SysTuning { 30 namespace TraceStreamer { 31 enum class EnumMeasureFilter : uint16_t { 32 PROCESS, 33 CPU, 34 CLOCK_RATE, 35 CLOCK_ENABLE, 36 CLOCK_DISABLE, 37 CLK_RATE, 38 CLK_ENABLE, 39 CLK_DISABLE, 40 XPOWER, 41 MAX_COUNT, 42 }; 43 44 class MeasureFilter : private FilterBase { 45 public: 46 MeasureFilter(TraceDataCache *dataCache, const TraceStreamerFilters *filter); 47 MeasureFilter(const MeasureFilter &) = delete; 48 MeasureFilter &operator=(const MeasureFilter &) = delete; 49 ~MeasureFilter() override; 50 bool AppendNewMeasureData(EnumMeasureFilter enumType, 51 uint64_t internalTid, 52 DataIndex nameIndex, 53 uint64_t timeStamp, 54 int64_t value); 55 56 private: 57 uint32_t GetOrCreateFilterId(EnumMeasureFilter enumType, uint64_t internalTid, DataIndex nameIndex); 58 void AddCertainFilterId(EnumMeasureFilter enumType, uint64_t internalTid, DataIndex nameIndex, uint64_t filterId); 59 std::map<EnumMeasureFilter, DoubleMap<uint64_t, DataIndex, uint64_t>> filterTypeMap_; 60 // DoubleMap<uint64_t, DataIndex, uint64_t> tidStreamIdFilterIdMap_; 61 62 const std::map<EnumMeasureFilter, std::string> filterTypeValue = { 63 {EnumMeasureFilter::PROCESS, "process_measure_filter"}, 64 {EnumMeasureFilter::CPU, "cpu_measure_filter"}, 65 {EnumMeasureFilter::CLOCK_RATE, "clock_rate_filter"}, 66 {EnumMeasureFilter::CLOCK_ENABLE, "clock_enable_filter"}, 67 {EnumMeasureFilter::CLOCK_DISABLE, "clock_disable_filter"}, 68 {EnumMeasureFilter::CLK_RATE, "clk_rate_filter"}, 69 {EnumMeasureFilter::CLK_ENABLE, "clk_enable_filter"}, 70 {EnumMeasureFilter::CLK_DISABLE, "clk_disable_filter"}, 71 {EnumMeasureFilter::XPOWER, "xpower_filter"}, 72 }; 73 const DataIndex clockSetRateDataIndex_ = traceDataCache_->GetDataIndex("clock_set_rate"); 74 const DataIndex clockEnableDataIndex_ = traceDataCache_->GetDataIndex("clock_enable"); 75 const DataIndex clockDisableDataIndex_ = traceDataCache_->GetDataIndex("clock_disable"); 76 const DataIndex clkSetRateDataIndex_ = traceDataCache_->GetDataIndex("clk_set_rate"); 77 const DataIndex clkEnableDataIndex_ = traceDataCache_->GetDataIndex("clk_enable"); 78 const DataIndex clkDisableDataIndex_ = traceDataCache_->GetDataIndex("clk_disable"); 79 }; 80 } // namespace TraceStreamer 81 } // namespace SysTuning 82 #endif // THREAD_MEASURE_FILTER_H 83