• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "android/hardware/tests/bar/1.0/Bar.vts.h"
2 #include <cutils/properties.h>
3 #include <cutils/ashmem.h>
4 #include <fcntl.h>
5 #include <sys/stat.h>
6 
7 using namespace android::hardware::tests::bar::V1_0;
8 using namespace android::hardware;
9 
10 #define TRACEFILEPREFIX "/data/local/tmp/"
11 
12 namespace android {
13 namespace vts {
profile____android__hardware__tests__bar__V1_0__IBar__SomethingRelated(VariableSpecificationMessage * arg_name,::android::hardware::tests::bar::V1_0::IBar::SomethingRelated arg_val_name)14 void profile____android__hardware__tests__bar__V1_0__IBar__SomethingRelated(VariableSpecificationMessage* arg_name,
15 ::android::hardware::tests::bar::V1_0::IBar::SomethingRelated arg_val_name __attribute__((__unused__))) {
16     arg_name->set_type(TYPE_STRUCT);
17     auto *arg_name_myRelated __attribute__((__unused__)) = arg_name->add_struct_value();
18     arg_name_myRelated->set_type(TYPE_STRUCT);
19     profile____android__hardware__tests__foo__V1_0__Unrelated(arg_name_myRelated, arg_val_name.myRelated);
20 }
21 
22 
HIDL_INSTRUMENTATION_FUNCTION_android_hardware_tests_bar_V1_0_IBar(details::HidlInstrumentor::InstrumentationEvent event,const char * package,const char * version,const char * interface,const char * method,std::vector<void * > * args)23 void HIDL_INSTRUMENTATION_FUNCTION_android_hardware_tests_bar_V1_0_IBar(
24         details::HidlInstrumentor::InstrumentationEvent event __attribute__((__unused__)),
25         const char* package,
26         const char* version,
27         const char* interface,
28         const char* method __attribute__((__unused__)),
29         std::vector<void *> *args __attribute__((__unused__))) {
30     if (strcmp(package, "android.hardware.tests.bar") != 0) {
31         LOG(WARNING) << "incorrect package. Expect: android.hardware.tests.bar actual: " << package;
32     }
33     std::string version_str = std::string(version);
34     int major_version = stoi(version_str.substr(0, version_str.find('.')));
35     int minor_version = stoi(version_str.substr(version_str.find('.') + 1));
36     if (major_version != 1 || minor_version > 0) {
37         LOG(WARNING) << "incorrect version. Expect: 1.0 or lower (if version != x.0), actual: " << version;
38     }
39     if (strcmp(interface, "IBar") != 0) {
40         LOG(WARNING) << "incorrect interface. Expect: IBar actual: " << interface;
41     }
42 
43     VtsProfilingInterface& profiler = VtsProfilingInterface::getInstance(TRACEFILEPREFIX);
44 
45     bool profiling_for_args = property_get_bool("hal.instrumentation.profile.args", true);
46     if (strcmp(method, "convertToBoolIfSmall") == 0) {
47         FunctionSpecificationMessage msg;
48         msg.set_name("convertToBoolIfSmall");
49         if (profiling_for_args) {
50             if (!args) {
51                 LOG(WARNING) << "no argument passed";
52             } else {
53                 switch (event) {
54                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
55                     case details::HidlInstrumentor::SERVER_API_ENTRY:
56                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
57                     {
58                         if ((*args).size() != 2) {
59                             LOG(ERROR) << "Number of arguments does not match. expect: 2, actual: " << (*args).size() << ", method name: convertToBoolIfSmall, event type: " << event;
60                             break;
61                         }
62                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
63                         ::android::hardware::tests::foo::V1_0::IFoo::Discriminator *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::Discriminator*> ((*args)[0]);
64                         if (arg_val_0 != nullptr) {
65                             arg_0->set_type(TYPE_ENUM);
66                             profile____android__hardware__tests__foo__V1_0__IFoo__Discriminator(arg_0, (*arg_val_0));
67                         } else {
68                             LOG(WARNING) << "argument 0 is null.";
69                         }
70                         auto *arg_1 __attribute__((__unused__)) = msg.add_arg();
71                         ::android::hardware::hidl_vec<::android::hardware::tests::foo::V1_0::IFoo::Union> *arg_val_1 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<::android::hardware::tests::foo::V1_0::IFoo::Union>*> ((*args)[1]);
72                         if (arg_val_1 != nullptr) {
73                             arg_1->set_type(TYPE_VECTOR);
74                             arg_1->set_vector_size((*arg_val_1).size());
75                             for (int arg_1_index = 0; arg_1_index < (int)(*arg_val_1).size(); arg_1_index++) {
76                                 auto *arg_1_vector_arg_1_index __attribute__((__unused__)) = arg_1->add_vector_value();
77                                 arg_1_vector_arg_1_index->set_type(TYPE_UNION);
78                                 profile____android__hardware__tests__foo__V1_0__IFoo__Union(arg_1_vector_arg_1_index, (*arg_val_1)[arg_1_index]);
79                             }
80                         } else {
81                             LOG(WARNING) << "argument 1 is null.";
82                         }
83                         break;
84                     }
85                     case details::HidlInstrumentor::CLIENT_API_EXIT:
86                     case details::HidlInstrumentor::SERVER_API_EXIT:
87                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
88                     {
89                         if ((*args).size() != 1) {
90                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: convertToBoolIfSmall, event type: " << event;
91                             break;
92                         }
93                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
94                         ::android::hardware::hidl_vec<::android::hardware::tests::foo::V1_0::IFoo::ContainsUnion> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<::android::hardware::tests::foo::V1_0::IFoo::ContainsUnion>*> ((*args)[0]);
95                         if (result_val_0 != nullptr) {
96                             result_0->set_type(TYPE_VECTOR);
97                             result_0->set_vector_size((*result_val_0).size());
98                             for (int result_0_index = 0; result_0_index < (int)(*result_val_0).size(); result_0_index++) {
99                                 auto *result_0_vector_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
100                                 result_0_vector_result_0_index->set_type(TYPE_STRUCT);
101                                 profile____android__hardware__tests__foo__V1_0__IFoo__ContainsUnion(result_0_vector_result_0_index, (*result_val_0)[result_0_index]);
102                             }
103                         } else {
104                             LOG(WARNING) << "return value 0 is null.";
105                         }
106                         break;
107                     }
108                     default:
109                     {
110                         LOG(WARNING) << "not supported. ";
111                         break;
112                     }
113                 }
114             }
115         }
116         profiler.AddTraceEvent(event, package, version, interface, msg);
117     }
118     if (strcmp(method, "doThis") == 0) {
119         FunctionSpecificationMessage msg;
120         msg.set_name("doThis");
121         if (profiling_for_args) {
122             if (!args) {
123                 LOG(WARNING) << "no argument passed";
124             } else {
125                 switch (event) {
126                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
127                     case details::HidlInstrumentor::SERVER_API_ENTRY:
128                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
129                     {
130                         if ((*args).size() != 1) {
131                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: doThis, event type: " << event;
132                             break;
133                         }
134                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
135                         float *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<float*> ((*args)[0]);
136                         if (arg_val_0 != nullptr) {
137                             arg_0->set_type(TYPE_SCALAR);
138                             arg_0->mutable_scalar_value()->set_float_t((*arg_val_0));
139                         } else {
140                             LOG(WARNING) << "argument 0 is null.";
141                         }
142                         break;
143                     }
144                     case details::HidlInstrumentor::CLIENT_API_EXIT:
145                     case details::HidlInstrumentor::SERVER_API_EXIT:
146                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
147                     {
148                         if ((*args).size() != 0) {
149                             LOG(ERROR) << "Number of return values does not match. expect: 0, actual: " << (*args).size() << ", method name: doThis, event type: " << event;
150                             break;
151                         }
152                         break;
153                     }
154                     default:
155                     {
156                         LOG(WARNING) << "not supported. ";
157                         break;
158                     }
159                 }
160             }
161         }
162         profiler.AddTraceEvent(event, package, version, interface, msg);
163     }
164     if (strcmp(method, "doThatAndReturnSomething") == 0) {
165         FunctionSpecificationMessage msg;
166         msg.set_name("doThatAndReturnSomething");
167         if (profiling_for_args) {
168             if (!args) {
169                 LOG(WARNING) << "no argument passed";
170             } else {
171                 switch (event) {
172                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
173                     case details::HidlInstrumentor::SERVER_API_ENTRY:
174                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
175                     {
176                         if ((*args).size() != 1) {
177                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: doThatAndReturnSomething, event type: " << event;
178                             break;
179                         }
180                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
181                         int64_t *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<int64_t*> ((*args)[0]);
182                         if (arg_val_0 != nullptr) {
183                             arg_0->set_type(TYPE_SCALAR);
184                             arg_0->mutable_scalar_value()->set_int64_t((*arg_val_0));
185                         } else {
186                             LOG(WARNING) << "argument 0 is null.";
187                         }
188                         break;
189                     }
190                     case details::HidlInstrumentor::CLIENT_API_EXIT:
191                     case details::HidlInstrumentor::SERVER_API_EXIT:
192                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
193                     {
194                         if ((*args).size() != 1) {
195                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: doThatAndReturnSomething, event type: " << event;
196                             break;
197                         }
198                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
199                         int32_t *result_val_0 __attribute__((__unused__)) = reinterpret_cast<int32_t*> ((*args)[0]);
200                         if (result_val_0 != nullptr) {
201                             result_0->set_type(TYPE_SCALAR);
202                             result_0->mutable_scalar_value()->set_int32_t((*result_val_0));
203                         } else {
204                             LOG(WARNING) << "return value 0 is null.";
205                         }
206                         break;
207                     }
208                     default:
209                     {
210                         LOG(WARNING) << "not supported. ";
211                         break;
212                     }
213                 }
214             }
215         }
216         profiler.AddTraceEvent(event, package, version, interface, msg);
217     }
218     if (strcmp(method, "doQuiteABit") == 0) {
219         FunctionSpecificationMessage msg;
220         msg.set_name("doQuiteABit");
221         if (profiling_for_args) {
222             if (!args) {
223                 LOG(WARNING) << "no argument passed";
224             } else {
225                 switch (event) {
226                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
227                     case details::HidlInstrumentor::SERVER_API_ENTRY:
228                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
229                     {
230                         if ((*args).size() != 4) {
231                             LOG(ERROR) << "Number of arguments does not match. expect: 4, actual: " << (*args).size() << ", method name: doQuiteABit, event type: " << event;
232                             break;
233                         }
234                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
235                         int32_t *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<int32_t*> ((*args)[0]);
236                         if (arg_val_0 != nullptr) {
237                             arg_0->set_type(TYPE_SCALAR);
238                             arg_0->mutable_scalar_value()->set_int32_t((*arg_val_0));
239                         } else {
240                             LOG(WARNING) << "argument 0 is null.";
241                         }
242                         auto *arg_1 __attribute__((__unused__)) = msg.add_arg();
243                         int64_t *arg_val_1 __attribute__((__unused__)) = reinterpret_cast<int64_t*> ((*args)[1]);
244                         if (arg_val_1 != nullptr) {
245                             arg_1->set_type(TYPE_SCALAR);
246                             arg_1->mutable_scalar_value()->set_int64_t((*arg_val_1));
247                         } else {
248                             LOG(WARNING) << "argument 1 is null.";
249                         }
250                         auto *arg_2 __attribute__((__unused__)) = msg.add_arg();
251                         float *arg_val_2 __attribute__((__unused__)) = reinterpret_cast<float*> ((*args)[2]);
252                         if (arg_val_2 != nullptr) {
253                             arg_2->set_type(TYPE_SCALAR);
254                             arg_2->mutable_scalar_value()->set_float_t((*arg_val_2));
255                         } else {
256                             LOG(WARNING) << "argument 2 is null.";
257                         }
258                         auto *arg_3 __attribute__((__unused__)) = msg.add_arg();
259                         double *arg_val_3 __attribute__((__unused__)) = reinterpret_cast<double*> ((*args)[3]);
260                         if (arg_val_3 != nullptr) {
261                             arg_3->set_type(TYPE_SCALAR);
262                             arg_3->mutable_scalar_value()->set_double_t((*arg_val_3));
263                         } else {
264                             LOG(WARNING) << "argument 3 is null.";
265                         }
266                         break;
267                     }
268                     case details::HidlInstrumentor::CLIENT_API_EXIT:
269                     case details::HidlInstrumentor::SERVER_API_EXIT:
270                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
271                     {
272                         if ((*args).size() != 1) {
273                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: doQuiteABit, event type: " << event;
274                             break;
275                         }
276                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
277                         double *result_val_0 __attribute__((__unused__)) = reinterpret_cast<double*> ((*args)[0]);
278                         if (result_val_0 != nullptr) {
279                             result_0->set_type(TYPE_SCALAR);
280                             result_0->mutable_scalar_value()->set_double_t((*result_val_0));
281                         } else {
282                             LOG(WARNING) << "return value 0 is null.";
283                         }
284                         break;
285                     }
286                     default:
287                     {
288                         LOG(WARNING) << "not supported. ";
289                         break;
290                     }
291                 }
292             }
293         }
294         profiler.AddTraceEvent(event, package, version, interface, msg);
295     }
296     if (strcmp(method, "doSomethingElse") == 0) {
297         FunctionSpecificationMessage msg;
298         msg.set_name("doSomethingElse");
299         if (profiling_for_args) {
300             if (!args) {
301                 LOG(WARNING) << "no argument passed";
302             } else {
303                 switch (event) {
304                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
305                     case details::HidlInstrumentor::SERVER_API_ENTRY:
306                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
307                     {
308                         if ((*args).size() != 1) {
309                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: doSomethingElse, event type: " << event;
310                             break;
311                         }
312                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
313                         ::android::hardware::hidl_array<int32_t, 15> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_array<int32_t, 15>*> ((*args)[0]);
314                         if (arg_val_0 != nullptr) {
315                             arg_0->set_type(TYPE_ARRAY);
316                             arg_0->set_vector_size(15);
317                             for (int arg_0_index = 0; arg_0_index < 15; arg_0_index++) {
318                                 auto *arg_0_array_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
319                                 arg_0_array_arg_0_index->set_type(TYPE_SCALAR);
320                                 arg_0_array_arg_0_index->mutable_scalar_value()->set_int32_t((*arg_val_0)[arg_0_index]);
321                             }
322                         } else {
323                             LOG(WARNING) << "argument 0 is null.";
324                         }
325                         break;
326                     }
327                     case details::HidlInstrumentor::CLIENT_API_EXIT:
328                     case details::HidlInstrumentor::SERVER_API_EXIT:
329                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
330                     {
331                         if ((*args).size() != 1) {
332                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: doSomethingElse, event type: " << event;
333                             break;
334                         }
335                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
336                         ::android::hardware::hidl_array<int32_t, 32> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_array<int32_t, 32>*> ((*args)[0]);
337                         if (result_val_0 != nullptr) {
338                             result_0->set_type(TYPE_ARRAY);
339                             result_0->set_vector_size(32);
340                             for (int result_0_index = 0; result_0_index < 32; result_0_index++) {
341                                 auto *result_0_array_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
342                                 result_0_array_result_0_index->set_type(TYPE_SCALAR);
343                                 result_0_array_result_0_index->mutable_scalar_value()->set_int32_t((*result_val_0)[result_0_index]);
344                             }
345                         } else {
346                             LOG(WARNING) << "return value 0 is null.";
347                         }
348                         break;
349                     }
350                     default:
351                     {
352                         LOG(WARNING) << "not supported. ";
353                         break;
354                     }
355                 }
356             }
357         }
358         profiler.AddTraceEvent(event, package, version, interface, msg);
359     }
360     if (strcmp(method, "doStuffAndReturnAString") == 0) {
361         FunctionSpecificationMessage msg;
362         msg.set_name("doStuffAndReturnAString");
363         if (profiling_for_args) {
364             if (!args) {
365                 LOG(WARNING) << "no argument passed";
366             } else {
367                 switch (event) {
368                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
369                     case details::HidlInstrumentor::SERVER_API_ENTRY:
370                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
371                     {
372                         if ((*args).size() != 0) {
373                             LOG(ERROR) << "Number of arguments does not match. expect: 0, actual: " << (*args).size() << ", method name: doStuffAndReturnAString, event type: " << event;
374                             break;
375                         }
376                         break;
377                     }
378                     case details::HidlInstrumentor::CLIENT_API_EXIT:
379                     case details::HidlInstrumentor::SERVER_API_EXIT:
380                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
381                     {
382                         if ((*args).size() != 1) {
383                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: doStuffAndReturnAString, event type: " << event;
384                             break;
385                         }
386                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
387                         ::android::hardware::hidl_string *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_string*> ((*args)[0]);
388                         if (result_val_0 != nullptr) {
389                             result_0->set_type(TYPE_STRING);
390                             result_0->mutable_string_value()->set_message((*result_val_0).c_str());
391                             result_0->mutable_string_value()->set_length((*result_val_0).size());
392                         } else {
393                             LOG(WARNING) << "return value 0 is null.";
394                         }
395                         break;
396                     }
397                     default:
398                     {
399                         LOG(WARNING) << "not supported. ";
400                         break;
401                     }
402                 }
403             }
404         }
405         profiler.AddTraceEvent(event, package, version, interface, msg);
406     }
407     if (strcmp(method, "mapThisVector") == 0) {
408         FunctionSpecificationMessage msg;
409         msg.set_name("mapThisVector");
410         if (profiling_for_args) {
411             if (!args) {
412                 LOG(WARNING) << "no argument passed";
413             } else {
414                 switch (event) {
415                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
416                     case details::HidlInstrumentor::SERVER_API_ENTRY:
417                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
418                     {
419                         if ((*args).size() != 1) {
420                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: mapThisVector, event type: " << event;
421                             break;
422                         }
423                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
424                         ::android::hardware::hidl_vec<int32_t> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<int32_t>*> ((*args)[0]);
425                         if (arg_val_0 != nullptr) {
426                             arg_0->set_type(TYPE_VECTOR);
427                             arg_0->set_vector_size((*arg_val_0).size());
428                             for (int arg_0_index = 0; arg_0_index < (int)(*arg_val_0).size(); arg_0_index++) {
429                                 auto *arg_0_vector_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
430                                 arg_0_vector_arg_0_index->set_type(TYPE_SCALAR);
431                                 arg_0_vector_arg_0_index->mutable_scalar_value()->set_int32_t((*arg_val_0)[arg_0_index]);
432                             }
433                         } else {
434                             LOG(WARNING) << "argument 0 is null.";
435                         }
436                         break;
437                     }
438                     case details::HidlInstrumentor::CLIENT_API_EXIT:
439                     case details::HidlInstrumentor::SERVER_API_EXIT:
440                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
441                     {
442                         if ((*args).size() != 1) {
443                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: mapThisVector, event type: " << event;
444                             break;
445                         }
446                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
447                         ::android::hardware::hidl_vec<int32_t> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<int32_t>*> ((*args)[0]);
448                         if (result_val_0 != nullptr) {
449                             result_0->set_type(TYPE_VECTOR);
450                             result_0->set_vector_size((*result_val_0).size());
451                             for (int result_0_index = 0; result_0_index < (int)(*result_val_0).size(); result_0_index++) {
452                                 auto *result_0_vector_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
453                                 result_0_vector_result_0_index->set_type(TYPE_SCALAR);
454                                 result_0_vector_result_0_index->mutable_scalar_value()->set_int32_t((*result_val_0)[result_0_index]);
455                             }
456                         } else {
457                             LOG(WARNING) << "return value 0 is null.";
458                         }
459                         break;
460                     }
461                     default:
462                     {
463                         LOG(WARNING) << "not supported. ";
464                         break;
465                     }
466                 }
467             }
468         }
469         profiler.AddTraceEvent(event, package, version, interface, msg);
470     }
471     if (strcmp(method, "callMe") == 0) {
472         FunctionSpecificationMessage msg;
473         msg.set_name("callMe");
474         if (profiling_for_args) {
475             if (!args) {
476                 LOG(WARNING) << "no argument passed";
477             } else {
478                 switch (event) {
479                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
480                     case details::HidlInstrumentor::SERVER_API_ENTRY:
481                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
482                     {
483                         if ((*args).size() != 1) {
484                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: callMe, event type: " << event;
485                             break;
486                         }
487                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
488                         sp<::android::hardware::tests::foo::V1_0::IFooCallback> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<sp<::android::hardware::tests::foo::V1_0::IFooCallback>*> ((*args)[0]);
489                         if (arg_val_0 != nullptr) {
490                             arg_0->set_type(TYPE_HIDL_CALLBACK);
491                             arg_0->set_predefined_type("::android::hardware::tests::foo::V1_0::IFooCallback");
492                         } else {
493                             LOG(WARNING) << "argument 0 is null.";
494                         }
495                         break;
496                     }
497                     case details::HidlInstrumentor::CLIENT_API_EXIT:
498                     case details::HidlInstrumentor::SERVER_API_EXIT:
499                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
500                     {
501                         if ((*args).size() != 0) {
502                             LOG(ERROR) << "Number of return values does not match. expect: 0, actual: " << (*args).size() << ", method name: callMe, event type: " << event;
503                             break;
504                         }
505                         break;
506                     }
507                     default:
508                     {
509                         LOG(WARNING) << "not supported. ";
510                         break;
511                     }
512                 }
513             }
514         }
515         profiler.AddTraceEvent(event, package, version, interface, msg);
516     }
517     if (strcmp(method, "useAnEnum") == 0) {
518         FunctionSpecificationMessage msg;
519         msg.set_name("useAnEnum");
520         if (profiling_for_args) {
521             if (!args) {
522                 LOG(WARNING) << "no argument passed";
523             } else {
524                 switch (event) {
525                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
526                     case details::HidlInstrumentor::SERVER_API_ENTRY:
527                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
528                     {
529                         if ((*args).size() != 1) {
530                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: useAnEnum, event type: " << event;
531                             break;
532                         }
533                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
534                         ::android::hardware::tests::foo::V1_0::IFoo::SomeEnum *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::SomeEnum*> ((*args)[0]);
535                         if (arg_val_0 != nullptr) {
536                             arg_0->set_type(TYPE_ENUM);
537                             profile____android__hardware__tests__foo__V1_0__IFoo__SomeEnum(arg_0, (*arg_val_0));
538                         } else {
539                             LOG(WARNING) << "argument 0 is null.";
540                         }
541                         break;
542                     }
543                     case details::HidlInstrumentor::CLIENT_API_EXIT:
544                     case details::HidlInstrumentor::SERVER_API_EXIT:
545                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
546                     {
547                         if ((*args).size() != 1) {
548                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: useAnEnum, event type: " << event;
549                             break;
550                         }
551                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
552                         ::android::hardware::tests::foo::V1_0::IFoo::SomeEnum *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::SomeEnum*> ((*args)[0]);
553                         if (result_val_0 != nullptr) {
554                             result_0->set_type(TYPE_ENUM);
555                             profile____android__hardware__tests__foo__V1_0__IFoo__SomeEnum(result_0, (*result_val_0));
556                         } else {
557                             LOG(WARNING) << "return value 0 is null.";
558                         }
559                         break;
560                     }
561                     default:
562                     {
563                         LOG(WARNING) << "not supported. ";
564                         break;
565                     }
566                 }
567             }
568         }
569         profiler.AddTraceEvent(event, package, version, interface, msg);
570     }
571     if (strcmp(method, "haveAGooberVec") == 0) {
572         FunctionSpecificationMessage msg;
573         msg.set_name("haveAGooberVec");
574         if (profiling_for_args) {
575             if (!args) {
576                 LOG(WARNING) << "no argument passed";
577             } else {
578                 switch (event) {
579                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
580                     case details::HidlInstrumentor::SERVER_API_ENTRY:
581                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
582                     {
583                         if ((*args).size() != 1) {
584                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAGooberVec, event type: " << event;
585                             break;
586                         }
587                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
588                         ::android::hardware::hidl_vec<::android::hardware::tests::foo::V1_0::IFoo::Goober> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<::android::hardware::tests::foo::V1_0::IFoo::Goober>*> ((*args)[0]);
589                         if (arg_val_0 != nullptr) {
590                             arg_0->set_type(TYPE_VECTOR);
591                             arg_0->set_vector_size((*arg_val_0).size());
592                             for (int arg_0_index = 0; arg_0_index < (int)(*arg_val_0).size(); arg_0_index++) {
593                                 auto *arg_0_vector_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
594                                 arg_0_vector_arg_0_index->set_type(TYPE_STRUCT);
595                                 profile____android__hardware__tests__foo__V1_0__IFoo__Goober(arg_0_vector_arg_0_index, (*arg_val_0)[arg_0_index]);
596                             }
597                         } else {
598                             LOG(WARNING) << "argument 0 is null.";
599                         }
600                         break;
601                     }
602                     case details::HidlInstrumentor::CLIENT_API_EXIT:
603                     case details::HidlInstrumentor::SERVER_API_EXIT:
604                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
605                     {
606                         if ((*args).size() != 0) {
607                             LOG(ERROR) << "Number of return values does not match. expect: 0, actual: " << (*args).size() << ", method name: haveAGooberVec, event type: " << event;
608                             break;
609                         }
610                         break;
611                     }
612                     default:
613                     {
614                         LOG(WARNING) << "not supported. ";
615                         break;
616                     }
617                 }
618             }
619         }
620         profiler.AddTraceEvent(event, package, version, interface, msg);
621     }
622     if (strcmp(method, "haveAGoober") == 0) {
623         FunctionSpecificationMessage msg;
624         msg.set_name("haveAGoober");
625         if (profiling_for_args) {
626             if (!args) {
627                 LOG(WARNING) << "no argument passed";
628             } else {
629                 switch (event) {
630                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
631                     case details::HidlInstrumentor::SERVER_API_ENTRY:
632                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
633                     {
634                         if ((*args).size() != 1) {
635                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAGoober, event type: " << event;
636                             break;
637                         }
638                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
639                         ::android::hardware::tests::foo::V1_0::IFoo::Goober *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::Goober*> ((*args)[0]);
640                         if (arg_val_0 != nullptr) {
641                             arg_0->set_type(TYPE_STRUCT);
642                             profile____android__hardware__tests__foo__V1_0__IFoo__Goober(arg_0, (*arg_val_0));
643                         } else {
644                             LOG(WARNING) << "argument 0 is null.";
645                         }
646                         break;
647                     }
648                     case details::HidlInstrumentor::CLIENT_API_EXIT:
649                     case details::HidlInstrumentor::SERVER_API_EXIT:
650                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
651                     {
652                         if ((*args).size() != 0) {
653                             LOG(ERROR) << "Number of return values does not match. expect: 0, actual: " << (*args).size() << ", method name: haveAGoober, event type: " << event;
654                             break;
655                         }
656                         break;
657                     }
658                     default:
659                     {
660                         LOG(WARNING) << "not supported. ";
661                         break;
662                     }
663                 }
664             }
665         }
666         profiler.AddTraceEvent(event, package, version, interface, msg);
667     }
668     if (strcmp(method, "haveAGooberArray") == 0) {
669         FunctionSpecificationMessage msg;
670         msg.set_name("haveAGooberArray");
671         if (profiling_for_args) {
672             if (!args) {
673                 LOG(WARNING) << "no argument passed";
674             } else {
675                 switch (event) {
676                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
677                     case details::HidlInstrumentor::SERVER_API_ENTRY:
678                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
679                     {
680                         if ((*args).size() != 1) {
681                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAGooberArray, event type: " << event;
682                             break;
683                         }
684                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
685                         ::android::hardware::hidl_array<::android::hardware::tests::foo::V1_0::IFoo::Goober, 20> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_array<::android::hardware::tests::foo::V1_0::IFoo::Goober, 20>*> ((*args)[0]);
686                         if (arg_val_0 != nullptr) {
687                             arg_0->set_type(TYPE_ARRAY);
688                             arg_0->set_vector_size(20);
689                             for (int arg_0_index = 0; arg_0_index < 20; arg_0_index++) {
690                                 auto *arg_0_array_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
691                                 arg_0_array_arg_0_index->set_type(TYPE_STRUCT);
692                                 auto *arg_0_array_arg_0_index_q __attribute__((__unused__)) = arg_0_array_arg_0_index->add_struct_value();
693                                 arg_0_array_arg_0_index_q->set_type(TYPE_SCALAR);
694                                 arg_0_array_arg_0_index_q->mutable_scalar_value()->set_int32_t((*arg_val_0)[arg_0_index].q);
695                                 auto *arg_0_array_arg_0_index_name __attribute__((__unused__)) = arg_0_array_arg_0_index->add_struct_value();
696                                 arg_0_array_arg_0_index_name->set_type(TYPE_STRING);
697                                 arg_0_array_arg_0_index_name->mutable_string_value()->set_message((*arg_val_0)[arg_0_index].name.c_str());
698                                 arg_0_array_arg_0_index_name->mutable_string_value()->set_length((*arg_val_0)[arg_0_index].name.size());
699                                 auto *arg_0_array_arg_0_index_address __attribute__((__unused__)) = arg_0_array_arg_0_index->add_struct_value();
700                                 arg_0_array_arg_0_index_address->set_type(TYPE_STRING);
701                                 arg_0_array_arg_0_index_address->mutable_string_value()->set_message((*arg_val_0)[arg_0_index].address.c_str());
702                                 arg_0_array_arg_0_index_address->mutable_string_value()->set_length((*arg_val_0)[arg_0_index].address.size());
703                                 auto *arg_0_array_arg_0_index_numbers __attribute__((__unused__)) = arg_0_array_arg_0_index->add_struct_value();
704                                 arg_0_array_arg_0_index_numbers->set_type(TYPE_ARRAY);
705                                 arg_0_array_arg_0_index_numbers->set_vector_size(10);
706                                 for (int arg_0_array_arg_0_index_numbers_index = 0; arg_0_array_arg_0_index_numbers_index < 10; arg_0_array_arg_0_index_numbers_index++) {
707                                     auto *arg_0_array_arg_0_index_numbers_array_arg_0_array_arg_0_index_numbers_index __attribute__((__unused__)) = arg_0_array_arg_0_index_numbers->add_vector_value();
708                                     arg_0_array_arg_0_index_numbers_array_arg_0_array_arg_0_index_numbers_index->set_type(TYPE_SCALAR);
709                                     arg_0_array_arg_0_index_numbers_array_arg_0_array_arg_0_index_numbers_index->mutable_scalar_value()->set_double_t((*arg_val_0)[arg_0_index].numbers[arg_0_array_arg_0_index_numbers_index]);
710                                 }
711                                 auto *arg_0_array_arg_0_index_fumble __attribute__((__unused__)) = arg_0_array_arg_0_index->add_struct_value();
712                                 arg_0_array_arg_0_index_fumble->set_type(TYPE_STRUCT);
713                                 profile____android__hardware__tests__foo__V1_0__IFoo__Fumble(arg_0_array_arg_0_index_fumble, (*arg_val_0)[arg_0_index].fumble);
714                                 auto *arg_0_array_arg_0_index_gumble __attribute__((__unused__)) = arg_0_array_arg_0_index->add_struct_value();
715                                 arg_0_array_arg_0_index_gumble->set_type(TYPE_STRUCT);
716                                 profile____android__hardware__tests__foo__V1_0__IFoo__Fumble(arg_0_array_arg_0_index_gumble, (*arg_val_0)[arg_0_index].gumble);
717                             }
718                         } else {
719                             LOG(WARNING) << "argument 0 is null.";
720                         }
721                         break;
722                     }
723                     case details::HidlInstrumentor::CLIENT_API_EXIT:
724                     case details::HidlInstrumentor::SERVER_API_EXIT:
725                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
726                     {
727                         if ((*args).size() != 0) {
728                             LOG(ERROR) << "Number of return values does not match. expect: 0, actual: " << (*args).size() << ", method name: haveAGooberArray, event type: " << event;
729                             break;
730                         }
731                         break;
732                     }
733                     default:
734                     {
735                         LOG(WARNING) << "not supported. ";
736                         break;
737                     }
738                 }
739             }
740         }
741         profiler.AddTraceEvent(event, package, version, interface, msg);
742     }
743     if (strcmp(method, "haveATypeFromAnotherFile") == 0) {
744         FunctionSpecificationMessage msg;
745         msg.set_name("haveATypeFromAnotherFile");
746         if (profiling_for_args) {
747             if (!args) {
748                 LOG(WARNING) << "no argument passed";
749             } else {
750                 switch (event) {
751                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
752                     case details::HidlInstrumentor::SERVER_API_ENTRY:
753                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
754                     {
755                         if ((*args).size() != 1) {
756                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveATypeFromAnotherFile, event type: " << event;
757                             break;
758                         }
759                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
760                         ::android::hardware::tests::foo::V1_0::Abc *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::Abc*> ((*args)[0]);
761                         if (arg_val_0 != nullptr) {
762                             arg_0->set_type(TYPE_STRUCT);
763                             profile____android__hardware__tests__foo__V1_0__Abc(arg_0, (*arg_val_0));
764                         } else {
765                             LOG(WARNING) << "argument 0 is null.";
766                         }
767                         break;
768                     }
769                     case details::HidlInstrumentor::CLIENT_API_EXIT:
770                     case details::HidlInstrumentor::SERVER_API_EXIT:
771                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
772                     {
773                         if ((*args).size() != 0) {
774                             LOG(ERROR) << "Number of return values does not match. expect: 0, actual: " << (*args).size() << ", method name: haveATypeFromAnotherFile, event type: " << event;
775                             break;
776                         }
777                         break;
778                     }
779                     default:
780                     {
781                         LOG(WARNING) << "not supported. ";
782                         break;
783                     }
784                 }
785             }
786         }
787         profiler.AddTraceEvent(event, package, version, interface, msg);
788     }
789     if (strcmp(method, "haveSomeStrings") == 0) {
790         FunctionSpecificationMessage msg;
791         msg.set_name("haveSomeStrings");
792         if (profiling_for_args) {
793             if (!args) {
794                 LOG(WARNING) << "no argument passed";
795             } else {
796                 switch (event) {
797                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
798                     case details::HidlInstrumentor::SERVER_API_ENTRY:
799                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
800                     {
801                         if ((*args).size() != 1) {
802                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveSomeStrings, event type: " << event;
803                             break;
804                         }
805                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
806                         ::android::hardware::hidl_array<::android::hardware::hidl_string, 3> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_array<::android::hardware::hidl_string, 3>*> ((*args)[0]);
807                         if (arg_val_0 != nullptr) {
808                             arg_0->set_type(TYPE_ARRAY);
809                             arg_0->set_vector_size(3);
810                             for (int arg_0_index = 0; arg_0_index < 3; arg_0_index++) {
811                                 auto *arg_0_array_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
812                                 arg_0_array_arg_0_index->set_type(TYPE_STRING);
813                                 arg_0_array_arg_0_index->mutable_string_value()->set_message((*arg_val_0)[arg_0_index].c_str());
814                                 arg_0_array_arg_0_index->mutable_string_value()->set_length((*arg_val_0)[arg_0_index].size());
815                             }
816                         } else {
817                             LOG(WARNING) << "argument 0 is null.";
818                         }
819                         break;
820                     }
821                     case details::HidlInstrumentor::CLIENT_API_EXIT:
822                     case details::HidlInstrumentor::SERVER_API_EXIT:
823                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
824                     {
825                         if ((*args).size() != 1) {
826                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: haveSomeStrings, event type: " << event;
827                             break;
828                         }
829                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
830                         ::android::hardware::hidl_array<::android::hardware::hidl_string, 2> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_array<::android::hardware::hidl_string, 2>*> ((*args)[0]);
831                         if (result_val_0 != nullptr) {
832                             result_0->set_type(TYPE_ARRAY);
833                             result_0->set_vector_size(2);
834                             for (int result_0_index = 0; result_0_index < 2; result_0_index++) {
835                                 auto *result_0_array_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
836                                 result_0_array_result_0_index->set_type(TYPE_STRING);
837                                 result_0_array_result_0_index->mutable_string_value()->set_message((*result_val_0)[result_0_index].c_str());
838                                 result_0_array_result_0_index->mutable_string_value()->set_length((*result_val_0)[result_0_index].size());
839                             }
840                         } else {
841                             LOG(WARNING) << "return value 0 is null.";
842                         }
843                         break;
844                     }
845                     default:
846                     {
847                         LOG(WARNING) << "not supported. ";
848                         break;
849                     }
850                 }
851             }
852         }
853         profiler.AddTraceEvent(event, package, version, interface, msg);
854     }
855     if (strcmp(method, "haveAStringVec") == 0) {
856         FunctionSpecificationMessage msg;
857         msg.set_name("haveAStringVec");
858         if (profiling_for_args) {
859             if (!args) {
860                 LOG(WARNING) << "no argument passed";
861             } else {
862                 switch (event) {
863                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
864                     case details::HidlInstrumentor::SERVER_API_ENTRY:
865                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
866                     {
867                         if ((*args).size() != 1) {
868                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAStringVec, event type: " << event;
869                             break;
870                         }
871                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
872                         ::android::hardware::hidl_vec<::android::hardware::hidl_string> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<::android::hardware::hidl_string>*> ((*args)[0]);
873                         if (arg_val_0 != nullptr) {
874                             arg_0->set_type(TYPE_VECTOR);
875                             arg_0->set_vector_size((*arg_val_0).size());
876                             for (int arg_0_index = 0; arg_0_index < (int)(*arg_val_0).size(); arg_0_index++) {
877                                 auto *arg_0_vector_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
878                                 arg_0_vector_arg_0_index->set_type(TYPE_STRING);
879                                 arg_0_vector_arg_0_index->mutable_string_value()->set_message((*arg_val_0)[arg_0_index].c_str());
880                                 arg_0_vector_arg_0_index->mutable_string_value()->set_length((*arg_val_0)[arg_0_index].size());
881                             }
882                         } else {
883                             LOG(WARNING) << "argument 0 is null.";
884                         }
885                         break;
886                     }
887                     case details::HidlInstrumentor::CLIENT_API_EXIT:
888                     case details::HidlInstrumentor::SERVER_API_EXIT:
889                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
890                     {
891                         if ((*args).size() != 1) {
892                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAStringVec, event type: " << event;
893                             break;
894                         }
895                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
896                         ::android::hardware::hidl_vec<::android::hardware::hidl_string> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<::android::hardware::hidl_string>*> ((*args)[0]);
897                         if (result_val_0 != nullptr) {
898                             result_0->set_type(TYPE_VECTOR);
899                             result_0->set_vector_size((*result_val_0).size());
900                             for (int result_0_index = 0; result_0_index < (int)(*result_val_0).size(); result_0_index++) {
901                                 auto *result_0_vector_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
902                                 result_0_vector_result_0_index->set_type(TYPE_STRING);
903                                 result_0_vector_result_0_index->mutable_string_value()->set_message((*result_val_0)[result_0_index].c_str());
904                                 result_0_vector_result_0_index->mutable_string_value()->set_length((*result_val_0)[result_0_index].size());
905                             }
906                         } else {
907                             LOG(WARNING) << "return value 0 is null.";
908                         }
909                         break;
910                     }
911                     default:
912                     {
913                         LOG(WARNING) << "not supported. ";
914                         break;
915                     }
916                 }
917             }
918         }
919         profiler.AddTraceEvent(event, package, version, interface, msg);
920     }
921     if (strcmp(method, "transposeMe") == 0) {
922         FunctionSpecificationMessage msg;
923         msg.set_name("transposeMe");
924         if (profiling_for_args) {
925             if (!args) {
926                 LOG(WARNING) << "no argument passed";
927             } else {
928                 switch (event) {
929                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
930                     case details::HidlInstrumentor::SERVER_API_ENTRY:
931                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
932                     {
933                         if ((*args).size() != 1) {
934                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: transposeMe, event type: " << event;
935                             break;
936                         }
937                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
938                         ::android::hardware::hidl_array<float, 3, 5> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_array<float, 3, 5>*> ((*args)[0]);
939                         if (arg_val_0 != nullptr) {
940                             arg_0->set_type(TYPE_ARRAY);
941                             arg_0->set_vector_size(3);
942                             for (int arg_0_index = 0; arg_0_index < 3; arg_0_index++) {
943                                 auto *arg_0_array_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
944                                 arg_0_array_arg_0_index->set_type(TYPE_ARRAY);
945                                 arg_0_array_arg_0_index->set_vector_size(5);
946                                 for (int arg_0_array_arg_0_index_index = 0; arg_0_array_arg_0_index_index < 5; arg_0_array_arg_0_index_index++) {
947                                     auto *arg_0_array_arg_0_index_array_arg_0_array_arg_0_index_index __attribute__((__unused__)) = arg_0_array_arg_0_index->add_vector_value();
948                                     arg_0_array_arg_0_index_array_arg_0_array_arg_0_index_index->set_type(TYPE_SCALAR);
949                                     arg_0_array_arg_0_index_array_arg_0_array_arg_0_index_index->mutable_scalar_value()->set_float_t((*arg_val_0)[arg_0_index][arg_0_array_arg_0_index_index]);
950                                 }
951                             }
952                         } else {
953                             LOG(WARNING) << "argument 0 is null.";
954                         }
955                         break;
956                     }
957                     case details::HidlInstrumentor::CLIENT_API_EXIT:
958                     case details::HidlInstrumentor::SERVER_API_EXIT:
959                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
960                     {
961                         if ((*args).size() != 1) {
962                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: transposeMe, event type: " << event;
963                             break;
964                         }
965                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
966                         ::android::hardware::hidl_array<float, 5, 3> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_array<float, 5, 3>*> ((*args)[0]);
967                         if (result_val_0 != nullptr) {
968                             result_0->set_type(TYPE_ARRAY);
969                             result_0->set_vector_size(5);
970                             for (int result_0_index = 0; result_0_index < 5; result_0_index++) {
971                                 auto *result_0_array_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
972                                 result_0_array_result_0_index->set_type(TYPE_ARRAY);
973                                 result_0_array_result_0_index->set_vector_size(3);
974                                 for (int result_0_array_result_0_index_index = 0; result_0_array_result_0_index_index < 3; result_0_array_result_0_index_index++) {
975                                     auto *result_0_array_result_0_index_array_result_0_array_result_0_index_index __attribute__((__unused__)) = result_0_array_result_0_index->add_vector_value();
976                                     result_0_array_result_0_index_array_result_0_array_result_0_index_index->set_type(TYPE_SCALAR);
977                                     result_0_array_result_0_index_array_result_0_array_result_0_index_index->mutable_scalar_value()->set_float_t((*result_val_0)[result_0_index][result_0_array_result_0_index_index]);
978                                 }
979                             }
980                         } else {
981                             LOG(WARNING) << "return value 0 is null.";
982                         }
983                         break;
984                     }
985                     default:
986                     {
987                         LOG(WARNING) << "not supported. ";
988                         break;
989                     }
990                 }
991             }
992         }
993         profiler.AddTraceEvent(event, package, version, interface, msg);
994     }
995     if (strcmp(method, "callingDrWho") == 0) {
996         FunctionSpecificationMessage msg;
997         msg.set_name("callingDrWho");
998         if (profiling_for_args) {
999             if (!args) {
1000                 LOG(WARNING) << "no argument passed";
1001             } else {
1002                 switch (event) {
1003                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1004                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1005                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1006                     {
1007                         if ((*args).size() != 1) {
1008                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: callingDrWho, event type: " << event;
1009                             break;
1010                         }
1011                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1012                         ::android::hardware::tests::foo::V1_0::IFoo::MultiDimensional *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::MultiDimensional*> ((*args)[0]);
1013                         if (arg_val_0 != nullptr) {
1014                             arg_0->set_type(TYPE_STRUCT);
1015                             profile____android__hardware__tests__foo__V1_0__IFoo__MultiDimensional(arg_0, (*arg_val_0));
1016                         } else {
1017                             LOG(WARNING) << "argument 0 is null.";
1018                         }
1019                         break;
1020                     }
1021                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1022                     case details::HidlInstrumentor::SERVER_API_EXIT:
1023                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1024                     {
1025                         if ((*args).size() != 1) {
1026                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: callingDrWho, event type: " << event;
1027                             break;
1028                         }
1029                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1030                         ::android::hardware::tests::foo::V1_0::IFoo::MultiDimensional *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::MultiDimensional*> ((*args)[0]);
1031                         if (result_val_0 != nullptr) {
1032                             result_0->set_type(TYPE_STRUCT);
1033                             profile____android__hardware__tests__foo__V1_0__IFoo__MultiDimensional(result_0, (*result_val_0));
1034                         } else {
1035                             LOG(WARNING) << "return value 0 is null.";
1036                         }
1037                         break;
1038                     }
1039                     default:
1040                     {
1041                         LOG(WARNING) << "not supported. ";
1042                         break;
1043                     }
1044                 }
1045             }
1046         }
1047         profiler.AddTraceEvent(event, package, version, interface, msg);
1048     }
1049     if (strcmp(method, "transpose") == 0) {
1050         FunctionSpecificationMessage msg;
1051         msg.set_name("transpose");
1052         if (profiling_for_args) {
1053             if (!args) {
1054                 LOG(WARNING) << "no argument passed";
1055             } else {
1056                 switch (event) {
1057                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1058                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1059                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1060                     {
1061                         if ((*args).size() != 1) {
1062                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: transpose, event type: " << event;
1063                             break;
1064                         }
1065                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1066                         ::android::hardware::tests::foo::V1_0::IFoo::StringMatrix5x3 *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::StringMatrix5x3*> ((*args)[0]);
1067                         if (arg_val_0 != nullptr) {
1068                             arg_0->set_type(TYPE_STRUCT);
1069                             profile____android__hardware__tests__foo__V1_0__IFoo__StringMatrix5x3(arg_0, (*arg_val_0));
1070                         } else {
1071                             LOG(WARNING) << "argument 0 is null.";
1072                         }
1073                         break;
1074                     }
1075                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1076                     case details::HidlInstrumentor::SERVER_API_EXIT:
1077                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1078                     {
1079                         if ((*args).size() != 1) {
1080                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: transpose, event type: " << event;
1081                             break;
1082                         }
1083                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1084                         ::android::hardware::tests::foo::V1_0::IFoo::StringMatrix3x5 *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::StringMatrix3x5*> ((*args)[0]);
1085                         if (result_val_0 != nullptr) {
1086                             result_0->set_type(TYPE_STRUCT);
1087                             profile____android__hardware__tests__foo__V1_0__IFoo__StringMatrix3x5(result_0, (*result_val_0));
1088                         } else {
1089                             LOG(WARNING) << "return value 0 is null.";
1090                         }
1091                         break;
1092                     }
1093                     default:
1094                     {
1095                         LOG(WARNING) << "not supported. ";
1096                         break;
1097                     }
1098                 }
1099             }
1100         }
1101         profiler.AddTraceEvent(event, package, version, interface, msg);
1102     }
1103     if (strcmp(method, "transpose2") == 0) {
1104         FunctionSpecificationMessage msg;
1105         msg.set_name("transpose2");
1106         if (profiling_for_args) {
1107             if (!args) {
1108                 LOG(WARNING) << "no argument passed";
1109             } else {
1110                 switch (event) {
1111                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1112                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1113                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1114                     {
1115                         if ((*args).size() != 1) {
1116                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: transpose2, event type: " << event;
1117                             break;
1118                         }
1119                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1120                         ::android::hardware::hidl_array<::android::hardware::hidl_string, 5, 3> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_array<::android::hardware::hidl_string, 5, 3>*> ((*args)[0]);
1121                         if (arg_val_0 != nullptr) {
1122                             arg_0->set_type(TYPE_ARRAY);
1123                             arg_0->set_vector_size(5);
1124                             for (int arg_0_index = 0; arg_0_index < 5; arg_0_index++) {
1125                                 auto *arg_0_array_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
1126                                 arg_0_array_arg_0_index->set_type(TYPE_ARRAY);
1127                                 arg_0_array_arg_0_index->set_vector_size(3);
1128                                 for (int arg_0_array_arg_0_index_index = 0; arg_0_array_arg_0_index_index < 3; arg_0_array_arg_0_index_index++) {
1129                                     auto *arg_0_array_arg_0_index_array_arg_0_array_arg_0_index_index __attribute__((__unused__)) = arg_0_array_arg_0_index->add_vector_value();
1130                                     arg_0_array_arg_0_index_array_arg_0_array_arg_0_index_index->set_type(TYPE_STRING);
1131                                     arg_0_array_arg_0_index_array_arg_0_array_arg_0_index_index->mutable_string_value()->set_message((*arg_val_0)[arg_0_index][arg_0_array_arg_0_index_index].c_str());
1132                                     arg_0_array_arg_0_index_array_arg_0_array_arg_0_index_index->mutable_string_value()->set_length((*arg_val_0)[arg_0_index][arg_0_array_arg_0_index_index].size());
1133                                 }
1134                             }
1135                         } else {
1136                             LOG(WARNING) << "argument 0 is null.";
1137                         }
1138                         break;
1139                     }
1140                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1141                     case details::HidlInstrumentor::SERVER_API_EXIT:
1142                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1143                     {
1144                         if ((*args).size() != 1) {
1145                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: transpose2, event type: " << event;
1146                             break;
1147                         }
1148                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1149                         ::android::hardware::hidl_array<::android::hardware::hidl_string, 3, 5> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_array<::android::hardware::hidl_string, 3, 5>*> ((*args)[0]);
1150                         if (result_val_0 != nullptr) {
1151                             result_0->set_type(TYPE_ARRAY);
1152                             result_0->set_vector_size(3);
1153                             for (int result_0_index = 0; result_0_index < 3; result_0_index++) {
1154                                 auto *result_0_array_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
1155                                 result_0_array_result_0_index->set_type(TYPE_ARRAY);
1156                                 result_0_array_result_0_index->set_vector_size(5);
1157                                 for (int result_0_array_result_0_index_index = 0; result_0_array_result_0_index_index < 5; result_0_array_result_0_index_index++) {
1158                                     auto *result_0_array_result_0_index_array_result_0_array_result_0_index_index __attribute__((__unused__)) = result_0_array_result_0_index->add_vector_value();
1159                                     result_0_array_result_0_index_array_result_0_array_result_0_index_index->set_type(TYPE_STRING);
1160                                     result_0_array_result_0_index_array_result_0_array_result_0_index_index->mutable_string_value()->set_message((*result_val_0)[result_0_index][result_0_array_result_0_index_index].c_str());
1161                                     result_0_array_result_0_index_array_result_0_array_result_0_index_index->mutable_string_value()->set_length((*result_val_0)[result_0_index][result_0_array_result_0_index_index].size());
1162                                 }
1163                             }
1164                         } else {
1165                             LOG(WARNING) << "return value 0 is null.";
1166                         }
1167                         break;
1168                     }
1169                     default:
1170                     {
1171                         LOG(WARNING) << "not supported. ";
1172                         break;
1173                     }
1174                 }
1175             }
1176         }
1177         profiler.AddTraceEvent(event, package, version, interface, msg);
1178     }
1179     if (strcmp(method, "sendVec") == 0) {
1180         FunctionSpecificationMessage msg;
1181         msg.set_name("sendVec");
1182         if (profiling_for_args) {
1183             if (!args) {
1184                 LOG(WARNING) << "no argument passed";
1185             } else {
1186                 switch (event) {
1187                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1188                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1189                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1190                     {
1191                         if ((*args).size() != 1) {
1192                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: sendVec, event type: " << event;
1193                             break;
1194                         }
1195                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1196                         ::android::hardware::hidl_vec<uint8_t> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<uint8_t>*> ((*args)[0]);
1197                         if (arg_val_0 != nullptr) {
1198                             arg_0->set_type(TYPE_VECTOR);
1199                             arg_0->set_vector_size((*arg_val_0).size());
1200                             for (int arg_0_index = 0; arg_0_index < (int)(*arg_val_0).size(); arg_0_index++) {
1201                                 auto *arg_0_vector_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
1202                                 arg_0_vector_arg_0_index->set_type(TYPE_SCALAR);
1203                                 arg_0_vector_arg_0_index->mutable_scalar_value()->set_uint8_t((*arg_val_0)[arg_0_index]);
1204                             }
1205                         } else {
1206                             LOG(WARNING) << "argument 0 is null.";
1207                         }
1208                         break;
1209                     }
1210                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1211                     case details::HidlInstrumentor::SERVER_API_EXIT:
1212                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1213                     {
1214                         if ((*args).size() != 1) {
1215                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: sendVec, event type: " << event;
1216                             break;
1217                         }
1218                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1219                         ::android::hardware::hidl_vec<uint8_t> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<uint8_t>*> ((*args)[0]);
1220                         if (result_val_0 != nullptr) {
1221                             result_0->set_type(TYPE_VECTOR);
1222                             result_0->set_vector_size((*result_val_0).size());
1223                             for (int result_0_index = 0; result_0_index < (int)(*result_val_0).size(); result_0_index++) {
1224                                 auto *result_0_vector_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
1225                                 result_0_vector_result_0_index->set_type(TYPE_SCALAR);
1226                                 result_0_vector_result_0_index->mutable_scalar_value()->set_uint8_t((*result_val_0)[result_0_index]);
1227                             }
1228                         } else {
1229                             LOG(WARNING) << "return value 0 is null.";
1230                         }
1231                         break;
1232                     }
1233                     default:
1234                     {
1235                         LOG(WARNING) << "not supported. ";
1236                         break;
1237                     }
1238                 }
1239             }
1240         }
1241         profiler.AddTraceEvent(event, package, version, interface, msg);
1242     }
1243     if (strcmp(method, "sendVecVec") == 0) {
1244         FunctionSpecificationMessage msg;
1245         msg.set_name("sendVecVec");
1246         if (profiling_for_args) {
1247             if (!args) {
1248                 LOG(WARNING) << "no argument passed";
1249             } else {
1250                 switch (event) {
1251                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1252                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1253                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1254                     {
1255                         if ((*args).size() != 0) {
1256                             LOG(ERROR) << "Number of arguments does not match. expect: 0, actual: " << (*args).size() << ", method name: sendVecVec, event type: " << event;
1257                             break;
1258                         }
1259                         break;
1260                     }
1261                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1262                     case details::HidlInstrumentor::SERVER_API_EXIT:
1263                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1264                     {
1265                         if ((*args).size() != 1) {
1266                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: sendVecVec, event type: " << event;
1267                             break;
1268                         }
1269                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1270                         ::android::hardware::hidl_vec<::android::hardware::hidl_vec<uint8_t>> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<::android::hardware::hidl_vec<uint8_t>>*> ((*args)[0]);
1271                         if (result_val_0 != nullptr) {
1272                             result_0->set_type(TYPE_VECTOR);
1273                             result_0->set_vector_size((*result_val_0).size());
1274                             for (int result_0_index = 0; result_0_index < (int)(*result_val_0).size(); result_0_index++) {
1275                                 auto *result_0_vector_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
1276                                 result_0_vector_result_0_index->set_type(TYPE_VECTOR);
1277                                 result_0_vector_result_0_index->set_vector_size((*result_val_0)[result_0_index].size());
1278                                 for (int result_0_vector_result_0_index_index = 0; result_0_vector_result_0_index_index < (int)(*result_val_0)[result_0_index].size(); result_0_vector_result_0_index_index++) {
1279                                     auto *result_0_vector_result_0_index_vector_result_0_vector_result_0_index_index __attribute__((__unused__)) = result_0_vector_result_0_index->add_vector_value();
1280                                     result_0_vector_result_0_index_vector_result_0_vector_result_0_index_index->set_type(TYPE_SCALAR);
1281                                     result_0_vector_result_0_index_vector_result_0_vector_result_0_index_index->mutable_scalar_value()->set_uint8_t((*result_val_0)[result_0_index][result_0_vector_result_0_index_index]);
1282                                 }
1283                             }
1284                         } else {
1285                             LOG(WARNING) << "return value 0 is null.";
1286                         }
1287                         break;
1288                     }
1289                     default:
1290                     {
1291                         LOG(WARNING) << "not supported. ";
1292                         break;
1293                     }
1294                 }
1295             }
1296         }
1297         profiler.AddTraceEvent(event, package, version, interface, msg);
1298     }
1299     if (strcmp(method, "haveAVectorOfInterfaces") == 0) {
1300         FunctionSpecificationMessage msg;
1301         msg.set_name("haveAVectorOfInterfaces");
1302         if (profiling_for_args) {
1303             if (!args) {
1304                 LOG(WARNING) << "no argument passed";
1305             } else {
1306                 switch (event) {
1307                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1308                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1309                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1310                     {
1311                         if ((*args).size() != 1) {
1312                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAVectorOfInterfaces, event type: " << event;
1313                             break;
1314                         }
1315                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1316                         ::android::hardware::hidl_vec<sp<::android::hardware::tests::foo::V1_0::ISimple>> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<sp<::android::hardware::tests::foo::V1_0::ISimple>>*> ((*args)[0]);
1317                         if (arg_val_0 != nullptr) {
1318                             arg_0->set_type(TYPE_VECTOR);
1319                             arg_0->set_vector_size((*arg_val_0).size());
1320                             for (int arg_0_index = 0; arg_0_index < (int)(*arg_val_0).size(); arg_0_index++) {
1321                                 auto *arg_0_vector_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
1322                                 arg_0_vector_arg_0_index->set_type(TYPE_HIDL_INTERFACE);
1323                                 arg_0_vector_arg_0_index->set_predefined_type("::android::hardware::tests::foo::V1_0::ISimple");
1324                             }
1325                         } else {
1326                             LOG(WARNING) << "argument 0 is null.";
1327                         }
1328                         break;
1329                     }
1330                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1331                     case details::HidlInstrumentor::SERVER_API_EXIT:
1332                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1333                     {
1334                         if ((*args).size() != 1) {
1335                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAVectorOfInterfaces, event type: " << event;
1336                             break;
1337                         }
1338                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1339                         ::android::hardware::hidl_vec<sp<::android::hardware::tests::foo::V1_0::ISimple>> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<sp<::android::hardware::tests::foo::V1_0::ISimple>>*> ((*args)[0]);
1340                         if (result_val_0 != nullptr) {
1341                             result_0->set_type(TYPE_VECTOR);
1342                             result_0->set_vector_size((*result_val_0).size());
1343                             for (int result_0_index = 0; result_0_index < (int)(*result_val_0).size(); result_0_index++) {
1344                                 auto *result_0_vector_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
1345                                 result_0_vector_result_0_index->set_type(TYPE_HIDL_INTERFACE);
1346                                 result_0_vector_result_0_index->set_predefined_type("::android::hardware::tests::foo::V1_0::ISimple");
1347                             }
1348                         } else {
1349                             LOG(WARNING) << "return value 0 is null.";
1350                         }
1351                         break;
1352                     }
1353                     default:
1354                     {
1355                         LOG(WARNING) << "not supported. ";
1356                         break;
1357                     }
1358                 }
1359             }
1360         }
1361         profiler.AddTraceEvent(event, package, version, interface, msg);
1362     }
1363     if (strcmp(method, "haveAVectorOfGenericInterfaces") == 0) {
1364         FunctionSpecificationMessage msg;
1365         msg.set_name("haveAVectorOfGenericInterfaces");
1366         if (profiling_for_args) {
1367             if (!args) {
1368                 LOG(WARNING) << "no argument passed";
1369             } else {
1370                 switch (event) {
1371                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1372                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1373                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1374                     {
1375                         if ((*args).size() != 1) {
1376                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAVectorOfGenericInterfaces, event type: " << event;
1377                             break;
1378                         }
1379                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1380                         ::android::hardware::hidl_vec<sp<::android::hidl::base::V1_0::IBase>> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<sp<::android::hidl::base::V1_0::IBase>>*> ((*args)[0]);
1381                         if (arg_val_0 != nullptr) {
1382                             arg_0->set_type(TYPE_VECTOR);
1383                             arg_0->set_vector_size((*arg_val_0).size());
1384                             for (int arg_0_index = 0; arg_0_index < (int)(*arg_val_0).size(); arg_0_index++) {
1385                                 auto *arg_0_vector_arg_0_index __attribute__((__unused__)) = arg_0->add_vector_value();
1386                                 arg_0_vector_arg_0_index->set_type(TYPE_HIDL_INTERFACE);
1387                                 arg_0_vector_arg_0_index->set_predefined_type("::android::hidl::base::V1_0::IBase");
1388                             }
1389                         } else {
1390                             LOG(WARNING) << "argument 0 is null.";
1391                         }
1392                         break;
1393                     }
1394                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1395                     case details::HidlInstrumentor::SERVER_API_EXIT:
1396                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1397                     {
1398                         if ((*args).size() != 1) {
1399                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAVectorOfGenericInterfaces, event type: " << event;
1400                             break;
1401                         }
1402                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1403                         ::android::hardware::hidl_vec<sp<::android::hidl::base::V1_0::IBase>> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<sp<::android::hidl::base::V1_0::IBase>>*> ((*args)[0]);
1404                         if (result_val_0 != nullptr) {
1405                             result_0->set_type(TYPE_VECTOR);
1406                             result_0->set_vector_size((*result_val_0).size());
1407                             for (int result_0_index = 0; result_0_index < (int)(*result_val_0).size(); result_0_index++) {
1408                                 auto *result_0_vector_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
1409                                 result_0_vector_result_0_index->set_type(TYPE_HIDL_INTERFACE);
1410                                 result_0_vector_result_0_index->set_predefined_type("::android::hidl::base::V1_0::IBase");
1411                             }
1412                         } else {
1413                             LOG(WARNING) << "return value 0 is null.";
1414                         }
1415                         break;
1416                     }
1417                     default:
1418                     {
1419                         LOG(WARNING) << "not supported. ";
1420                         break;
1421                     }
1422                 }
1423             }
1424         }
1425         profiler.AddTraceEvent(event, package, version, interface, msg);
1426     }
1427     if (strcmp(method, "echoNullInterface") == 0) {
1428         FunctionSpecificationMessage msg;
1429         msg.set_name("echoNullInterface");
1430         if (profiling_for_args) {
1431             if (!args) {
1432                 LOG(WARNING) << "no argument passed";
1433             } else {
1434                 switch (event) {
1435                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1436                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1437                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1438                     {
1439                         if ((*args).size() != 1) {
1440                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: echoNullInterface, event type: " << event;
1441                             break;
1442                         }
1443                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1444                         sp<::android::hardware::tests::foo::V1_0::IFooCallback> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<sp<::android::hardware::tests::foo::V1_0::IFooCallback>*> ((*args)[0]);
1445                         if (arg_val_0 != nullptr) {
1446                             arg_0->set_type(TYPE_HIDL_CALLBACK);
1447                             arg_0->set_predefined_type("::android::hardware::tests::foo::V1_0::IFooCallback");
1448                         } else {
1449                             LOG(WARNING) << "argument 0 is null.";
1450                         }
1451                         break;
1452                     }
1453                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1454                     case details::HidlInstrumentor::SERVER_API_EXIT:
1455                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1456                     {
1457                         if ((*args).size() != 2) {
1458                             LOG(ERROR) << "Number of return values does not match. expect: 2, actual: " << (*args).size() << ", method name: echoNullInterface, event type: " << event;
1459                             break;
1460                         }
1461                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1462                         bool *result_val_0 __attribute__((__unused__)) = reinterpret_cast<bool*> ((*args)[0]);
1463                         if (result_val_0 != nullptr) {
1464                             result_0->set_type(TYPE_SCALAR);
1465                             result_0->mutable_scalar_value()->set_bool_t((*result_val_0));
1466                         } else {
1467                             LOG(WARNING) << "return value 0 is null.";
1468                         }
1469                         auto *result_1 __attribute__((__unused__)) = msg.add_return_type_hidl();
1470                         sp<::android::hardware::tests::foo::V1_0::IFooCallback> *result_val_1 __attribute__((__unused__)) = reinterpret_cast<sp<::android::hardware::tests::foo::V1_0::IFooCallback>*> ((*args)[1]);
1471                         if (result_val_1 != nullptr) {
1472                             result_1->set_type(TYPE_HIDL_CALLBACK);
1473                             result_1->set_predefined_type("::android::hardware::tests::foo::V1_0::IFooCallback");
1474                         } else {
1475                             LOG(WARNING) << "return value 1 is null.";
1476                         }
1477                         break;
1478                     }
1479                     default:
1480                     {
1481                         LOG(WARNING) << "not supported. ";
1482                         break;
1483                     }
1484                 }
1485             }
1486         }
1487         profiler.AddTraceEvent(event, package, version, interface, msg);
1488     }
1489     if (strcmp(method, "createMyHandle") == 0) {
1490         FunctionSpecificationMessage msg;
1491         msg.set_name("createMyHandle");
1492         if (profiling_for_args) {
1493             if (!args) {
1494                 LOG(WARNING) << "no argument passed";
1495             } else {
1496                 switch (event) {
1497                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1498                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1499                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1500                     {
1501                         if ((*args).size() != 0) {
1502                             LOG(ERROR) << "Number of arguments does not match. expect: 0, actual: " << (*args).size() << ", method name: createMyHandle, event type: " << event;
1503                             break;
1504                         }
1505                         break;
1506                     }
1507                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1508                     case details::HidlInstrumentor::SERVER_API_EXIT:
1509                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1510                     {
1511                         if ((*args).size() != 1) {
1512                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: createMyHandle, event type: " << event;
1513                             break;
1514                         }
1515                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1516                         ::android::hardware::tests::foo::V1_0::IFoo::MyHandle *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::MyHandle*> ((*args)[0]);
1517                         if (result_val_0 != nullptr) {
1518                             result_0->set_type(TYPE_STRUCT);
1519                             profile____android__hardware__tests__foo__V1_0__IFoo__MyHandle(result_0, (*result_val_0));
1520                         } else {
1521                             LOG(WARNING) << "return value 0 is null.";
1522                         }
1523                         break;
1524                     }
1525                     default:
1526                     {
1527                         LOG(WARNING) << "not supported. ";
1528                         break;
1529                     }
1530                 }
1531             }
1532         }
1533         profiler.AddTraceEvent(event, package, version, interface, msg);
1534     }
1535     if (strcmp(method, "createHandles") == 0) {
1536         FunctionSpecificationMessage msg;
1537         msg.set_name("createHandles");
1538         if (profiling_for_args) {
1539             if (!args) {
1540                 LOG(WARNING) << "no argument passed";
1541             } else {
1542                 switch (event) {
1543                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1544                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1545                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1546                     {
1547                         if ((*args).size() != 1) {
1548                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: createHandles, event type: " << event;
1549                             break;
1550                         }
1551                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1552                         uint32_t *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<uint32_t*> ((*args)[0]);
1553                         if (arg_val_0 != nullptr) {
1554                             arg_0->set_type(TYPE_SCALAR);
1555                             arg_0->mutable_scalar_value()->set_uint32_t((*arg_val_0));
1556                         } else {
1557                             LOG(WARNING) << "argument 0 is null.";
1558                         }
1559                         break;
1560                     }
1561                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1562                     case details::HidlInstrumentor::SERVER_API_EXIT:
1563                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1564                     {
1565                         if ((*args).size() != 1) {
1566                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: createHandles, event type: " << event;
1567                             break;
1568                         }
1569                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1570                         ::android::hardware::hidl_vec<::android::hardware::hidl_handle> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_vec<::android::hardware::hidl_handle>*> ((*args)[0]);
1571                         if (result_val_0 != nullptr) {
1572                             result_0->set_type(TYPE_VECTOR);
1573                             result_0->set_vector_size((*result_val_0).size());
1574                             for (int result_0_index = 0; result_0_index < (int)(*result_val_0).size(); result_0_index++) {
1575                                 auto *result_0_vector_result_0_index __attribute__((__unused__)) = result_0->add_vector_value();
1576                                 result_0_vector_result_0_index->set_type(TYPE_HANDLE);
1577                                 auto result_0_vector_result_0_index_h = (*result_val_0)[result_0_index].getNativeHandle();
1578                                 if (result_0_vector_result_0_index_h) {
1579                                     result_0_vector_result_0_index->mutable_handle_value()->set_version(result_0_vector_result_0_index_h->version);
1580                                     result_0_vector_result_0_index->mutable_handle_value()->set_num_ints(result_0_vector_result_0_index_h->numInts);
1581                                     result_0_vector_result_0_index->mutable_handle_value()->set_num_fds(result_0_vector_result_0_index_h->numFds);
1582                                     for (int i = 0; i < result_0_vector_result_0_index_h->numInts + result_0_vector_result_0_index_h->numFds; i++) {
1583                                         if(i < result_0_vector_result_0_index_h->numFds) {
1584                                             auto* fd_val_i = result_0_vector_result_0_index->mutable_handle_value()->add_fd_val();
1585                                             char filePath[PATH_MAX];
1586                                             string procPath = "/proc/self/fd/" + to_string(result_0_vector_result_0_index_h->data[i]);
1587                                             ssize_t r = readlink(procPath.c_str(), filePath, sizeof(filePath));
1588                                             if (r == -1) {
1589                                                 LOG(ERROR) << "Unable to get file path";
1590                                                 continue;
1591                                             }
1592                                             filePath[r] = '\0';
1593                                             fd_val_i->set_file_name(filePath);
1594                                             struct stat statbuf;
1595                                             fstat(result_0_vector_result_0_index_h->data[i], &statbuf);
1596                                             fd_val_i->set_mode(statbuf.st_mode);
1597                                             if (S_ISREG(statbuf.st_mode) || S_ISDIR(statbuf.st_mode)) {
1598                                                 fd_val_i->set_type(S_ISREG(statbuf.st_mode)? FILE_TYPE: DIR_TYPE);
1599                                                 int flags = fcntl(result_0_vector_result_0_index_h->data[i], F_GETFL);
1600                                                 fd_val_i->set_flags(flags);
1601                                             }
1602                                             else if (S_ISCHR(statbuf.st_mode) || S_ISBLK(statbuf.st_mode)) {
1603                                                 fd_val_i->set_type(DEV_TYPE);
1604                                                 if (strcmp(filePath, "/dev/ashmem") == 0) {
1605                                                     int size = ashmem_get_size_region(result_0_vector_result_0_index_h->data[i]);
1606                                                     fd_val_i->mutable_memory()->set_size(size);
1607                                                 }
1608                                             }
1609                                             else if (S_ISFIFO(statbuf.st_mode)){
1610                                                 fd_val_i->set_type(PIPE_TYPE);
1611                                             }
1612                                             else if (S_ISSOCK(statbuf.st_mode)) {
1613                                                 fd_val_i->set_type(SOCKET_TYPE);
1614                                             }
1615                                             else {
1616                                                 fd_val_i->set_type(LINK_TYPE);
1617                                             }
1618                                         } else {
1619                                             result_0_vector_result_0_index->mutable_handle_value()->add_int_val(result_0_vector_result_0_index_h->data[i]);
1620                                         }
1621                                     }
1622                                 } else {
1623                                     LOG(WARNING) << "null handle";
1624                                     result_0_vector_result_0_index->mutable_handle_value()->set_hidl_handle_address(0);
1625                                 }
1626                             }
1627                         } else {
1628                             LOG(WARNING) << "return value 0 is null.";
1629                         }
1630                         break;
1631                     }
1632                     default:
1633                     {
1634                         LOG(WARNING) << "not supported. ";
1635                         break;
1636                     }
1637                 }
1638             }
1639         }
1640         profiler.AddTraceEvent(event, package, version, interface, msg);
1641     }
1642     if (strcmp(method, "closeHandles") == 0) {
1643         FunctionSpecificationMessage msg;
1644         msg.set_name("closeHandles");
1645         if (profiling_for_args) {
1646             if (!args) {
1647                 LOG(WARNING) << "no argument passed";
1648             } else {
1649                 switch (event) {
1650                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1651                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1652                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1653                     {
1654                         if ((*args).size() != 0) {
1655                             LOG(ERROR) << "Number of arguments does not match. expect: 0, actual: " << (*args).size() << ", method name: closeHandles, event type: " << event;
1656                             break;
1657                         }
1658                         break;
1659                     }
1660                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1661                     case details::HidlInstrumentor::SERVER_API_EXIT:
1662                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1663                     {
1664                         if ((*args).size() != 0) {
1665                             LOG(ERROR) << "Number of return values does not match. expect: 0, actual: " << (*args).size() << ", method name: closeHandles, event type: " << event;
1666                             break;
1667                         }
1668                         break;
1669                     }
1670                     default:
1671                     {
1672                         LOG(WARNING) << "not supported. ";
1673                         break;
1674                     }
1675                 }
1676             }
1677         }
1678         profiler.AddTraceEvent(event, package, version, interface, msg);
1679     }
1680     if (strcmp(method, "repeatWithFmq") == 0) {
1681         FunctionSpecificationMessage msg;
1682         msg.set_name("repeatWithFmq");
1683         if (profiling_for_args) {
1684             if (!args) {
1685                 LOG(WARNING) << "no argument passed";
1686             } else {
1687                 switch (event) {
1688                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1689                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1690                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1691                     {
1692                         if ((*args).size() != 1) {
1693                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: repeatWithFmq, event type: " << event;
1694                             break;
1695                         }
1696                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1697                         ::android::hardware::tests::foo::V1_0::IFoo::WithFmq *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::WithFmq*> ((*args)[0]);
1698                         if (arg_val_0 != nullptr) {
1699                             arg_0->set_type(TYPE_STRUCT);
1700                             profile____android__hardware__tests__foo__V1_0__IFoo__WithFmq(arg_0, (*arg_val_0));
1701                         } else {
1702                             LOG(WARNING) << "argument 0 is null.";
1703                         }
1704                         break;
1705                     }
1706                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1707                     case details::HidlInstrumentor::SERVER_API_EXIT:
1708                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1709                     {
1710                         if ((*args).size() != 1) {
1711                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: repeatWithFmq, event type: " << event;
1712                             break;
1713                         }
1714                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1715                         ::android::hardware::tests::foo::V1_0::IFoo::WithFmq *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::WithFmq*> ((*args)[0]);
1716                         if (result_val_0 != nullptr) {
1717                             result_0->set_type(TYPE_STRUCT);
1718                             profile____android__hardware__tests__foo__V1_0__IFoo__WithFmq(result_0, (*result_val_0));
1719                         } else {
1720                             LOG(WARNING) << "return value 0 is null.";
1721                         }
1722                         break;
1723                     }
1724                     default:
1725                     {
1726                         LOG(WARNING) << "not supported. ";
1727                         break;
1728                     }
1729                 }
1730             }
1731         }
1732         profiler.AddTraceEvent(event, package, version, interface, msg);
1733     }
1734     if (strcmp(method, "thisIsNew") == 0) {
1735         FunctionSpecificationMessage msg;
1736         msg.set_name("thisIsNew");
1737         if (profiling_for_args) {
1738             if (!args) {
1739                 LOG(WARNING) << "no argument passed";
1740             } else {
1741                 switch (event) {
1742                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1743                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1744                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1745                     {
1746                         if ((*args).size() != 0) {
1747                             LOG(ERROR) << "Number of arguments does not match. expect: 0, actual: " << (*args).size() << ", method name: thisIsNew, event type: " << event;
1748                             break;
1749                         }
1750                         break;
1751                     }
1752                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1753                     case details::HidlInstrumentor::SERVER_API_EXIT:
1754                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1755                     {
1756                         if ((*args).size() != 0) {
1757                             LOG(ERROR) << "Number of return values does not match. expect: 0, actual: " << (*args).size() << ", method name: thisIsNew, event type: " << event;
1758                             break;
1759                         }
1760                         break;
1761                     }
1762                     default:
1763                     {
1764                         LOG(WARNING) << "not supported. ";
1765                         break;
1766                     }
1767                 }
1768             }
1769         }
1770         profiler.AddTraceEvent(event, package, version, interface, msg);
1771     }
1772     if (strcmp(method, "expectNullHandle") == 0) {
1773         FunctionSpecificationMessage msg;
1774         msg.set_name("expectNullHandle");
1775         if (profiling_for_args) {
1776             if (!args) {
1777                 LOG(WARNING) << "no argument passed";
1778             } else {
1779                 switch (event) {
1780                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1781                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1782                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1783                     {
1784                         if ((*args).size() != 2) {
1785                             LOG(ERROR) << "Number of arguments does not match. expect: 2, actual: " << (*args).size() << ", method name: expectNullHandle, event type: " << event;
1786                             break;
1787                         }
1788                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1789                         ::android::hardware::hidl_handle *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_handle*> ((*args)[0]);
1790                         if (arg_val_0 != nullptr) {
1791                             arg_0->set_type(TYPE_HANDLE);
1792                             auto arg_0_h = (*arg_val_0).getNativeHandle();
1793                             if (arg_0_h) {
1794                                 arg_0->mutable_handle_value()->set_version(arg_0_h->version);
1795                                 arg_0->mutable_handle_value()->set_num_ints(arg_0_h->numInts);
1796                                 arg_0->mutable_handle_value()->set_num_fds(arg_0_h->numFds);
1797                                 for (int i = 0; i < arg_0_h->numInts + arg_0_h->numFds; i++) {
1798                                     if(i < arg_0_h->numFds) {
1799                                         auto* fd_val_i = arg_0->mutable_handle_value()->add_fd_val();
1800                                         char filePath[PATH_MAX];
1801                                         string procPath = "/proc/self/fd/" + to_string(arg_0_h->data[i]);
1802                                         ssize_t r = readlink(procPath.c_str(), filePath, sizeof(filePath));
1803                                         if (r == -1) {
1804                                             LOG(ERROR) << "Unable to get file path";
1805                                             continue;
1806                                         }
1807                                         filePath[r] = '\0';
1808                                         fd_val_i->set_file_name(filePath);
1809                                         struct stat statbuf;
1810                                         fstat(arg_0_h->data[i], &statbuf);
1811                                         fd_val_i->set_mode(statbuf.st_mode);
1812                                         if (S_ISREG(statbuf.st_mode) || S_ISDIR(statbuf.st_mode)) {
1813                                             fd_val_i->set_type(S_ISREG(statbuf.st_mode)? FILE_TYPE: DIR_TYPE);
1814                                             int flags = fcntl(arg_0_h->data[i], F_GETFL);
1815                                             fd_val_i->set_flags(flags);
1816                                         }
1817                                         else if (S_ISCHR(statbuf.st_mode) || S_ISBLK(statbuf.st_mode)) {
1818                                             fd_val_i->set_type(DEV_TYPE);
1819                                             if (strcmp(filePath, "/dev/ashmem") == 0) {
1820                                                 int size = ashmem_get_size_region(arg_0_h->data[i]);
1821                                                 fd_val_i->mutable_memory()->set_size(size);
1822                                             }
1823                                         }
1824                                         else if (S_ISFIFO(statbuf.st_mode)){
1825                                             fd_val_i->set_type(PIPE_TYPE);
1826                                         }
1827                                         else if (S_ISSOCK(statbuf.st_mode)) {
1828                                             fd_val_i->set_type(SOCKET_TYPE);
1829                                         }
1830                                         else {
1831                                             fd_val_i->set_type(LINK_TYPE);
1832                                         }
1833                                     } else {
1834                                         arg_0->mutable_handle_value()->add_int_val(arg_0_h->data[i]);
1835                                     }
1836                                 }
1837                             } else {
1838                                 LOG(WARNING) << "null handle";
1839                                 arg_0->mutable_handle_value()->set_hidl_handle_address(0);
1840                             }
1841                         } else {
1842                             LOG(WARNING) << "argument 0 is null.";
1843                         }
1844                         auto *arg_1 __attribute__((__unused__)) = msg.add_arg();
1845                         ::android::hardware::tests::foo::V1_0::Abc *arg_val_1 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::Abc*> ((*args)[1]);
1846                         if (arg_val_1 != nullptr) {
1847                             arg_1->set_type(TYPE_STRUCT);
1848                             profile____android__hardware__tests__foo__V1_0__Abc(arg_1, (*arg_val_1));
1849                         } else {
1850                             LOG(WARNING) << "argument 1 is null.";
1851                         }
1852                         break;
1853                     }
1854                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1855                     case details::HidlInstrumentor::SERVER_API_EXIT:
1856                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1857                     {
1858                         if ((*args).size() != 2) {
1859                             LOG(ERROR) << "Number of return values does not match. expect: 2, actual: " << (*args).size() << ", method name: expectNullHandle, event type: " << event;
1860                             break;
1861                         }
1862                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1863                         bool *result_val_0 __attribute__((__unused__)) = reinterpret_cast<bool*> ((*args)[0]);
1864                         if (result_val_0 != nullptr) {
1865                             result_0->set_type(TYPE_SCALAR);
1866                             result_0->mutable_scalar_value()->set_bool_t((*result_val_0));
1867                         } else {
1868                             LOG(WARNING) << "return value 0 is null.";
1869                         }
1870                         auto *result_1 __attribute__((__unused__)) = msg.add_return_type_hidl();
1871                         bool *result_val_1 __attribute__((__unused__)) = reinterpret_cast<bool*> ((*args)[1]);
1872                         if (result_val_1 != nullptr) {
1873                             result_1->set_type(TYPE_SCALAR);
1874                             result_1->mutable_scalar_value()->set_bool_t((*result_val_1));
1875                         } else {
1876                             LOG(WARNING) << "return value 1 is null.";
1877                         }
1878                         break;
1879                     }
1880                     default:
1881                     {
1882                         LOG(WARNING) << "not supported. ";
1883                         break;
1884                     }
1885                 }
1886             }
1887         }
1888         profiler.AddTraceEvent(event, package, version, interface, msg);
1889     }
1890     if (strcmp(method, "takeAMask") == 0) {
1891         FunctionSpecificationMessage msg;
1892         msg.set_name("takeAMask");
1893         if (profiling_for_args) {
1894             if (!args) {
1895                 LOG(WARNING) << "no argument passed";
1896             } else {
1897                 switch (event) {
1898                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
1899                     case details::HidlInstrumentor::SERVER_API_ENTRY:
1900                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
1901                     {
1902                         if ((*args).size() != 4) {
1903                             LOG(ERROR) << "Number of arguments does not match. expect: 4, actual: " << (*args).size() << ", method name: takeAMask, event type: " << event;
1904                             break;
1905                         }
1906                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
1907                         ::android::hardware::tests::foo::V1_0::IFoo::BitField *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::BitField*> ((*args)[0]);
1908                         if (arg_val_0 != nullptr) {
1909                             arg_0->set_type(TYPE_ENUM);
1910                             profile____android__hardware__tests__foo__V1_0__IFoo__BitField(arg_0, (*arg_val_0));
1911                         } else {
1912                             LOG(WARNING) << "argument 0 is null.";
1913                         }
1914                         auto *arg_1 __attribute__((__unused__)) = msg.add_arg();
1915                         uint8_t *arg_val_1 __attribute__((__unused__)) = reinterpret_cast<uint8_t*> ((*args)[1]);
1916                         if (arg_val_1 != nullptr) {
1917                             arg_1->set_type(TYPE_MASK);
1918                             arg_1->set_scalar_type("uint8_t");
1919                             arg_1->mutable_scalar_value()->set_uint8_t((*arg_val_1));
1920                         } else {
1921                             LOG(WARNING) << "argument 1 is null.";
1922                         }
1923                         auto *arg_2 __attribute__((__unused__)) = msg.add_arg();
1924                         ::android::hardware::tests::foo::V1_0::IFoo::MyMask *arg_val_2 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::MyMask*> ((*args)[2]);
1925                         if (arg_val_2 != nullptr) {
1926                             arg_2->set_type(TYPE_STRUCT);
1927                             profile____android__hardware__tests__foo__V1_0__IFoo__MyMask(arg_2, (*arg_val_2));
1928                         } else {
1929                             LOG(WARNING) << "argument 2 is null.";
1930                         }
1931                         auto *arg_3 __attribute__((__unused__)) = msg.add_arg();
1932                         uint8_t *arg_val_3 __attribute__((__unused__)) = reinterpret_cast<uint8_t*> ((*args)[3]);
1933                         if (arg_val_3 != nullptr) {
1934                             arg_3->set_type(TYPE_MASK);
1935                             arg_3->set_scalar_type("uint8_t");
1936                             arg_3->mutable_scalar_value()->set_uint8_t((*arg_val_3));
1937                         } else {
1938                             LOG(WARNING) << "argument 3 is null.";
1939                         }
1940                         break;
1941                     }
1942                     case details::HidlInstrumentor::CLIENT_API_EXIT:
1943                     case details::HidlInstrumentor::SERVER_API_EXIT:
1944                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
1945                     {
1946                         if ((*args).size() != 4) {
1947                             LOG(ERROR) << "Number of return values does not match. expect: 4, actual: " << (*args).size() << ", method name: takeAMask, event type: " << event;
1948                             break;
1949                         }
1950                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
1951                         ::android::hardware::tests::foo::V1_0::IFoo::BitField *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::tests::foo::V1_0::IFoo::BitField*> ((*args)[0]);
1952                         if (result_val_0 != nullptr) {
1953                             result_0->set_type(TYPE_ENUM);
1954                             profile____android__hardware__tests__foo__V1_0__IFoo__BitField(result_0, (*result_val_0));
1955                         } else {
1956                             LOG(WARNING) << "return value 0 is null.";
1957                         }
1958                         auto *result_1 __attribute__((__unused__)) = msg.add_return_type_hidl();
1959                         uint8_t *result_val_1 __attribute__((__unused__)) = reinterpret_cast<uint8_t*> ((*args)[1]);
1960                         if (result_val_1 != nullptr) {
1961                             result_1->set_type(TYPE_SCALAR);
1962                             result_1->mutable_scalar_value()->set_uint8_t((*result_val_1));
1963                         } else {
1964                             LOG(WARNING) << "return value 1 is null.";
1965                         }
1966                         auto *result_2 __attribute__((__unused__)) = msg.add_return_type_hidl();
1967                         uint8_t *result_val_2 __attribute__((__unused__)) = reinterpret_cast<uint8_t*> ((*args)[2]);
1968                         if (result_val_2 != nullptr) {
1969                             result_2->set_type(TYPE_SCALAR);
1970                             result_2->mutable_scalar_value()->set_uint8_t((*result_val_2));
1971                         } else {
1972                             LOG(WARNING) << "return value 2 is null.";
1973                         }
1974                         auto *result_3 __attribute__((__unused__)) = msg.add_return_type_hidl();
1975                         uint8_t *result_val_3 __attribute__((__unused__)) = reinterpret_cast<uint8_t*> ((*args)[3]);
1976                         if (result_val_3 != nullptr) {
1977                             result_3->set_type(TYPE_SCALAR);
1978                             result_3->mutable_scalar_value()->set_uint8_t((*result_val_3));
1979                         } else {
1980                             LOG(WARNING) << "return value 3 is null.";
1981                         }
1982                         break;
1983                     }
1984                     default:
1985                     {
1986                         LOG(WARNING) << "not supported. ";
1987                         break;
1988                     }
1989                 }
1990             }
1991         }
1992         profiler.AddTraceEvent(event, package, version, interface, msg);
1993     }
1994     if (strcmp(method, "haveAInterface") == 0) {
1995         FunctionSpecificationMessage msg;
1996         msg.set_name("haveAInterface");
1997         if (profiling_for_args) {
1998             if (!args) {
1999                 LOG(WARNING) << "no argument passed";
2000             } else {
2001                 switch (event) {
2002                     case details::HidlInstrumentor::CLIENT_API_ENTRY:
2003                     case details::HidlInstrumentor::SERVER_API_ENTRY:
2004                     case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
2005                     {
2006                         if ((*args).size() != 1) {
2007                             LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAInterface, event type: " << event;
2008                             break;
2009                         }
2010                         auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
2011                         sp<::android::hardware::tests::foo::V1_0::ISimple> *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<sp<::android::hardware::tests::foo::V1_0::ISimple>*> ((*args)[0]);
2012                         if (arg_val_0 != nullptr) {
2013                             arg_0->set_type(TYPE_HIDL_INTERFACE);
2014                             arg_0->set_predefined_type("::android::hardware::tests::foo::V1_0::ISimple");
2015                         } else {
2016                             LOG(WARNING) << "argument 0 is null.";
2017                         }
2018                         break;
2019                     }
2020                     case details::HidlInstrumentor::CLIENT_API_EXIT:
2021                     case details::HidlInstrumentor::SERVER_API_EXIT:
2022                     case details::HidlInstrumentor::PASSTHROUGH_EXIT:
2023                     {
2024                         if ((*args).size() != 1) {
2025                             LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: haveAInterface, event type: " << event;
2026                             break;
2027                         }
2028                         auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
2029                         sp<::android::hardware::tests::foo::V1_0::ISimple> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<sp<::android::hardware::tests::foo::V1_0::ISimple>*> ((*args)[0]);
2030                         if (result_val_0 != nullptr) {
2031                             result_0->set_type(TYPE_HIDL_INTERFACE);
2032                             result_0->set_predefined_type("::android::hardware::tests::foo::V1_0::ISimple");
2033                         } else {
2034                             LOG(WARNING) << "return value 0 is null.";
2035                         }
2036                         break;
2037                     }
2038                     default:
2039                     {
2040                         LOG(WARNING) << "not supported. ";
2041                         break;
2042                     }
2043                 }
2044             }
2045         }
2046         profiler.AddTraceEvent(event, package, version, interface, msg);
2047     }
2048 }
2049 
2050 }  // namespace vts
2051 }  // namespace android
2052