• 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 #ifndef FTRACE_EVENT_PROCESSOR_H
16 #define FTRACE_EVENT_PROCESSOR_H
17 #include <cstdint>
18 #include <functional>
19 #include <map>
20 #include "ftrace_field_processor.h"
21 #include "trace_plugin_result.pb.h"
22 #include "trace_streamer_config.h"
23 
24 namespace SysTuning {
25 namespace TraceStreamer {
26 constexpr uint32_t HM_EVENT_ID_OFFSET = 32768;
27 using namespace TraceCfg;
28 class FtraceEventProcessor {
29 public:
30     static FtraceEventProcessor& GetInstance();
31     bool SetupEvent(const EventFormat& format);
32     bool IsSupported(uint32_t eventId) const;
33     bool IsSupported(const std::string& eventName) const;
34     bool HandleEvent(FtraceEvent& event, uint8_t data[], size_t size, const EventFormat& format) const;
35     const std::string& GetEventNameById(uint32_t eventId);
36 
37 private:
38     using HandleFunction = std::function<bool(FtraceEvent&, uint8_t[], size_t, const EventFormat&)>;
39     bool IpiEntry(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
40     bool IpiExit(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
41     bool IrqHandlerEntry(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
42     bool IrqHandlerExit(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
43     bool SoftirqRaise(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
44     bool SoftirqEntry(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
45     bool SoftirqExit(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
46     bool SuspendResume(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
47     bool WorkqueueExecuteStart(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
48     bool WorkqueueExecuteEnd(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
49     bool CpuIdle(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
50     bool CpuFrequency(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
51     bool CpuFrequencyLimits(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
52     bool TracingMarkWriteOrPrintFormat(FtraceEvent& ftraceEvent,
53                                        uint8_t data[],
54                                        size_t size,
55                                        const EventFormat& format);
56     bool TaskRename(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
57     bool TaskNewtask(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
58     bool BinderTransaction(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
59     bool BinderTransactionReceived(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
60     bool BinderTransactionAllocBuf(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
61     bool BinderTransactionAllocLock(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
62     bool BinderTransactionAllocLocked(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
63     bool BinderTransactionAllocUnlock(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
64     bool SchedSwitch(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
65     bool SchedBlockedReason(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
66     bool SchedWakeup(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
67     bool SchedWaking(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
68     bool SchedWakeupNew(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
69     bool SchedProcessExit(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
70     bool SchedProcessFree(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
71     bool ClockSetRate(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
72     bool ClockEnable(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
73     bool ClockDisable(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
74     bool RegulatorSetVoltage(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
75     bool RegulatorSetVoltageComplete(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
76     bool RegulatorDisable(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
77     bool RegulatorDisableComplete(FtraceEvent& ftraceEvent, uint8_t data[], size_t size, const EventFormat& format);
78 
79     void InterruptEventInitialization();
80     void ClockEventInitialization();
81     void CpuEventInitialization();
82     void LockEventInitialization();
83     void BinderEventInitialization();
84     void StackEventsInitialization();
85     void VoltageEventInitialization();
86 
87 private:
88     FtraceEventProcessor();
89     ~FtraceEventProcessor();
90     std::map<uint32_t, HandleFunction> eventIdToFunctions_;
91     std::map<uint32_t, std::string> eventIdToNames_;
92     std::map<std::string, HandleFunction> eventNameToFunctions_;
93     TraceStreamerConfig config_;
94 };
95 } // namespace TraceStreamer
96 } // namespace SysTuning
97 #endif // FTRACE_EVENT_PROCESSOR_H
98