• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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