Home | History | Annotate | Download | only in PROFILER
      1 #include "android/hardware/tests/memory/1.0/MemoryTest.vts.h"
      2 #include <cutils/ashmem.h>
      3 #include <fcntl.h>
      4 #include <fmq/MessageQueue.h>
      5 #include <sys/stat.h>
      6 
      7 using namespace android::hardware::tests::memory::V1_0;
      8 using namespace android::hardware;
      9 
     10 #define TRACEFILEPREFIX "/data/local/tmp/"
     11 
     12 namespace android {
     13 namespace vts {
     14 
     15 void HIDL_INSTRUMENTATION_FUNCTION_android_hardware_tests_memory_V1_0_IMemoryTest(
     16         details::HidlInstrumentor::InstrumentationEvent event __attribute__((__unused__)),
     17         const char* package,
     18         const char* version,
     19         const char* interface,
     20         const char* method __attribute__((__unused__)),
     21         std::vector<void *> *args __attribute__((__unused__))) {
     22     if (strcmp(package, "android.hardware.tests.memory") != 0) {
     23         LOG(WARNING) << "incorrect package. Expect: android.hardware.tests.memory actual: " << package;
     24         return;
     25     }
     26     std::string version_str = std::string(version);
     27     int major_version = stoi(version_str.substr(0, version_str.find('.')));
     28     int minor_version = stoi(version_str.substr(version_str.find('.') + 1));
     29     if (major_version != 1 || minor_version > 0) {
     30         LOG(WARNING) << "incorrect version. Expect: 1.0 or lower (if version != x.0), actual: " << version;
     31         return;
     32     }
     33     if (strcmp(interface, "IMemoryTest") != 0) {
     34         LOG(WARNING) << "incorrect interface. Expect: IMemoryTest actual: " << interface;
     35         return;
     36     }
     37 
     38     VtsProfilingInterface& profiler = VtsProfilingInterface::getInstance(TRACEFILEPREFIX);
     39 
     40     if (strcmp(method, "haveSomeMemory") == 0) {
     41         FunctionSpecificationMessage msg;
     42         msg.set_name("haveSomeMemory");
     43         if (!args) {
     44             LOG(WARNING) << "no argument passed";
     45         } else {
     46             switch (event) {
     47                 case details::HidlInstrumentor::CLIENT_API_ENTRY:
     48                 case details::HidlInstrumentor::SERVER_API_ENTRY:
     49                 case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
     50                 {
     51                     if ((*args).size() != 1) {
     52                         LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveSomeMemory, event type: " << event;
     53                         break;
     54                     }
     55                     auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
     56                     ::android::hardware::hidl_memory *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_memory*> ((*args)[0]);
     57                     if (arg_val_0 != nullptr) {
     58                         arg_0->set_type(TYPE_HIDL_MEMORY);
     59                         arg_0->mutable_hidl_memory_value()->set_size((*arg_val_0).size());
     60                     } else {
     61                         LOG(WARNING) << "argument 0 is null.";
     62                     }
     63                     break;
     64                 }
     65                 case details::HidlInstrumentor::CLIENT_API_EXIT:
     66                 case details::HidlInstrumentor::SERVER_API_EXIT:
     67                 case details::HidlInstrumentor::PASSTHROUGH_EXIT:
     68                 {
     69                     if ((*args).size() != 1) {
     70                         LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: haveSomeMemory, event type: " << event;
     71                         break;
     72                     }
     73                     auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
     74                     ::android::hardware::hidl_memory *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_memory*> ((*args)[0]);
     75                     if (result_val_0 != nullptr) {
     76                         result_0->set_type(TYPE_HIDL_MEMORY);
     77                         result_0->mutable_hidl_memory_value()->set_size((*result_val_0).size());
     78                     } else {
     79                         LOG(WARNING) << "return value 0 is null.";
     80                     }
     81                     break;
     82                 }
     83                 default:
     84                 {
     85                     LOG(WARNING) << "not supported. ";
     86                     break;
     87                 }
     88             }
     89         }
     90         profiler.AddTraceEvent(event, package, version, interface, msg);
     91     }
     92     if (strcmp(method, "fillMemory") == 0) {
     93         FunctionSpecificationMessage msg;
     94         msg.set_name("fillMemory");
     95         if (!args) {
     96             LOG(WARNING) << "no argument passed";
     97         } else {
     98             switch (event) {
     99                 case details::HidlInstrumentor::CLIENT_API_ENTRY:
    100                 case details::HidlInstrumentor::SERVER_API_ENTRY:
    101                 case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
    102                 {
    103                     if ((*args).size() != 2) {
    104                         LOG(ERROR) << "Number of arguments does not match. expect: 2, actual: " << (*args).size() << ", method name: fillMemory, event type: " << event;
    105                         break;
    106                     }
    107                     auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
    108                     ::android::hardware::hidl_memory *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_memory*> ((*args)[0]);
    109                     if (arg_val_0 != nullptr) {
    110                         arg_0->set_type(TYPE_HIDL_MEMORY);
    111                         arg_0->mutable_hidl_memory_value()->set_size((*arg_val_0).size());
    112                     } else {
    113                         LOG(WARNING) << "argument 0 is null.";
    114                     }
    115                     auto *arg_1 __attribute__((__unused__)) = msg.add_arg();
    116                     uint8_t *arg_val_1 __attribute__((__unused__)) = reinterpret_cast<uint8_t*> ((*args)[1]);
    117                     if (arg_val_1 != nullptr) {
    118                         arg_1->set_type(TYPE_SCALAR);
    119                         arg_1->mutable_scalar_value()->set_uint8_t((*arg_val_1));
    120                     } else {
    121                         LOG(WARNING) << "argument 1 is null.";
    122                     }
    123                     break;
    124                 }
    125                 case details::HidlInstrumentor::CLIENT_API_EXIT:
    126                 case details::HidlInstrumentor::SERVER_API_EXIT:
    127                 case details::HidlInstrumentor::PASSTHROUGH_EXIT:
    128                 {
    129                     if ((*args).size() != 0) {
    130                         LOG(ERROR) << "Number of return values does not match. expect: 0, actual: " << (*args).size() << ", method name: fillMemory, event type: " << event;
    131                         break;
    132                     }
    133                     break;
    134                 }
    135                 default:
    136                 {
    137                     LOG(WARNING) << "not supported. ";
    138                     break;
    139                 }
    140             }
    141         }
    142         profiler.AddTraceEvent(event, package, version, interface, msg);
    143     }
    144     if (strcmp(method, "haveSomeMemoryBlock") == 0) {
    145         FunctionSpecificationMessage msg;
    146         msg.set_name("haveSomeMemoryBlock");
    147         if (!args) {
    148             LOG(WARNING) << "no argument passed";
    149         } else {
    150             switch (event) {
    151                 case details::HidlInstrumentor::CLIENT_API_ENTRY:
    152                 case details::HidlInstrumentor::SERVER_API_ENTRY:
    153                 case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
    154                 {
    155                     if ((*args).size() != 1) {
    156                         LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: haveSomeMemoryBlock, event type: " << event;
    157                         break;
    158                     }
    159                     auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
    160                     ::android::hidl::memory::block::V1_0::MemoryBlock *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hidl::memory::block::V1_0::MemoryBlock*> ((*args)[0]);
    161                     if (arg_val_0 != nullptr) {
    162                         arg_0->set_type(TYPE_STRUCT);
    163                         profile____android__hidl__memory__block__V1_0__MemoryBlock(arg_0, (*arg_val_0));
    164                     } else {
    165                         LOG(WARNING) << "argument 0 is null.";
    166                     }
    167                     break;
    168                 }
    169                 case details::HidlInstrumentor::CLIENT_API_EXIT:
    170                 case details::HidlInstrumentor::SERVER_API_EXIT:
    171                 case details::HidlInstrumentor::PASSTHROUGH_EXIT:
    172                 {
    173                     if ((*args).size() != 1) {
    174                         LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: haveSomeMemoryBlock, event type: " << event;
    175                         break;
    176                     }
    177                     auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
    178                     ::android::hidl::memory::block::V1_0::MemoryBlock *result_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hidl::memory::block::V1_0::MemoryBlock*> ((*args)[0]);
    179                     if (result_val_0 != nullptr) {
    180                         result_0->set_type(TYPE_STRUCT);
    181                         profile____android__hidl__memory__block__V1_0__MemoryBlock(result_0, (*result_val_0));
    182                     } else {
    183                         LOG(WARNING) << "return value 0 is null.";
    184                     }
    185                     break;
    186                 }
    187                 default:
    188                 {
    189                     LOG(WARNING) << "not supported. ";
    190                     break;
    191                 }
    192             }
    193         }
    194         profiler.AddTraceEvent(event, package, version, interface, msg);
    195     }
    196     if (strcmp(method, "set") == 0) {
    197         FunctionSpecificationMessage msg;
    198         msg.set_name("set");
    199         if (!args) {
    200             LOG(WARNING) << "no argument passed";
    201         } else {
    202             switch (event) {
    203                 case details::HidlInstrumentor::CLIENT_API_ENTRY:
    204                 case details::HidlInstrumentor::SERVER_API_ENTRY:
    205                 case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
    206                 {
    207                     if ((*args).size() != 1) {
    208                         LOG(ERROR) << "Number of arguments does not match. expect: 1, actual: " << (*args).size() << ", method name: set, event type: " << event;
    209                         break;
    210                     }
    211                     auto *arg_0 __attribute__((__unused__)) = msg.add_arg();
    212                     ::android::hardware::hidl_memory *arg_val_0 __attribute__((__unused__)) = reinterpret_cast<::android::hardware::hidl_memory*> ((*args)[0]);
    213                     if (arg_val_0 != nullptr) {
    214                         arg_0->set_type(TYPE_HIDL_MEMORY);
    215                         arg_0->mutable_hidl_memory_value()->set_size((*arg_val_0).size());
    216                     } else {
    217                         LOG(WARNING) << "argument 0 is null.";
    218                     }
    219                     break;
    220                 }
    221                 case details::HidlInstrumentor::CLIENT_API_EXIT:
    222                 case details::HidlInstrumentor::SERVER_API_EXIT:
    223                 case details::HidlInstrumentor::PASSTHROUGH_EXIT:
    224                 {
    225                     if ((*args).size() != 0) {
    226                         LOG(ERROR) << "Number of return values does not match. expect: 0, actual: " << (*args).size() << ", method name: set, event type: " << event;
    227                         break;
    228                     }
    229                     break;
    230                 }
    231                 default:
    232                 {
    233                     LOG(WARNING) << "not supported. ";
    234                     break;
    235                 }
    236             }
    237         }
    238         profiler.AddTraceEvent(event, package, version, interface, msg);
    239     }
    240     if (strcmp(method, "get") == 0) {
    241         FunctionSpecificationMessage msg;
    242         msg.set_name("get");
    243         if (!args) {
    244             LOG(WARNING) << "no argument passed";
    245         } else {
    246             switch (event) {
    247                 case details::HidlInstrumentor::CLIENT_API_ENTRY:
    248                 case details::HidlInstrumentor::SERVER_API_ENTRY:
    249                 case details::HidlInstrumentor::PASSTHROUGH_ENTRY:
    250                 {
    251                     if ((*args).size() != 0) {
    252                         LOG(ERROR) << "Number of arguments does not match. expect: 0, actual: " << (*args).size() << ", method name: get, event type: " << event;
    253                         break;
    254                     }
    255                     break;
    256                 }
    257                 case details::HidlInstrumentor::CLIENT_API_EXIT:
    258                 case details::HidlInstrumentor::SERVER_API_EXIT:
    259                 case details::HidlInstrumentor::PASSTHROUGH_EXIT:
    260                 {
    261                     if ((*args).size() != 1) {
    262                         LOG(ERROR) << "Number of return values does not match. expect: 1, actual: " << (*args).size() << ", method name: get, event type: " << event;
    263                         break;
    264                     }
    265                     auto *result_0 __attribute__((__unused__)) = msg.add_return_type_hidl();
    266                     sp<::android::hidl::memory::token::V1_0::IMemoryToken> *result_val_0 __attribute__((__unused__)) = reinterpret_cast<sp<::android::hidl::memory::token::V1_0::IMemoryToken>*> ((*args)[0]);
    267                     if (result_val_0 != nullptr) {
    268                         result_0->set_type(TYPE_HIDL_INTERFACE);
    269                         result_0->set_predefined_type("::android::hidl::memory::token::V1_0::IMemoryToken");
    270                     } else {
    271                         LOG(WARNING) << "return value 0 is null.";
    272                     }
    273                     break;
    274                 }
    275                 default:
    276                 {
    277                     LOG(WARNING) << "not supported. ";
    278                     break;
    279                 }
    280             }
    281         }
    282         profiler.AddTraceEvent(event, package, version, interface, msg);
    283     }
    284 }
    285 
    286 }  // namespace vts
    287 }  // namespace android
    288