1*8222fbe1SAndroid Build Coastguard Worker /*
2*8222fbe1SAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project
3*8222fbe1SAndroid Build Coastguard Worker *
4*8222fbe1SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*8222fbe1SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*8222fbe1SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*8222fbe1SAndroid Build Coastguard Worker *
8*8222fbe1SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*8222fbe1SAndroid Build Coastguard Worker *
10*8222fbe1SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*8222fbe1SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*8222fbe1SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*8222fbe1SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*8222fbe1SAndroid Build Coastguard Worker * limitations under the License.
15*8222fbe1SAndroid Build Coastguard Worker */
16*8222fbe1SAndroid Build Coastguard Worker
17*8222fbe1SAndroid Build Coastguard Worker #define LOG_TAG "HidlInternal"
18*8222fbe1SAndroid Build Coastguard Worker
19*8222fbe1SAndroid Build Coastguard Worker #include <hidl/HidlInternal.h>
20*8222fbe1SAndroid Build Coastguard Worker
21*8222fbe1SAndroid Build Coastguard Worker #ifdef __ANDROID__
22*8222fbe1SAndroid Build Coastguard Worker #include <android/api-level.h>
23*8222fbe1SAndroid Build Coastguard Worker #endif
24*8222fbe1SAndroid Build Coastguard Worker #include <android-base/logging.h>
25*8222fbe1SAndroid Build Coastguard Worker #include <android-base/properties.h>
26*8222fbe1SAndroid Build Coastguard Worker #include <android-base/stringprintf.h>
27*8222fbe1SAndroid Build Coastguard Worker
28*8222fbe1SAndroid Build Coastguard Worker namespace android {
29*8222fbe1SAndroid Build Coastguard Worker namespace hardware {
30*8222fbe1SAndroid Build Coastguard Worker namespace details {
31*8222fbe1SAndroid Build Coastguard Worker
logAlwaysFatal(const char * message)32*8222fbe1SAndroid Build Coastguard Worker void logAlwaysFatal(const char* message) {
33*8222fbe1SAndroid Build Coastguard Worker LOG(FATAL) << message;
34*8222fbe1SAndroid Build Coastguard Worker }
35*8222fbe1SAndroid Build Coastguard Worker
getVndkSpHwPath(const char * lib)36*8222fbe1SAndroid Build Coastguard Worker std::string getVndkSpHwPath(const char* lib) {
37*8222fbe1SAndroid Build Coastguard Worker static std::string vndk_version = base::GetProperty("ro.vndk.version", "");
38*8222fbe1SAndroid Build Coastguard Worker #ifdef __ANDROID__
39*8222fbe1SAndroid Build Coastguard Worker static int api_level = android_get_device_api_level();
40*8222fbe1SAndroid Build Coastguard Worker if (api_level >= __ANDROID_API_R__) {
41*8222fbe1SAndroid Build Coastguard Worker return android::base::StringPrintf("/apex/com.android.vndk.v%s/%s/hw/",
42*8222fbe1SAndroid Build Coastguard Worker vndk_version.c_str(), lib);
43*8222fbe1SAndroid Build Coastguard Worker }
44*8222fbe1SAndroid Build Coastguard Worker #endif
45*8222fbe1SAndroid Build Coastguard Worker return android::base::StringPrintf("/system/%s/vndk-sp-%s/hw/", lib, vndk_version.c_str());
46*8222fbe1SAndroid Build Coastguard Worker }
47*8222fbe1SAndroid Build Coastguard Worker
48*8222fbe1SAndroid Build Coastguard Worker // ----------------------------------------------------------------------
49*8222fbe1SAndroid Build Coastguard Worker // HidlInstrumentor implementation.
HidlInstrumentor(const std::string & package,const std::string & interface)50*8222fbe1SAndroid Build Coastguard Worker HidlInstrumentor::HidlInstrumentor(const std::string& package, const std::string& interface)
51*8222fbe1SAndroid Build Coastguard Worker : mEnableInstrumentation(false),
52*8222fbe1SAndroid Build Coastguard Worker mInstrumentationLibPackage(package),
53*8222fbe1SAndroid Build Coastguard Worker mInterfaceName(interface) {}
54*8222fbe1SAndroid Build Coastguard Worker
~HidlInstrumentor()55*8222fbe1SAndroid Build Coastguard Worker HidlInstrumentor::~HidlInstrumentor() {}
56*8222fbe1SAndroid Build Coastguard Worker
configureInstrumentation(bool log)57*8222fbe1SAndroid Build Coastguard Worker void HidlInstrumentor::configureInstrumentation(bool log) {
58*8222fbe1SAndroid Build Coastguard Worker mEnableInstrumentation = base::GetBoolProperty("hal.instrumentation.enable", false);
59*8222fbe1SAndroid Build Coastguard Worker if (mEnableInstrumentation) {
60*8222fbe1SAndroid Build Coastguard Worker if (log) {
61*8222fbe1SAndroid Build Coastguard Worker LOG(INFO) << "Enable instrumentation.";
62*8222fbe1SAndroid Build Coastguard Worker }
63*8222fbe1SAndroid Build Coastguard Worker mInstrumentationCallbacks.clear();
64*8222fbe1SAndroid Build Coastguard Worker registerInstrumentationCallbacks(&mInstrumentationCallbacks);
65*8222fbe1SAndroid Build Coastguard Worker } else {
66*8222fbe1SAndroid Build Coastguard Worker if (log) {
67*8222fbe1SAndroid Build Coastguard Worker LOG(INFO) << "Disable instrumentation.";
68*8222fbe1SAndroid Build Coastguard Worker }
69*8222fbe1SAndroid Build Coastguard Worker mInstrumentationCallbacks.clear();
70*8222fbe1SAndroid Build Coastguard Worker }
71*8222fbe1SAndroid Build Coastguard Worker }
72*8222fbe1SAndroid Build Coastguard Worker
registerInstrumentationCallbacks(std::vector<InstrumentationCallback> * instrumentationCallbacks)73*8222fbe1SAndroid Build Coastguard Worker void HidlInstrumentor::registerInstrumentationCallbacks(
74*8222fbe1SAndroid Build Coastguard Worker std::vector<InstrumentationCallback> *instrumentationCallbacks) {
75*8222fbe1SAndroid Build Coastguard Worker // No-op, historical
76*8222fbe1SAndroid Build Coastguard Worker (void) instrumentationCallbacks;
77*8222fbe1SAndroid Build Coastguard Worker return;
78*8222fbe1SAndroid Build Coastguard Worker }
79*8222fbe1SAndroid Build Coastguard Worker
isInstrumentationLib(const dirent * file)80*8222fbe1SAndroid Build Coastguard Worker bool HidlInstrumentor::isInstrumentationLib(const dirent *file) {
81*8222fbe1SAndroid Build Coastguard Worker (void) file;
82*8222fbe1SAndroid Build Coastguard Worker return false;
83*8222fbe1SAndroid Build Coastguard Worker }
84*8222fbe1SAndroid Build Coastguard Worker
85*8222fbe1SAndroid Build Coastguard Worker } // namespace details
86*8222fbe1SAndroid Build Coastguard Worker } // namespace hardware
87*8222fbe1SAndroid Build Coastguard Worker } // namespace android
88