• 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 #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 DmaFenceInit(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
47     bool DmaFenceDestroy(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
48     bool DmaFenceEnable(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
49     bool DmaFenceSignaled(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
50     bool SuspendResume(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
51     bool WorkqueueExecuteStart(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
52     bool WorkqueueExecuteEnd(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
53     bool CpuIdle(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
54     bool CpuFrequency(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
55     bool CpuFrequencyLimits(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
56     bool TracingMarkWriteOrPrintFormat(FtraceEvent &ftraceEvent,
57                                        uint8_t data[],
58                                        size_t size,
59                                        const EventFormat &format);
60     bool TaskRename(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
61     bool TaskNewtask(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
62     bool BinderTransaction(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
63     bool BinderTransactionReceived(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
64     bool BinderTransactionAllocBuf(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
65     bool BinderTransactionAllocLock(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
66     bool BinderTransactionAllocLocked(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
67     bool BinderTransactionAllocUnlock(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
68     bool SchedSwitch(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
69     bool SchedBlockedReason(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
70     bool SchedWakeup(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
71     bool SchedWaking(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
72     bool SchedWakeupNew(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
73     bool SchedProcessExit(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
74     bool SchedProcessFree(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
75     bool ClockSetRate(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
76     bool ClockEnable(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
77     bool ClockDisable(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
78     bool RegulatorSetVoltage(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
79     bool RegulatorSetVoltageComplete(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
80     bool RegulatorDisable(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
81     bool RegulatorDisableComplete(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format);
82 
83     void InterruptEventInitialization();
84     void ClockEventInitialization();
85     void CpuEventInitialization();
86     void LockEventInitialization();
87     void BinderEventInitialization();
88     void StackEventsInitialization();
89     void VoltageEventInitialization();
90 
91 private:
92     FtraceEventProcessor();
93     ~FtraceEventProcessor();
94     std::map<uint32_t, HandleFunction> eventIdToFunctions_;
95     std::map<uint32_t, std::string> eventIdToNames_;
96     std::map<std::string, HandleFunction> eventNameToFunctions_;
97     TraceStreamerConfig config_;
98     const uint32_t SCHED_BLOCKED_REASON_FIELD_SIZE_EIGHT = 8;
99 };
100 } // namespace TraceStreamer
101 } // namespace SysTuning
102 #endif // FTRACE_EVENT_PROCESSOR_H
103