• 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 #include "ftrace_event_processor.h"
16 #include "rawtrace_parser/ftrace_field_processor.h"
17 #include <cstdint>
18 #include <string>
19 #include <sstream>
20 
21 namespace SysTuning {
22 namespace TraceStreamer {
GetInstance()23 FtraceEventProcessor &FtraceEventProcessor::GetInstance()
24 {
25     static FtraceEventProcessor instance;
26     return instance;
27 }
28 
FtraceEventProcessor()29 FtraceEventProcessor::FtraceEventProcessor()
30 {
31     eventNameToFunctions_ = {
32         {config_.eventNameMap_.at(TRACE_EVENT_TASK_RENAME),
33          std::bind(&FtraceEventProcessor::TaskRename, this, std::placeholders::_1, std::placeholders::_2,
34                    std::placeholders::_3, std::placeholders::_4)},
35         {config_.eventNameMap_.at(TRACE_EVENT_TASK_NEWTASK),
36          std::bind(&FtraceEventProcessor::TaskNewtask, this, std::placeholders::_1, std::placeholders::_2,
37                    std::placeholders::_3, std::placeholders::_4)},
38         {config_.eventNameMap_.at(TRACE_EVENT_SCHED_SWITCH),
39          std::bind(&FtraceEventProcessor::SchedSwitch, this, std::placeholders::_1, std::placeholders::_2,
40                    std::placeholders::_3, std::placeholders::_4)},
41         {config_.eventNameMap_.at(TRACE_EVENT_SCHED_BLOCKED_REASON),
42          std::bind(&FtraceEventProcessor::SchedBlockedReason, this, std::placeholders::_1, std::placeholders::_2,
43                    std::placeholders::_3, std::placeholders::_4)},
44         {config_.eventNameMap_.at(TRACE_EVENT_SCHED_WAKEUP),
45          std::bind(&FtraceEventProcessor::SchedWakeup, this, std::placeholders::_1, std::placeholders::_2,
46                    std::placeholders::_3, std::placeholders::_4)},
47         {config_.eventNameMap_.at(TRACE_EVENT_SCHED_WAKING),
48          std::bind(&FtraceEventProcessor::SchedWaking, this, std::placeholders::_1, std::placeholders::_2,
49                    std::placeholders::_3, std::placeholders::_4)},
50         {config_.eventNameMap_.at(TRACE_EVENT_SCHED_WAKEUP_NEW),
51          std::bind(&FtraceEventProcessor::SchedWakeupNew, this, std::placeholders::_1, std::placeholders::_2,
52                    std::placeholders::_3, std::placeholders::_4)},
53         {config_.eventNameMap_.at(TRACE_EVENT_PROCESS_EXIT),
54          std::bind(&FtraceEventProcessor::SchedProcessExit, this, std::placeholders::_1, std::placeholders::_2,
55                    std::placeholders::_3, std::placeholders::_4)},
56         {config_.eventNameMap_.at(TRACE_EVENT_IPI_ENTRY),
57          std::bind(&FtraceEventProcessor::IpiEntry, this, std::placeholders::_1, std::placeholders::_2,
58                    std::placeholders::_3, std::placeholders::_4)},
59         {config_.eventNameMap_.at(TRACE_EVENT_IPI_EXIT),
60          std::bind(&FtraceEventProcessor::IpiExit, this, std::placeholders::_1, std::placeholders::_2,
61                    std::placeholders::_3, std::placeholders::_4)},
62         {config_.eventNameMap_.at(TRACE_EVENT_PROCESS_FREE),
63          std::bind(&FtraceEventProcessor::SchedProcessFree, this, std::placeholders::_1, std::placeholders::_2,
64                    std::placeholders::_3, std::placeholders::_4)},
65         {config_.eventNameMap_.at(TRACE_EVENT_SUSPEND_RESUME),
66          std::bind(&FtraceEventProcessor::SuspendResume, this, std::placeholders::_1, std::placeholders::_2,
67                    std::placeholders::_3, std::placeholders::_4)},
68     };
69     InterruptEventInitialization();
70     ClockEventInitialization();
71     CpuEventInitialization();
72     LockEventInitialization();
73     BinderEventInitialization();
74     StackEventsInitialization();
75     VoltageEventInitialization();
76 }
77 
InterruptEventInitialization()78 void FtraceEventProcessor::InterruptEventInitialization()
79 {
80     // In order for the constructor to not exceed 50 lines, it can only be placed here
81     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_TRACING_MARK_WRITE),
82                                   std::bind(&FtraceEventProcessor::TracingMarkWriteOrPrintFormat, this,
83                                             std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
84                                             std::placeholders::_4));
85 
86     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_IRQ_HANDLER_ENTRY),
87                                   std::bind(&FtraceEventProcessor::IrqHandlerEntry, this, std::placeholders::_1,
88                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
89 
90     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_IRQ_HANDLER_EXIT),
91                                   std::bind(&FtraceEventProcessor::IrqHandlerExit, this, std::placeholders::_1,
92                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
93     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_SOFTIRQ_RAISE),
94                                   std::bind(&FtraceEventProcessor::SoftirqRaise, this, std::placeholders::_1,
95                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
96     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_SOFTIRQ_ENTRY),
97                                   std::bind(&FtraceEventProcessor::SoftirqEntry, this, std::placeholders::_1,
98                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
99 
100     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_SOFTIRQ_EXIT),
101                                   std::bind(&FtraceEventProcessor::SoftirqExit, this, std::placeholders::_1,
102                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
103     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_DMA_FENCE_INIT),
104                                   std::bind(&FtraceEventProcessor::DmaFenceInit, this, std::placeholders::_1,
105                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
106 
107     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_DMA_FENCE_DESTROY),
108                                   std::bind(&FtraceEventProcessor::DmaFenceDestroy, this, std::placeholders::_1,
109                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
110 
111     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_DMA_FENCE_ENABLE),
112                                   std::bind(&FtraceEventProcessor::DmaFenceEnable, this, std::placeholders::_1,
113                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
114 
115     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_DMA_FENCE_SIGNALED),
116                                   std::bind(&FtraceEventProcessor::DmaFenceSignaled, this, std::placeholders::_1,
117                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
118 }
ClockEventInitialization()119 void FtraceEventProcessor::ClockEventInitialization()
120 {
121     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_CLOCK_SET_RATE),
122                                   std::bind(&FtraceEventProcessor::ClockSetRate, this, std::placeholders::_1,
123                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
124     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_CLOCK_ENABLE),
125                                   std::bind(&FtraceEventProcessor::ClockEnable, this, std::placeholders::_1,
126                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
127     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_CLOCK_DISABLE),
128                                   std::bind(&FtraceEventProcessor::ClockDisable, this, std::placeholders::_1,
129                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
130 }
CpuEventInitialization()131 void FtraceEventProcessor::CpuEventInitialization()
132 {
133     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_CPU_IDLE),
134                                   std::bind(&FtraceEventProcessor::CpuIdle, this, std::placeholders::_1,
135                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
136     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_CPU_FREQUENCY),
137                                   std::bind(&FtraceEventProcessor::CpuFrequency, this, std::placeholders::_1,
138                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
139     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_CPU_FREQUENCY_LIMITS),
140                                   std::bind(&FtraceEventProcessor::CpuFrequencyLimits, this, std::placeholders::_1,
141                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
142 }
LockEventInitialization()143 void FtraceEventProcessor::LockEventInitialization()
144 {
145     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_BINDER_TRANSACTION_LOCK),
146                                   std::bind(&FtraceEventProcessor::BinderTransactionAllocLock, this,
147                                             std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
148                                             std::placeholders::_4));
149 
150     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_BINDER_TRANSACTION_LOCKED),
151                                   std::bind(&FtraceEventProcessor::BinderTransactionAllocLocked, this,
152                                             std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
153                                             std::placeholders::_4));
154 
155     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_BINDER_TRANSACTION_UNLOCK),
156                                   std::bind(&FtraceEventProcessor::BinderTransactionAllocUnlock, this,
157                                             std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
158                                             std::placeholders::_4));
159 }
BinderEventInitialization()160 void FtraceEventProcessor::BinderEventInitialization()
161 {
162     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_BINDER_TRANSACTION),
163                                   std::bind(&FtraceEventProcessor::BinderTransaction, this, std::placeholders::_1,
164                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
165     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_BINDER_TRANSACTION_RECEIVED),
166                                   std::bind(&FtraceEventProcessor::BinderTransactionReceived, this,
167                                             std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
168                                             std::placeholders::_4));
169 
170     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_BINDER_TRANSACTION_ALLOC_BUF),
171                                   std::bind(&FtraceEventProcessor::BinderTransactionAllocBuf, this,
172                                             std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
173                                             std::placeholders::_4));
174 }
StackEventsInitialization()175 void FtraceEventProcessor::StackEventsInitialization()
176 {
177     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_PRINT),
178                                   std::bind(&FtraceEventProcessor::TracingMarkWriteOrPrintFormat, this,
179                                             std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
180                                             std::placeholders::_4));
181     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_WORKQUEUE_EXECUTE_START),
182                                   std::bind(&FtraceEventProcessor::WorkqueueExecuteStart, this, std::placeholders::_1,
183                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
184     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_WORKQUEUE_EXECUTE_END),
185                                   std::bind(&FtraceEventProcessor::WorkqueueExecuteEnd, this, std::placeholders::_1,
186                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
187 }
VoltageEventInitialization()188 void FtraceEventProcessor::VoltageEventInitialization()
189 {
190     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_REGULATOR_SET_VOLTAGE),
191                                   std::bind(&FtraceEventProcessor::RegulatorSetVoltage, this, std::placeholders::_1,
192                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
193 
194     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_REGULATOR_SET_VOLTAGE_COMPLETE),
195                                   std::bind(&FtraceEventProcessor::RegulatorSetVoltageComplete, this,
196                                             std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
197                                             std::placeholders::_4));
198     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_REGULATOR_DISABLE),
199                                   std::bind(&FtraceEventProcessor::RegulatorDisable, this, std::placeholders::_1,
200                                             std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
201 
202     eventNameToFunctions_.emplace(config_.eventNameMap_.at(TRACE_EVENT_REGULATOR_DISABLE_COMPLETE),
203                                   std::bind(&FtraceEventProcessor::RegulatorDisableComplete, this,
204                                             std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
205                                             std::placeholders::_4));
206 }
207 
~FtraceEventProcessor()208 FtraceEventProcessor::~FtraceEventProcessor()
209 {
210     TS_LOGI("FtraceEventProcessor destroy!");
211 }
212 
IsSupported(uint32_t eventId) const213 bool FtraceEventProcessor::IsSupported(uint32_t eventId) const
214 {
215     return eventIdToFunctions_.count(eventId);
216 }
217 
IsSupported(const std::string & eventName) const218 bool FtraceEventProcessor::IsSupported(const std::string &eventName) const
219 {
220     return eventNameToFunctions_.count(eventName) > 0;
221 }
222 
HandleEvent(FtraceEvent & event,uint8_t data[],size_t size,const EventFormat & format) const223 bool FtraceEventProcessor::HandleEvent(FtraceEvent &event, uint8_t data[], size_t size, const EventFormat &format) const
224 {
225     auto iter = eventIdToFunctions_.find(format.eventId);
226     TS_CHECK_TRUE_RET(iter != eventIdToFunctions_.end(), false);
227     iter->second(event, data, size, format);
228     return true;
229 }
230 
SetupEvent(const EventFormat & format)231 bool FtraceEventProcessor::SetupEvent(const EventFormat &format)
232 {
233     auto it = eventNameToFunctions_.find(format.eventName);
234     TS_CHECK_TRUE_RET(it != eventNameToFunctions_.end(), false);
235     eventIdToFunctions_[format.eventId] = it->second;
236     eventIdToNames_[format.eventId] = format.eventName;
237     return true;
238 }
GetEventNameById(uint32_t eventId)239 const std::string &FtraceEventProcessor::GetEventNameById(uint32_t eventId)
240 {
241     auto iter = eventIdToNames_.find(eventId);
242     TS_CHECK_TRUE_RET(iter != eventIdToNames_.end(), INVALID_STRING);
243     return iter->second;
244 }
245 
SchedSwitch(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)246 bool FtraceEventProcessor::SchedSwitch(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
247 {
248     uint8_t index = 0;
249     auto schedSwitchMsg = ftraceEvent.mutable_sched_switch_format();
250     schedSwitchMsg->set_prev_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
251     schedSwitchMsg->set_prev_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
252     // Optimizing the trace data structure for the HM kernel compatibility.
253     if (format.fields[index].size == NEW_SCHED_PRIO_SIZE) {
254         schedSwitchMsg->set_prev_prio(
255             FtraceFieldProcessor::HandleIntField<int16_t>(format.fields, index++, data, size));
256     } else {
257         schedSwitchMsg->set_prev_prio(
258             FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
259     }
260     schedSwitchMsg->set_prev_state(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
261     schedSwitchMsg->set_next_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
262     schedSwitchMsg->set_next_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
263     if (format.fields[index].size == NEW_SCHED_PRIO_SIZE) {
264         schedSwitchMsg->set_next_prio(
265             FtraceFieldProcessor::HandleIntField<int16_t>(format.fields, index++, data, size));
266     } else {
267         schedSwitchMsg->set_next_prio(
268             FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
269     }
270     return true;
271 }
SchedBlockedReason(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)272 bool FtraceEventProcessor::SchedBlockedReason(FtraceEvent &ftraceEvent,
273                                               uint8_t data[],
274                                               size_t size,
275                                               const EventFormat &format)
276 {
277     uint8_t index = 0;
278     auto schedBlockedMsg = ftraceEvent.mutable_sched_blocked_reason_format();
279     schedBlockedMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
280     schedBlockedMsg->set_caller(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
281     schedBlockedMsg->set_io_wait(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
282     if (format.fields.size() == SCHED_BLOCKED_REASON_FIELD_SIZE_EIGHT) {
283         index++; // skip delay field
284         uint64_t offset = FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size);
285         uint64_t siz = FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size);
286         std::string funcName = FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size);
287         std::string modName = FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size);
288         std::ostringstream caller;
289         caller << funcName << "+0x" << std::hex << offset << "/0x" << std::hex << siz << "[" << modName << "]";
290         schedBlockedMsg->set_caller_str(caller.str());
291     }
292     return true;
293 }
SchedWakeup(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)294 bool FtraceEventProcessor::SchedWakeup(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
295 {
296     uint8_t index = 0;
297     auto schedWakeupMsg = ftraceEvent.mutable_sched_wakeup_format();
298     schedWakeupMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
299     schedWakeupMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
300     if (format.fields[index].size == NEW_SCHED_PRIO_SIZE) {
301         schedWakeupMsg->set_prio(FtraceFieldProcessor::HandleIntField<int16_t>(format.fields, index++, data, size));
302         schedWakeupMsg->set_target_cpu(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
303     } else {
304         schedWakeupMsg->set_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
305         schedWakeupMsg->set_success(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
306         schedWakeupMsg->set_target_cpu(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
307     }
308     return true;
309 }
SchedWaking(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)310 bool FtraceEventProcessor::SchedWaking(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
311 {
312     uint8_t index = 0;
313     auto schedWakingMsg = ftraceEvent.mutable_sched_waking_format();
314     schedWakingMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
315     schedWakingMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
316     if (format.fields[index].size == NEW_SCHED_PRIO_SIZE) {
317         schedWakingMsg->set_prio(FtraceFieldProcessor::HandleIntField<int16_t>(format.fields, index++, data, size));
318         schedWakingMsg->set_target_cpu(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
319     } else {
320         schedWakingMsg->set_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
321         schedWakingMsg->set_success(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
322         schedWakingMsg->set_target_cpu(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
323     }
324     return true;
325 }
SchedWakeupNew(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)326 bool FtraceEventProcessor::SchedWakeupNew(FtraceEvent &ftraceEvent,
327                                           uint8_t data[],
328                                           size_t size,
329                                           const EventFormat &format)
330 {
331     uint8_t index = 0;
332     auto wakeupNewMsg = ftraceEvent.mutable_sched_wakeup_new_format();
333     wakeupNewMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
334     wakeupNewMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
335     if (format.fields[index].size == NEW_SCHED_PRIO_SIZE) {
336         wakeupNewMsg->set_prio(FtraceFieldProcessor::HandleIntField<int16_t>(format.fields, index++, data, size));
337         wakeupNewMsg->set_target_cpu(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
338     } else {
339         wakeupNewMsg->set_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
340         wakeupNewMsg->set_success(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
341         wakeupNewMsg->set_target_cpu(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
342     }
343     return true;
344 }
SchedProcessExit(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)345 bool FtraceEventProcessor::SchedProcessExit(FtraceEvent &ftraceEvent,
346                                             uint8_t data[],
347                                             size_t size,
348                                             const EventFormat &format)
349 {
350     uint8_t index = 0;
351     auto processExitMsg = ftraceEvent.mutable_sched_process_exit_format();
352     processExitMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
353     processExitMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
354     processExitMsg->set_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
355     return true;
356 }
SchedProcessFree(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)357 bool FtraceEventProcessor::SchedProcessFree(FtraceEvent &ftraceEvent,
358                                             uint8_t data[],
359                                             size_t size,
360                                             const EventFormat &format)
361 {
362     uint8_t index = 0;
363     auto processFreeMsg = ftraceEvent.mutable_sched_process_free_format();
364     processFreeMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
365     processFreeMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
366     processFreeMsg->set_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
367     return true;
368 }
369 
BinderTransaction(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)370 bool FtraceEventProcessor::BinderTransaction(FtraceEvent &ftraceEvent,
371                                              uint8_t data[],
372                                              size_t size,
373                                              const EventFormat &format)
374 {
375     uint8_t index = 0;
376     auto transactionMsg = ftraceEvent.mutable_binder_transaction_format();
377     transactionMsg->set_debug_id(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
378     transactionMsg->set_target_node(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
379     transactionMsg->set_to_proc(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
380     transactionMsg->set_to_thread(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
381     transactionMsg->set_reply(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
382     transactionMsg->set_code(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
383     transactionMsg->set_flags(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
384     return true;
385 }
BinderTransactionReceived(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)386 bool FtraceEventProcessor::BinderTransactionReceived(FtraceEvent &ftraceEvent,
387                                                      uint8_t data[],
388                                                      size_t size,
389                                                      const EventFormat &format)
390 {
391     uint8_t index = 0;
392     auto transactionReceivedMsg = ftraceEvent.mutable_binder_transaction_received_format();
393     transactionReceivedMsg->set_debug_id(
394         FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
395     return true;
396 }
BinderTransactionAllocBuf(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)397 bool FtraceEventProcessor::BinderTransactionAllocBuf(FtraceEvent &ftraceEvent,
398                                                      uint8_t data[],
399                                                      size_t size,
400                                                      const EventFormat &format)
401 {
402     uint8_t index = 0;
403     auto transactionAllocBufMsg = ftraceEvent.mutable_binder_transaction_alloc_buf_format();
404     transactionAllocBufMsg->set_debug_id(
405         FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
406     transactionAllocBufMsg->set_data_size(
407         FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
408     transactionAllocBufMsg->set_offsets_size(
409         FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
410     transactionAllocBufMsg->set_extra_buffers_size(
411         FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
412     return true;
413 }
BinderTransactionAllocLock(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)414 bool FtraceEventProcessor::BinderTransactionAllocLock(FtraceEvent &ftraceEvent,
415                                                       uint8_t data[],
416                                                       size_t size,
417                                                       const EventFormat &format)
418 {
419     uint8_t index = 0;
420     auto transactionLockMsg = ftraceEvent.mutable_binder_lock_format();
421     transactionLockMsg->set_tag(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
422     return true;
423 }
BinderTransactionAllocLocked(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)424 bool FtraceEventProcessor::BinderTransactionAllocLocked(FtraceEvent &ftraceEvent,
425                                                         uint8_t data[],
426                                                         size_t size,
427                                                         const EventFormat &format)
428 {
429     uint8_t index = 0;
430     auto transactionLockedMsg = ftraceEvent.mutable_binder_locked_format();
431     transactionLockedMsg->set_tag(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
432     return true;
433 }
BinderTransactionAllocUnlock(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)434 bool FtraceEventProcessor::BinderTransactionAllocUnlock(FtraceEvent &ftraceEvent,
435                                                         uint8_t data[],
436                                                         size_t size,
437                                                         const EventFormat &format)
438 {
439     uint8_t index = 0;
440     auto transactionUnlockMsg = ftraceEvent.mutable_binder_unlock_format();
441     transactionUnlockMsg->set_tag(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
442     return true;
443 }
444 
TaskRename(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)445 bool FtraceEventProcessor::TaskRename(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
446 {
447     uint8_t index = 0;
448     auto taskRenameMsg = ftraceEvent.mutable_task_rename_format();
449     taskRenameMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
450     taskRenameMsg->set_oldcomm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
451     taskRenameMsg->set_newcomm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
452     taskRenameMsg->set_oom_score_adj(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
453     return true;
454 }
TaskNewtask(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)455 bool FtraceEventProcessor::TaskNewtask(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
456 {
457     uint8_t index = 0;
458     auto newTaskMsg = ftraceEvent.mutable_task_newtask_format();
459     newTaskMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
460     newTaskMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
461     newTaskMsg->set_clone_flags(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
462     newTaskMsg->set_oom_score_adj(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
463     return true;
464 }
465 
TracingMarkWriteOrPrintFormat(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)466 bool FtraceEventProcessor::TracingMarkWriteOrPrintFormat(FtraceEvent &ftraceEvent,
467                                                          uint8_t data[],
468                                                          size_t size,
469                                                          const EventFormat &format)
470 {
471     uint8_t index = 0;
472     auto printMsg = ftraceEvent.mutable_print_format();
473     if (format.eventId < HM_EVENT_ID_OFFSET) {
474         printMsg->set_ip(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
475     }
476     // size大于20时为适配内核的event,小于则为原始的event
477     if (format.eventSize > 20) {
478         auto pid = FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size);
479         auto name = FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size);
480         auto start = FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size);
481         auto msg = std::string(start == 0 ? "E" : "B") + std::string("|") + std::to_string(pid) + std::string("|") +
482                    std::string(start == 0 ? "" : name);
483         printMsg->set_buf(msg);
484     } else {
485         printMsg->set_buf(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
486     }
487     return true;
488 }
489 
CpuIdle(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)490 bool FtraceEventProcessor::CpuIdle(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
491 {
492     uint8_t index = 0;
493     auto cpuIdleMsg = ftraceEvent.mutable_cpu_idle_format();
494     cpuIdleMsg->set_state(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
495     cpuIdleMsg->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
496     return true;
497 }
CpuFrequency(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)498 bool FtraceEventProcessor::CpuFrequency(FtraceEvent &ftraceEvent,
499                                         uint8_t data[],
500                                         size_t size,
501                                         const EventFormat &format)
502 {
503     uint8_t index = 0;
504     auto cpuFrequencyMsg = ftraceEvent.mutable_cpu_frequency_format();
505     cpuFrequencyMsg->set_state(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
506     cpuFrequencyMsg->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
507     return true;
508 }
CpuFrequencyLimits(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)509 bool FtraceEventProcessor::CpuFrequencyLimits(FtraceEvent &ftraceEvent,
510                                               uint8_t data[],
511                                               size_t size,
512                                               const EventFormat &format)
513 {
514     uint8_t index = 0;
515     auto frequencyLimitsMsg = ftraceEvent.mutable_cpu_frequency_limits_format();
516     frequencyLimitsMsg->set_min_freq(
517         FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
518     frequencyLimitsMsg->set_max_freq(
519         FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
520     frequencyLimitsMsg->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
521     return true;
522 }
523 
SuspendResume(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)524 bool FtraceEventProcessor::SuspendResume(FtraceEvent &ftraceEvent,
525                                          uint8_t data[],
526                                          size_t size,
527                                          const EventFormat &format)
528 {
529     uint8_t index = 0;
530     auto resumeMsg = ftraceEvent.mutable_suspend_resume_format();
531     resumeMsg->set_action(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
532     resumeMsg->set_val(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
533     resumeMsg->set_start(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
534     return true;
535 }
WorkqueueExecuteStart(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)536 bool FtraceEventProcessor::WorkqueueExecuteStart(FtraceEvent &ftraceEvent,
537                                                  uint8_t data[],
538                                                  size_t size,
539                                                  const EventFormat &format)
540 {
541     uint8_t index = 0;
542     auto executeStartMsg = ftraceEvent.mutable_workqueue_execute_start_format();
543     executeStartMsg->set_work(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
544     executeStartMsg->set_function(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
545     return true;
546 }
WorkqueueExecuteEnd(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)547 bool FtraceEventProcessor::WorkqueueExecuteEnd(FtraceEvent &ftraceEvent,
548                                                uint8_t data[],
549                                                size_t size,
550                                                const EventFormat &format)
551 {
552     uint8_t index = 0;
553     auto executeEndMsg = ftraceEvent.mutable_workqueue_execute_end_format();
554     executeEndMsg->set_work(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
555     return true;
556 }
557 
IpiEntry(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)558 bool FtraceEventProcessor::IpiEntry(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
559 {
560     uint8_t index = 0;
561     auto ipiEntryMsg = ftraceEvent.mutable_ipi_entry_format();
562     ipiEntryMsg->set_reason(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
563     return true;
564 }
IpiExit(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)565 bool FtraceEventProcessor::IpiExit(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
566 {
567     uint8_t index = 0;
568     auto ipiExitMsg = ftraceEvent.mutable_ipi_exit_format();
569     ipiExitMsg->set_reason(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
570     return true;
571 }
IrqHandlerEntry(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)572 bool FtraceEventProcessor::IrqHandlerEntry(FtraceEvent &ftraceEvent,
573                                            uint8_t data[],
574                                            size_t size,
575                                            const EventFormat &format)
576 {
577     uint8_t index = 0;
578     auto handlerEntryMsg = ftraceEvent.mutable_irq_handler_entry_format();
579     handlerEntryMsg->set_irq(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
580     handlerEntryMsg->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
581     return true;
582 }
IrqHandlerExit(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)583 bool FtraceEventProcessor::IrqHandlerExit(FtraceEvent &ftraceEvent,
584                                           uint8_t data[],
585                                           size_t size,
586                                           const EventFormat &format)
587 {
588     uint8_t index = 0;
589     auto handlerExitMsg = ftraceEvent.mutable_irq_handler_exit_format();
590     handlerExitMsg->set_irq(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
591     handlerExitMsg->set_ret(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
592     return true;
593 }
SoftirqRaise(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)594 bool FtraceEventProcessor::SoftirqRaise(FtraceEvent &ftraceEvent,
595                                         uint8_t data[],
596                                         size_t size,
597                                         const EventFormat &format)
598 {
599     uint8_t index = 0;
600     auto softirqRaiseMsg = ftraceEvent.mutable_softirq_raise_format();
601     softirqRaiseMsg->set_vec(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
602     return true;
603 }
SoftirqEntry(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)604 bool FtraceEventProcessor::SoftirqEntry(FtraceEvent &ftraceEvent,
605                                         uint8_t data[],
606                                         size_t size,
607                                         const EventFormat &format)
608 {
609     uint8_t index = 0;
610     auto softirqEntryMsg = ftraceEvent.mutable_softirq_entry_format();
611     softirqEntryMsg->set_vec(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
612     return true;
613 }
SoftirqExit(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)614 bool FtraceEventProcessor::SoftirqExit(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
615 {
616     uint8_t index = 0;
617     auto softirqExitMsg = ftraceEvent.mutable_softirq_exit_format();
618     softirqExitMsg->set_vec(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
619     return true;
620 }
DmaFenceInit(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)621 bool FtraceEventProcessor::DmaFenceInit(FtraceEvent &ftraceEvent,
622                                         uint8_t data[],
623                                         size_t size,
624                                         const EventFormat &format)
625 {
626     uint8_t index = 0;
627     auto dmaFenceInitMsg = ftraceEvent.mutable_dma_fence_init_format();
628     dmaFenceInitMsg->set_driver(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
629     dmaFenceInitMsg->set_timeline(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
630     dmaFenceInitMsg->set_context(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
631     dmaFenceInitMsg->set_seqno(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
632     return true;
633 }
DmaFenceDestroy(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)634 bool FtraceEventProcessor::DmaFenceDestroy(FtraceEvent &ftraceEvent,
635                                            uint8_t data[],
636                                            size_t size,
637                                            const EventFormat &format)
638 {
639     uint8_t index = 0;
640     auto dmaFenceDestroyMsg = ftraceEvent.mutable_dma_fence_destroy_format();
641     dmaFenceDestroyMsg->set_driver(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
642     dmaFenceDestroyMsg->set_timeline(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
643     dmaFenceDestroyMsg->set_context(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
644     dmaFenceDestroyMsg->set_seqno(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
645     return true;
646 }
DmaFenceEnable(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)647 bool FtraceEventProcessor::DmaFenceEnable(FtraceEvent &ftraceEvent,
648                                           uint8_t data[],
649                                           size_t size,
650                                           const EventFormat &format)
651 {
652     uint8_t index = 0;
653     auto dmaFenceEnableMsg = ftraceEvent.mutable_dma_fence_enable_signal_format();
654     dmaFenceEnableMsg->set_driver(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
655     dmaFenceEnableMsg->set_timeline(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
656     dmaFenceEnableMsg->set_context(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
657     dmaFenceEnableMsg->set_seqno(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
658     return true;
659 }
DmaFenceSignaled(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)660 bool FtraceEventProcessor::DmaFenceSignaled(FtraceEvent &ftraceEvent,
661                                             uint8_t data[],
662                                             size_t size,
663                                             const EventFormat &format)
664 {
665     uint8_t index = 0;
666     auto dmaFenceSignaledMsg = ftraceEvent.mutable_dma_fence_signaled_format();
667     dmaFenceSignaledMsg->set_driver(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
668     dmaFenceSignaledMsg->set_timeline(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
669     dmaFenceSignaledMsg->set_context(
670         FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
671     dmaFenceSignaledMsg->set_seqno(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
672     return true;
673 }
ClockSetRate(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)674 bool FtraceEventProcessor::ClockSetRate(FtraceEvent &ftraceEvent,
675                                         uint8_t data[],
676                                         size_t size,
677                                         const EventFormat &format)
678 {
679     uint8_t index = 0;
680     auto clockSetRateMsg = ftraceEvent.mutable_clock_set_rate_format();
681     clockSetRateMsg->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
682     clockSetRateMsg->set_state(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
683     clockSetRateMsg->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
684     return true;
685 }
ClockEnable(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)686 bool FtraceEventProcessor::ClockEnable(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
687 {
688     uint8_t index = 0;
689     auto clockEnable = ftraceEvent.mutable_clock_enable_format();
690     clockEnable->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
691     clockEnable->set_state(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
692     clockEnable->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
693     return true;
694 }
ClockDisable(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)695 bool FtraceEventProcessor::ClockDisable(FtraceEvent &ftraceEvent,
696                                         uint8_t data[],
697                                         size_t size,
698                                         const EventFormat &format)
699 {
700     uint8_t index = 0;
701     auto clockDisable = ftraceEvent.mutable_clock_disable_format();
702     clockDisable->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
703     clockDisable->set_state(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
704     clockDisable->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
705     return true;
706 }
RegulatorSetVoltage(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)707 bool FtraceEventProcessor::RegulatorSetVoltage(FtraceEvent &ftraceEvent,
708                                                uint8_t data[],
709                                                size_t size,
710                                                const EventFormat &format)
711 {
712     uint8_t index = 0;
713     auto regulatorSetVoltage = ftraceEvent.mutable_regulator_set_voltage_format();
714     regulatorSetVoltage->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
715     regulatorSetVoltage->set_min(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
716     regulatorSetVoltage->set_max(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
717     return true;
718 }
RegulatorSetVoltageComplete(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)719 bool FtraceEventProcessor::RegulatorSetVoltageComplete(FtraceEvent &ftraceEvent,
720                                                        uint8_t data[],
721                                                        size_t size,
722                                                        const EventFormat &format)
723 {
724     uint8_t index = 0;
725     auto regulatorSetVoltage = ftraceEvent.mutable_regulator_set_voltage_complete_format();
726     regulatorSetVoltage->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
727     regulatorSetVoltage->set_val(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
728     return true;
729 }
RegulatorDisable(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)730 bool FtraceEventProcessor::RegulatorDisable(FtraceEvent &ftraceEvent,
731                                             uint8_t data[],
732                                             size_t size,
733                                             const EventFormat &format)
734 {
735     uint8_t index = 0;
736     auto regulatorDisable = ftraceEvent.mutable_regulator_disable_format();
737     regulatorDisable->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
738     return true;
739 }
RegulatorDisableComplete(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)740 bool FtraceEventProcessor::RegulatorDisableComplete(FtraceEvent &ftraceEvent,
741                                                     uint8_t data[],
742                                                     size_t size,
743                                                     const EventFormat &format)
744 {
745     uint8_t index = 0;
746     auto regulatorDisableComplete = ftraceEvent.mutable_regulator_disable_complete_format();
747     regulatorDisableComplete->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
748     return true;
749 }
750 } // namespace TraceStreamer
751 } // namespace SysTuning
752