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