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