• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef SRC_BYTRACE_EVENT_PARSER_H
17 #define SRC_BYTRACE_EVENT_PARSER_H
18 
19 #include <functional>
20 #include <vector>
21 
22 #include "common_types.h"
23 #include "event_parser_base.h"
24 #include "print_event_parser.h"
25 #include "trace_data_cache.h"
26 #include "trace_streamer_config.h"
27 #include "trace_streamer_filters.h"
28 
29 namespace SysTuning {
30 namespace TraceStreamer {
31 using ArgsMap = std::unordered_map<std::string, std::string>;
32 class BytraceEventParser : public EventParserBase {
33 private:
34     class EventInfo {
35     public:
EventInfo(uint64_t ts,BytraceLine li)36         EventInfo(uint64_t ts, BytraceLine li) : eventTimestamp(ts), line(li) {}
37         uint64_t eventTimestamp;
38         BytraceLine line;
39     };
40 
41 public:
42     BytraceEventParser(TraceDataCache* dataCache, const TraceStreamerFilters* filter);
43     void ParseDataItem(const BytraceLine& line);
44     void FilterAllEventsTemp();
45     void FilterAllEvents();
46     void BeginFilterEvents(EventInfo* event);
47     void Clear();
48 
49 private:
50     using FuncCall = std::function<bool(const ArgsMap& args, const BytraceLine line)>;
51     bool SchedSwitchEvent(const ArgsMap& args, const BytraceLine& line) const;
52     bool BlockedReason(const ArgsMap& args, const BytraceLine& line) const;
53     bool TaskRenameEvent(const ArgsMap& args, const BytraceLine& line) const;
54     bool TaskNewtaskEvent(const ArgsMap& args, const BytraceLine& line) const;
55     bool TracingMarkWriteOrPrintEvent(const ArgsMap& args, const BytraceLine& line);
56     bool SchedWakeupEvent(const ArgsMap& args, const BytraceLine& line) const;
57     bool SchedWakingEvent(const ArgsMap& args, const BytraceLine& line) const;
58     bool CpuIdleEvent(const ArgsMap& args, const BytraceLine& line) const;
59     bool CpuFrequencyEvent(const ArgsMap& args, const BytraceLine& line) const;
60     bool CpuFrequencyLimitsEvent(const ArgsMap& args, const BytraceLine& line) const;
61     bool WorkqueueExecuteStartEvent(const ArgsMap& args, const BytraceLine& line) const;
62     bool WorkqueueExecuteEndEvent(const ArgsMap& args, const BytraceLine& line) const;
63     bool ProcessExitEvent(const ArgsMap& args, const BytraceLine& line) const;
64     bool SetRateEvent(const ArgsMap& args, const BytraceLine& line) const;
65     bool ClockEnableEvent(const ArgsMap& args, const BytraceLine& line) const;
66     bool ClockDisableEvent(const ArgsMap& args, const BytraceLine& line) const;
67     bool RegulatorSetVoltageEvent(const ArgsMap& args, const BytraceLine& line) const;
68     bool RegulatorSetVoltageCompleteEvent(const ArgsMap& args, const BytraceLine& line) const;
69     bool RegulatorDisableEvent(const ArgsMap& args, const BytraceLine& line) const;
70     bool RegulatorDisableCompleteEvent(const ArgsMap& args, const BytraceLine& line) const;
71     bool IpiEntryEvent(const ArgsMap& args, const BytraceLine& line) const;
72     bool IpiExitEvent(const ArgsMap& args, const BytraceLine& line) const;
73     bool IrqHandlerEntryEvent(const ArgsMap& args, const BytraceLine& line) const;
74     bool IrqHandlerExitEvent(const ArgsMap& args, const BytraceLine& line) const;
75     bool SoftIrqRaiseEvent(const ArgsMap& args, const BytraceLine& line) const;
76     bool SoftIrqEntryEvent(const ArgsMap& args, const BytraceLine& line) const;
77     bool SoftIrqExitEvent(const ArgsMap& args, const BytraceLine& line) const;
78     bool BinderTransaction(const ArgsMap& args, const BytraceLine& line) const;
79     bool BinderTransactionReceived(const ArgsMap& args, const BytraceLine& line) const;
80     bool BinderTransactionAllocBufEvent(const ArgsMap& args, const BytraceLine& line) const;
81     void GetDataSegArgs(BytraceLine& bufLine, ArgsMap& args, uint32_t& tgid) const;
82 
83     std::map<std::string, FuncCall> eventToFunctionMap_ = {};
84     const uint32_t MIN_SCHED_SWITCH_ARGS_COUNT = 6;
85     const uint32_t MIN_BLOCKED_REASON_ARGS_COUNT = 3;
86     const uint32_t MIN_SCHED_WAKEUP_ARGS_COUNT = 2;
87     const uint32_t MIN_TASK_RENAME_ARGS_COUNT = 2;
88     const uint32_t MIN_SCHED_WAKING_ARGS_COUNT = 4;
89     const uint32_t MIN_CPU_IDLE_ARGS_COUNT = 2;
90     const uint32_t MIN_CPU_FREQUENCY_ARGS_COUNT = 2;
91     const uint32_t MIN_PROCESS_EXIT_ARGS_COUNT = 2;
92     const uint32_t MIN_CLOCK_SET_RATE_ARGS_COUNT = 3;
93     const uint32_t MIN_CLOCK_ENABLE_ARGS_COUNT = 3;
94     const uint32_t MIN_CLOCK_DISABLE_ARGS_COUNT = 3;
95     const uint32_t MIN_IRQ_HANDLER_ENTRY_ARGS_COUNT = 2;
96     const uint32_t MIN_IRQ_HANDLER_EXIT_ARGS_COUNT = 2;
97     const uint32_t MIN_SOFTIRQ_ENTRY_ARGS_COUNT = 2;
98     const uint32_t MIN_SOFTIRQ_EXIT_ARGS_COUNT = 2;
99     const uint32_t MIN_BINDER_TRANSACTION_ARGS_COUNT = 7;
100     const uint32_t MIN_BINDER_TRANSACTION_RECEIVED_ARGS_COUNT = 1;
101     const uint32_t MIN_BINDER_TRANSACTION_ALLOC_BUF_ARGS_COUNT = 3;
102     std::vector<std::unique_ptr<EventInfo>> eventList_ = {};
103     PrintEventParser printEventParser_;
104     const DataIndex schedWakeupName_ = traceDataCache_->GetDataIndex("sched_wakeup");
105     const DataIndex schedWakingName_ = traceDataCache_->GetDataIndex("sched_waking");
106     const DataIndex ioWaitId_ = traceDataCache_->GetDataIndex("io_wait");
107     const DataIndex workQueueId_ = traceDataCache_->GetDataIndex("workqueue");
108     const DataIndex schedWakeupId_ = traceDataCache_->GetDataIndex("sched_wakeup");
109     const DataIndex schedBlockedReasonId_ = traceDataCache_->GetDataIndex("sched_blocked_reason");
110     const DataIndex cpuFrequencyLimitMaxNameId = traceDataCache_->GetDataIndex("cpu_frequency_limits_max");
111     const DataIndex cpuFrequencyLimitMinNameId = traceDataCache_->GetDataIndex("cpu_frequency_limits_min");
112 
113 protected:
114     TraceStreamerConfig config_{};
115 };
116 } // namespace TraceStreamer
117 } // namespace SysTuning
118 
119 #endif // SRC_BYTRACE_EVENT_PARSER_H
120