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 schedSwitchMsg->set_prev_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
253 schedSwitchMsg->set_prev_state(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
254 schedSwitchMsg->set_next_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
255 schedSwitchMsg->set_next_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
256 schedSwitchMsg->set_next_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
257 return true;
258 }
SchedBlockedReason(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)259 bool FtraceEventProcessor::SchedBlockedReason(FtraceEvent &ftraceEvent,
260 uint8_t data[],
261 size_t size,
262 const EventFormat &format)
263 {
264 uint8_t index = 0;
265 auto schedBlockedMsg = ftraceEvent.mutable_sched_blocked_reason_format();
266 schedBlockedMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
267 schedBlockedMsg->set_caller(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
268 schedBlockedMsg->set_io_wait(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
269 if (format.fields.size() == SCHED_BLOCKED_REASON_FIELD_SIZE_EIGHT) {
270 index++; // skip delay field
271 uint64_t offset = FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size);
272 uint64_t siz = FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size);
273 std::string funcName = FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size);
274 std::string modName = FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size);
275 std::ostringstream caller;
276 caller << funcName << "+0x" << std::hex << offset << "/0x" << std::hex << siz << "[" << modName << "]";
277 schedBlockedMsg->set_caller_str(caller.str());
278 }
279 return true;
280 }
SchedWakeup(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)281 bool FtraceEventProcessor::SchedWakeup(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
282 {
283 uint8_t index = 0;
284 auto schedWakeupMsg = ftraceEvent.mutable_sched_wakeup_format();
285 schedWakeupMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
286 schedWakeupMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
287 schedWakeupMsg->set_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
288 schedWakeupMsg->set_success(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
289 schedWakeupMsg->set_target_cpu(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
290 return true;
291 }
SchedWaking(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)292 bool FtraceEventProcessor::SchedWaking(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
293 {
294 uint8_t index = 0;
295 auto schedWakingMsg = ftraceEvent.mutable_sched_waking_format();
296 schedWakingMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
297 schedWakingMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
298 schedWakingMsg->set_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
299 schedWakingMsg->set_success(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
300 schedWakingMsg->set_target_cpu(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
301 return true;
302 }
SchedWakeupNew(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)303 bool FtraceEventProcessor::SchedWakeupNew(FtraceEvent &ftraceEvent,
304 uint8_t data[],
305 size_t size,
306 const EventFormat &format)
307 {
308 uint8_t index = 0;
309 auto wakeupNewMsg = ftraceEvent.mutable_sched_wakeup_new_format();
310 wakeupNewMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
311 wakeupNewMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
312 wakeupNewMsg->set_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
313 wakeupNewMsg->set_success(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
314 wakeupNewMsg->set_target_cpu(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
315 return true;
316 }
SchedProcessExit(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)317 bool FtraceEventProcessor::SchedProcessExit(FtraceEvent &ftraceEvent,
318 uint8_t data[],
319 size_t size,
320 const EventFormat &format)
321 {
322 uint8_t index = 0;
323 auto processExitMsg = ftraceEvent.mutable_sched_process_exit_format();
324 processExitMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
325 processExitMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
326 processExitMsg->set_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
327 return true;
328 }
SchedProcessFree(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)329 bool FtraceEventProcessor::SchedProcessFree(FtraceEvent &ftraceEvent,
330 uint8_t data[],
331 size_t size,
332 const EventFormat &format)
333 {
334 uint8_t index = 0;
335 auto processFreeMsg = ftraceEvent.mutable_sched_process_free_format();
336 processFreeMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
337 processFreeMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
338 processFreeMsg->set_prio(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
339 return true;
340 }
341
BinderTransaction(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)342 bool FtraceEventProcessor::BinderTransaction(FtraceEvent &ftraceEvent,
343 uint8_t data[],
344 size_t size,
345 const EventFormat &format)
346 {
347 uint8_t index = 0;
348 auto transactionMsg = ftraceEvent.mutable_binder_transaction_format();
349 transactionMsg->set_debug_id(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
350 transactionMsg->set_target_node(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
351 transactionMsg->set_to_proc(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
352 transactionMsg->set_to_thread(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
353 transactionMsg->set_reply(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
354 transactionMsg->set_code(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
355 transactionMsg->set_flags(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
356 return true;
357 }
BinderTransactionReceived(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)358 bool FtraceEventProcessor::BinderTransactionReceived(FtraceEvent &ftraceEvent,
359 uint8_t data[],
360 size_t size,
361 const EventFormat &format)
362 {
363 uint8_t index = 0;
364 auto transactionReceivedMsg = ftraceEvent.mutable_binder_transaction_received_format();
365 transactionReceivedMsg->set_debug_id(
366 FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
367 return true;
368 }
BinderTransactionAllocBuf(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)369 bool FtraceEventProcessor::BinderTransactionAllocBuf(FtraceEvent &ftraceEvent,
370 uint8_t data[],
371 size_t size,
372 const EventFormat &format)
373 {
374 uint8_t index = 0;
375 auto transactionAllocBufMsg = ftraceEvent.mutable_binder_transaction_alloc_buf_format();
376 transactionAllocBufMsg->set_debug_id(
377 FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
378 transactionAllocBufMsg->set_data_size(
379 FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
380 transactionAllocBufMsg->set_offsets_size(
381 FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
382 transactionAllocBufMsg->set_extra_buffers_size(
383 FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
384 return true;
385 }
BinderTransactionAllocLock(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)386 bool FtraceEventProcessor::BinderTransactionAllocLock(FtraceEvent &ftraceEvent,
387 uint8_t data[],
388 size_t size,
389 const EventFormat &format)
390 {
391 uint8_t index = 0;
392 auto transactionLockMsg = ftraceEvent.mutable_binder_lock_format();
393 transactionLockMsg->set_tag(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
394 return true;
395 }
BinderTransactionAllocLocked(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)396 bool FtraceEventProcessor::BinderTransactionAllocLocked(FtraceEvent &ftraceEvent,
397 uint8_t data[],
398 size_t size,
399 const EventFormat &format)
400 {
401 uint8_t index = 0;
402 auto transactionLockedMsg = ftraceEvent.mutable_binder_locked_format();
403 transactionLockedMsg->set_tag(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
404 return true;
405 }
BinderTransactionAllocUnlock(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)406 bool FtraceEventProcessor::BinderTransactionAllocUnlock(FtraceEvent &ftraceEvent,
407 uint8_t data[],
408 size_t size,
409 const EventFormat &format)
410 {
411 uint8_t index = 0;
412 auto transactionUnlockMsg = ftraceEvent.mutable_binder_unlock_format();
413 transactionUnlockMsg->set_tag(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
414 return true;
415 }
416
TaskRename(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)417 bool FtraceEventProcessor::TaskRename(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
418 {
419 uint8_t index = 0;
420 auto taskRenameMsg = ftraceEvent.mutable_task_rename_format();
421 taskRenameMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
422 taskRenameMsg->set_oldcomm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
423 taskRenameMsg->set_newcomm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
424 taskRenameMsg->set_oom_score_adj(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
425 return true;
426 }
TaskNewtask(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)427 bool FtraceEventProcessor::TaskNewtask(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
428 {
429 uint8_t index = 0;
430 auto newTaskMsg = ftraceEvent.mutable_task_newtask_format();
431 newTaskMsg->set_pid(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
432 newTaskMsg->set_comm(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
433 newTaskMsg->set_clone_flags(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
434 newTaskMsg->set_oom_score_adj(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
435 return true;
436 }
437
TracingMarkWriteOrPrintFormat(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)438 bool FtraceEventProcessor::TracingMarkWriteOrPrintFormat(FtraceEvent &ftraceEvent,
439 uint8_t data[],
440 size_t size,
441 const EventFormat &format)
442 {
443 uint8_t index = 0;
444 auto printMsg = ftraceEvent.mutable_print_format();
445 if (format.eventId < HM_EVENT_ID_OFFSET) {
446 printMsg->set_ip(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
447 }
448 // size大于20时为适配内核的event,小于则为原始的event
449 if (format.eventSize > 20) {
450 auto pid = FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size);
451 auto name = FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size);
452 auto start = FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size);
453 auto msg = std::string(start == 0 ? "E" : "B") + std::string("|") + std::to_string(pid) + std::string("|") +
454 std::string(start == 0 ? "" : name);
455 printMsg->set_buf(msg);
456 } else {
457 printMsg->set_buf(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
458 }
459 return true;
460 }
461
CpuIdle(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)462 bool FtraceEventProcessor::CpuIdle(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
463 {
464 uint8_t index = 0;
465 auto cpuIdleMsg = ftraceEvent.mutable_cpu_idle_format();
466 cpuIdleMsg->set_state(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
467 cpuIdleMsg->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
468 return true;
469 }
CpuFrequency(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)470 bool FtraceEventProcessor::CpuFrequency(FtraceEvent &ftraceEvent,
471 uint8_t data[],
472 size_t size,
473 const EventFormat &format)
474 {
475 uint8_t index = 0;
476 auto cpuFrequencyMsg = ftraceEvent.mutable_cpu_frequency_format();
477 cpuFrequencyMsg->set_state(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
478 cpuFrequencyMsg->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
479 return true;
480 }
CpuFrequencyLimits(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)481 bool FtraceEventProcessor::CpuFrequencyLimits(FtraceEvent &ftraceEvent,
482 uint8_t data[],
483 size_t size,
484 const EventFormat &format)
485 {
486 uint8_t index = 0;
487 auto frequencyLimitsMsg = ftraceEvent.mutable_cpu_frequency_limits_format();
488 frequencyLimitsMsg->set_min_freq(
489 FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
490 frequencyLimitsMsg->set_max_freq(
491 FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
492 frequencyLimitsMsg->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
493 return true;
494 }
495
SuspendResume(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)496 bool FtraceEventProcessor::SuspendResume(FtraceEvent &ftraceEvent,
497 uint8_t data[],
498 size_t size,
499 const EventFormat &format)
500 {
501 uint8_t index = 0;
502 auto resumeMsg = ftraceEvent.mutable_suspend_resume_format();
503 resumeMsg->set_action(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
504 resumeMsg->set_val(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
505 resumeMsg->set_start(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
506 return true;
507 }
WorkqueueExecuteStart(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)508 bool FtraceEventProcessor::WorkqueueExecuteStart(FtraceEvent &ftraceEvent,
509 uint8_t data[],
510 size_t size,
511 const EventFormat &format)
512 {
513 uint8_t index = 0;
514 auto executeStartMsg = ftraceEvent.mutable_workqueue_execute_start_format();
515 executeStartMsg->set_work(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
516 executeStartMsg->set_function(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
517 return true;
518 }
WorkqueueExecuteEnd(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)519 bool FtraceEventProcessor::WorkqueueExecuteEnd(FtraceEvent &ftraceEvent,
520 uint8_t data[],
521 size_t size,
522 const EventFormat &format)
523 {
524 uint8_t index = 0;
525 auto executeEndMsg = ftraceEvent.mutable_workqueue_execute_end_format();
526 executeEndMsg->set_work(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
527 return true;
528 }
529
IpiEntry(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)530 bool FtraceEventProcessor::IpiEntry(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
531 {
532 uint8_t index = 0;
533 auto ipiEntryMsg = ftraceEvent.mutable_ipi_entry_format();
534 ipiEntryMsg->set_reason(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
535 return true;
536 }
IpiExit(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)537 bool FtraceEventProcessor::IpiExit(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
538 {
539 uint8_t index = 0;
540 auto ipiExitMsg = ftraceEvent.mutable_ipi_exit_format();
541 ipiExitMsg->set_reason(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
542 return true;
543 }
IrqHandlerEntry(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)544 bool FtraceEventProcessor::IrqHandlerEntry(FtraceEvent &ftraceEvent,
545 uint8_t data[],
546 size_t size,
547 const EventFormat &format)
548 {
549 uint8_t index = 0;
550 auto handlerEntryMsg = ftraceEvent.mutable_irq_handler_entry_format();
551 handlerEntryMsg->set_irq(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
552 handlerEntryMsg->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
553 return true;
554 }
IrqHandlerExit(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)555 bool FtraceEventProcessor::IrqHandlerExit(FtraceEvent &ftraceEvent,
556 uint8_t data[],
557 size_t size,
558 const EventFormat &format)
559 {
560 uint8_t index = 0;
561 auto handlerExitMsg = ftraceEvent.mutable_irq_handler_exit_format();
562 handlerExitMsg->set_irq(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
563 handlerExitMsg->set_ret(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
564 return true;
565 }
SoftirqRaise(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)566 bool FtraceEventProcessor::SoftirqRaise(FtraceEvent &ftraceEvent,
567 uint8_t data[],
568 size_t size,
569 const EventFormat &format)
570 {
571 uint8_t index = 0;
572 auto softirqRaiseMsg = ftraceEvent.mutable_softirq_raise_format();
573 softirqRaiseMsg->set_vec(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
574 return true;
575 }
SoftirqEntry(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)576 bool FtraceEventProcessor::SoftirqEntry(FtraceEvent &ftraceEvent,
577 uint8_t data[],
578 size_t size,
579 const EventFormat &format)
580 {
581 uint8_t index = 0;
582 auto softirqEntryMsg = ftraceEvent.mutable_softirq_entry_format();
583 softirqEntryMsg->set_vec(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
584 return true;
585 }
SoftirqExit(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)586 bool FtraceEventProcessor::SoftirqExit(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
587 {
588 uint8_t index = 0;
589 auto softirqExitMsg = ftraceEvent.mutable_softirq_exit_format();
590 softirqExitMsg->set_vec(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
591 return true;
592 }
DmaFenceInit(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)593 bool FtraceEventProcessor::DmaFenceInit(FtraceEvent &ftraceEvent,
594 uint8_t data[],
595 size_t size,
596 const EventFormat &format)
597 {
598 uint8_t index = 0;
599 auto dmaFenceInitMsg = ftraceEvent.mutable_dma_fence_init_format();
600 dmaFenceInitMsg->set_driver(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
601 dmaFenceInitMsg->set_timeline(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
602 dmaFenceInitMsg->set_context(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
603 dmaFenceInitMsg->set_seqno(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
604 return true;
605 }
DmaFenceDestroy(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)606 bool FtraceEventProcessor::DmaFenceDestroy(FtraceEvent &ftraceEvent,
607 uint8_t data[],
608 size_t size,
609 const EventFormat &format)
610 {
611 uint8_t index = 0;
612 auto dmaFenceDestroyMsg = ftraceEvent.mutable_dma_fence_destroy_format();
613 dmaFenceDestroyMsg->set_driver(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
614 dmaFenceDestroyMsg->set_timeline(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
615 dmaFenceDestroyMsg->set_context(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
616 dmaFenceDestroyMsg->set_seqno(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
617 return true;
618 }
DmaFenceEnable(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)619 bool FtraceEventProcessor::DmaFenceEnable(FtraceEvent &ftraceEvent,
620 uint8_t data[],
621 size_t size,
622 const EventFormat &format)
623 {
624 uint8_t index = 0;
625 auto dmaFenceEnableMsg = ftraceEvent.mutable_dma_fence_enable_signal_format();
626 dmaFenceEnableMsg->set_driver(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
627 dmaFenceEnableMsg->set_timeline(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
628 dmaFenceEnableMsg->set_context(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
629 dmaFenceEnableMsg->set_seqno(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
630 return true;
631 }
DmaFenceSignaled(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)632 bool FtraceEventProcessor::DmaFenceSignaled(FtraceEvent &ftraceEvent,
633 uint8_t data[],
634 size_t size,
635 const EventFormat &format)
636 {
637 uint8_t index = 0;
638 auto dmaFenceSignaledMsg = ftraceEvent.mutable_dma_fence_signaled_format();
639 dmaFenceSignaledMsg->set_driver(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
640 dmaFenceSignaledMsg->set_timeline(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
641 dmaFenceSignaledMsg->set_context(
642 FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
643 dmaFenceSignaledMsg->set_seqno(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
644 return true;
645 }
ClockSetRate(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)646 bool FtraceEventProcessor::ClockSetRate(FtraceEvent &ftraceEvent,
647 uint8_t data[],
648 size_t size,
649 const EventFormat &format)
650 {
651 uint8_t index = 0;
652 auto clockSetRateMsg = ftraceEvent.mutable_clock_set_rate_format();
653 clockSetRateMsg->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
654 clockSetRateMsg->set_state(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
655 clockSetRateMsg->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
656 return true;
657 }
ClockEnable(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)658 bool FtraceEventProcessor::ClockEnable(FtraceEvent &ftraceEvent, uint8_t data[], size_t size, const EventFormat &format)
659 {
660 uint8_t index = 0;
661 auto clockEnable = ftraceEvent.mutable_clock_enable_format();
662 clockEnable->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
663 clockEnable->set_state(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
664 clockEnable->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
665 return true;
666 }
ClockDisable(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)667 bool FtraceEventProcessor::ClockDisable(FtraceEvent &ftraceEvent,
668 uint8_t data[],
669 size_t size,
670 const EventFormat &format)
671 {
672 uint8_t index = 0;
673 auto clockDisable = ftraceEvent.mutable_clock_disable_format();
674 clockDisable->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
675 clockDisable->set_state(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
676 clockDisable->set_cpu_id(FtraceFieldProcessor::HandleIntField<uint64_t>(format.fields, index++, data, size));
677 return true;
678 }
RegulatorSetVoltage(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)679 bool FtraceEventProcessor::RegulatorSetVoltage(FtraceEvent &ftraceEvent,
680 uint8_t data[],
681 size_t size,
682 const EventFormat &format)
683 {
684 uint8_t index = 0;
685 auto regulatorSetVoltage = ftraceEvent.mutable_regulator_set_voltage_format();
686 regulatorSetVoltage->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
687 regulatorSetVoltage->set_min(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
688 regulatorSetVoltage->set_max(FtraceFieldProcessor::HandleIntField<int32_t>(format.fields, index++, data, size));
689 return true;
690 }
RegulatorSetVoltageComplete(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)691 bool FtraceEventProcessor::RegulatorSetVoltageComplete(FtraceEvent &ftraceEvent,
692 uint8_t data[],
693 size_t size,
694 const EventFormat &format)
695 {
696 uint8_t index = 0;
697 auto regulatorSetVoltage = ftraceEvent.mutable_regulator_set_voltage_complete_format();
698 regulatorSetVoltage->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
699 regulatorSetVoltage->set_val(FtraceFieldProcessor::HandleIntField<uint32_t>(format.fields, index++, data, size));
700 return true;
701 }
RegulatorDisable(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)702 bool FtraceEventProcessor::RegulatorDisable(FtraceEvent &ftraceEvent,
703 uint8_t data[],
704 size_t size,
705 const EventFormat &format)
706 {
707 uint8_t index = 0;
708 auto regulatorDisable = ftraceEvent.mutable_regulator_disable_format();
709 regulatorDisable->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
710 return true;
711 }
RegulatorDisableComplete(FtraceEvent & ftraceEvent,uint8_t data[],size_t size,const EventFormat & format)712 bool FtraceEventProcessor::RegulatorDisableComplete(FtraceEvent &ftraceEvent,
713 uint8_t data[],
714 size_t size,
715 const EventFormat &format)
716 {
717 uint8_t index = 0;
718 auto regulatorDisableComplete = ftraceEvent.mutable_regulator_disable_complete_format();
719 regulatorDisableComplete->set_name(FtraceFieldProcessor::HandleStrField(format.fields, index++, data, size));
720 return true;
721 }
722 } // namespace TraceStreamer
723 } // namespace SysTuning
724