• 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() const;
48 private:
49     using FuncCall = std::function<bool(const ArgsMap& args, const BytraceLine line)>;
50     bool SchedSwitchEvent(const ArgsMap& args, const BytraceLine& line) const;
51     bool TaskRenameEvent(const ArgsMap& args, const BytraceLine& line) const;
52     bool TaskNewtaskEvent(const ArgsMap& args, const BytraceLine& line) const;
53     bool TracingMarkWriteOrPrintEvent(const ArgsMap& args, const BytraceLine& line);
54     bool SchedWakeupEvent(const ArgsMap& args, const BytraceLine& line) const;
55     bool SchedWakingEvent(const ArgsMap& args, const BytraceLine& line) const;
56     bool CpuIdleEvent(const ArgsMap& args, const BytraceLine& line) const;
57     bool CpuFrequencyEvent(const ArgsMap& args, const BytraceLine& line) const;
58     bool CpuFrequencyLimitsEvent(const ArgsMap& args, const BytraceLine& line) const;
59     bool WorkqueueExecuteStartEvent(const ArgsMap& args, const BytraceLine& line) const;
60     bool WorkqueueExecuteEndEvent(const ArgsMap& args, const BytraceLine& line) const;
61     bool ProcessExitEvent(const ArgsMap& args, const BytraceLine& line) const;
62     bool SetRateEvent(const ArgsMap& args, const BytraceLine& line) const;
63     bool ClockEnableEvent(const ArgsMap& args, const BytraceLine& line) const;
64     bool ClockDisableEvent(const ArgsMap& args, const BytraceLine& line) const;
65     bool RegulatorSetVoltageEvent(const ArgsMap& args, const BytraceLine& line) const;
66     bool RegulatorSetVoltageCompleteEvent(const ArgsMap& args, const BytraceLine& line) const;
67     bool RegulatorDisableEvent(const ArgsMap& args, const BytraceLine& line) const;
68     bool RegulatorDisableCompleteEvent(const ArgsMap& args, const BytraceLine& line) const;
69     bool IpiEntryEvent(const ArgsMap& args, const BytraceLine& line) const;
70     bool IpiExitEvent(const ArgsMap& args, const BytraceLine& line) const;
71     bool IrqHandlerEntryEvent(const ArgsMap& args, const BytraceLine& line) const;
72     bool IrqHandlerExitEvent(const ArgsMap& args, const BytraceLine& line) const;
73     bool SoftIrqRaiseEvent(const ArgsMap& args, const BytraceLine& line) const;
74     bool SoftIrqEntryEvent(const ArgsMap& args, const BytraceLine& line) const;
75     bool SoftIrqExitEvent(const ArgsMap& args, const BytraceLine& line) const;
76     bool BinderTransaction(const ArgsMap& args, const BytraceLine& line) const;
77     bool BinderTransactionReceived(const ArgsMap& args, const BytraceLine& line) const;
78     bool BinderTransactionAllocBufEvent(const ArgsMap& args, const BytraceLine& line) const;
79     void GetDataSegArgs(BytraceLine& bufLine, ArgsMap& args, uint32_t& tgid) const;
80 
81     std::map<std::string, FuncCall> eventToFunctionMap_ = {};
82     const unsigned int MIN_SCHED_SWITCH_ARGS_COUNT = 6;
83     const unsigned int MIN_SCHED_WAKEUP_ARGS_COUNT = 2;
84     const unsigned int MIN_TASK_RENAME_ARGS_COUNT = 2;
85     const unsigned int MIN_SCHED_WAKING_ARGS_COUNT = 4;
86     const unsigned int MIN_CPU_IDLE_ARGS_COUNT = 2;
87     const unsigned int MIN_CPU_FREQUENCY_ARGS_COUNT = 2;
88     const unsigned int MIN_PROCESS_EXIT_ARGS_COUNT = 2;
89     const unsigned int MIN_CLOCK_SET_RATE_ARGS_COUNT = 3;
90     const unsigned int MIN_CLOCK_ENABLE_ARGS_COUNT = 3;
91     const unsigned int MIN_CLOCK_DISABLE_ARGS_COUNT = 3;
92     const unsigned int MIN_IRQ_HANDLER_ENTRY_ARGS_COUNT = 2;
93     const unsigned int MIN_IRQ_HANDLER_EXIT_ARGS_COUNT = 2;
94     const unsigned int MIN_SOFTIRQ_ENTRY_ARGS_COUNT = 2;
95     const unsigned int MIN_SOFTIRQ_EXIT_ARGS_COUNT = 2;
96     const unsigned int MIN_BINDER_TRANSACTION_ARGS_COUNT = 7;
97     const unsigned int MIN_BINDER_TRANSACTION_RECEIVED_ARGS_COUNT = 1;
98     const unsigned int MIN_BINDER_TRANSACTION_ALLOC_BUF_ARGS_COUNT = 3;
99     std::vector<std::unique_ptr<EventInfo>> eventList_ = {};
100     PrintEventParser printEventParser_;
101     const DataIndex schedWakeupName_ = traceDataCache_->GetDataIndex("sched_wakeup");
102     const DataIndex schedWakingName_ = traceDataCache_->GetDataIndex("sched_waking");
103     const DataIndex ioWaitId_ = traceDataCache_->GetDataIndex("io_wait");
104     const DataIndex workQueueId_ = traceDataCache_->GetDataIndex("workqueue");
105     const DataIndex schedWakeupId_ = traceDataCache_->GetDataIndex("sched_wakeup");
106     const DataIndex schedBlockedReasonId_ = traceDataCache_->GetDataIndex("sched_blocked_reason");
107     const DataIndex cpuFrequencyLimitMaxNameId = traceDataCache_->GetDataIndex("cpu_frequency_limits_max");
108     const DataIndex cpuFrequencyLimitMinNameId = traceDataCache_->GetDataIndex("cpu_frequency_limits_min");
109 protected:
110     TraceStreamerConfig config_{};
111 };
112 } // namespace TraceStreamer
113 } // namespace SysTuning
114 
115 #endif // SRC_BYTRACE_EVENT_PARSER_H
116