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