diff --git a/tests/libhwbinder/1.0/Android.bp b/tests/libhwbinder/1.0/Android.bp index 9c0fe45ae1..e8d28a3cb4 100644 --- a/tests/libhwbinder/1.0/Android.bp +++ b/tests/libhwbinder/1.0/Android.bp @@ -4,6 +4,7 @@ filegroup { name: "android.hardware.tests.libhwbinder@1.0_hal", srcs: [ "IBenchmark.hal", + "IScheduleTest.hal", ], } @@ -16,6 +17,7 @@ genrule { ], out: [ "android/hardware/tests/libhwbinder/1.0/BenchmarkAll.cpp", + "android/hardware/tests/libhwbinder/1.0/ScheduleTestAll.cpp", ], } @@ -32,6 +34,11 @@ genrule { "android/hardware/tests/libhwbinder/1.0/BnHwBenchmark.h", "android/hardware/tests/libhwbinder/1.0/BpHwBenchmark.h", "android/hardware/tests/libhwbinder/1.0/BsBenchmark.h", + "android/hardware/tests/libhwbinder/1.0/IScheduleTest.h", + "android/hardware/tests/libhwbinder/1.0/IHwScheduleTest.h", + "android/hardware/tests/libhwbinder/1.0/BnHwScheduleTest.h", + "android/hardware/tests/libhwbinder/1.0/BpHwScheduleTest.h", + "android/hardware/tests/libhwbinder/1.0/BsScheduleTest.h", ], } diff --git a/tests/libhwbinder/1.0/Android.mk b/tests/libhwbinder/1.0/Android.mk index 4a5f7798ef..bb430fb6e2 100644 --- a/tests/libhwbinder/1.0/Android.mk +++ b/tests/libhwbinder/1.0/Android.mk @@ -34,6 +34,25 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \ $(GEN): $(LOCAL_PATH)/IBenchmark.hal $(transform-generated-source) LOCAL_GENERATED_SOURCES += $(GEN) + +# +# Build IScheduleTest.hal +# +GEN := $(intermediates)/android/hardware/tests/libhwbinder/V1_0/IScheduleTest.java +$(GEN): $(HIDL) +$(GEN): PRIVATE_HIDL := $(HIDL) +$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IScheduleTest.hal +$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) +$(GEN): PRIVATE_CUSTOM_TOOL = \ + $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ + -Ljava \ + -randroid.hardware:hardware/interfaces \ + -randroid.hidl:system/libhidl/transport \ + android.hardware.tests.libhwbinder@1.0::IScheduleTest + +$(GEN): $(LOCAL_PATH)/IScheduleTest.hal + $(transform-generated-source) +LOCAL_GENERATED_SOURCES += $(GEN) include $(BUILD_JAVA_LIBRARY) @@ -69,6 +88,25 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \ $(GEN): $(LOCAL_PATH)/IBenchmark.hal $(transform-generated-source) LOCAL_GENERATED_SOURCES += $(GEN) + +# +# Build IScheduleTest.hal +# +GEN := $(intermediates)/android/hardware/tests/libhwbinder/V1_0/IScheduleTest.java +$(GEN): $(HIDL) +$(GEN): PRIVATE_HIDL := $(HIDL) +$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IScheduleTest.hal +$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) +$(GEN): PRIVATE_CUSTOM_TOOL = \ + $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ + -Ljava \ + -randroid.hardware:hardware/interfaces \ + -randroid.hidl:system/libhidl/transport \ + android.hardware.tests.libhwbinder@1.0::IScheduleTest + +$(GEN): $(LOCAL_PATH)/IScheduleTest.hal + $(transform-generated-source) +LOCAL_GENERATED_SOURCES += $(GEN) include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/tests/libhwbinder/1.0/IBenchmark.hal b/tests/libhwbinder/1.0/IBenchmark.hal index 6b266e2e13..b3aa320a6d 100644 --- a/tests/libhwbinder/1.0/IBenchmark.hal +++ b/tests/libhwbinder/1.0/IBenchmark.hal @@ -17,5 +17,5 @@ package android.hardware.tests.libhwbinder@1.0; interface IBenchmark { - sendVec(vec data) generates (vec return_data); + sendVec(vec data) generates (vec data); }; diff --git a/tests/libhwbinder/1.0/IScheduleTest.hal b/tests/libhwbinder/1.0/IScheduleTest.hal new file mode 100644 index 0000000000..b3f57c5b1d --- /dev/null +++ b/tests/libhwbinder/1.0/IScheduleTest.hal @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.tests.libhwbinder@1.0; + +interface IScheduleTest { + send(uint32_t cfg, uint32_t callerSta) generates (uint32_t data); +}; diff --git a/tests/libhwbinder/1.0/default/Android.bp b/tests/libhwbinder/1.0/default/Android.bp index e690ca5a77..fa1b2b3fc5 100644 --- a/tests/libhwbinder/1.0/default/Android.bp +++ b/tests/libhwbinder/1.0/default/Android.bp @@ -1,18 +1,16 @@ cc_library_shared { name: "android.hardware.tests.libhwbinder@1.0-impl", - defaults: ["hidl_defaults"], relative_install_path: "hw", proprietary: true, srcs: [ "Benchmark.cpp", + "ScheduleTest.cpp", ], - shared_libs: [ - "libbase", "libhidlbase", "libhidltransport", - "liblog", "libutils", "android.hardware.tests.libhwbinder@1.0", + "android.hidl.base@1.0", ], } diff --git a/tests/libhwbinder/1.0/default/ScheduleTest.cpp b/tests/libhwbinder/1.0/default/ScheduleTest.cpp new file mode 100644 index 0000000000..63569534d7 --- /dev/null +++ b/tests/libhwbinder/1.0/default/ScheduleTest.cpp @@ -0,0 +1,84 @@ +#include "ScheduleTest.h" +#include +#include +#include + +using namespace std; + +#define ASSERT(cond) \ + do { \ + if (!(cond)) { \ + cerr << __func__ << ":" << __LINE__ << " condition:" << #cond \ + << " failed\n" \ + << endl; \ + exit(EXIT_FAILURE); \ + } \ + } while (0) + +static int threadPri() { + struct sched_param param; + int policy; + ASSERT(!pthread_getschedparam(pthread_self(), &policy, ¶m)); + return param.sched_priority; +} + +static void threadDump(const char* prefix, int verbose) { + struct sched_param param; + int policy; + if (!verbose) return; + cout << "--------------------------------------------------" << endl; + cout << setw(12) << left << prefix << " pid: " << getpid() + << " tid: " << gettid() << " cpu: " << sched_getcpu() << endl; + ASSERT(!pthread_getschedparam(pthread_self(), &policy, ¶m)); + string s = (policy == SCHED_OTHER) + ? "SCHED_OTHER" + : (policy == SCHED_FIFO) + ? "SCHED_FIFO" + : (policy == SCHED_RR) ? "SCHED_RR" : "???"; + cout << setw(12) << left << s << param.sched_priority << endl; + return; +} + +namespace android { +namespace hardware { +namespace tests { +namespace libhwbinder { +namespace V1_0 { +namespace implementation { + +// Methods from ::android::hardware::tests::libhwbinder::V1_0::IScheduleTest +// follow. +Return ScheduleTest::send(uint32_t cfg, uint32_t callerSta) { + // TODO implement + int priority = threadPri(); + int priority_caller = (callerSta >> 16) & 0xffff; + int verbose = cfg & 1; + threadDump("hwbinder", verbose); + uint32_t h = 0, s = 0; + if (priority_caller != priority) { + h++; + if (verbose) { + cout << "err priority_caller:" << priority_caller + << ", priority:" << priority << endl; + } + } + int cpu = sched_getcpu(); + int cpu_caller = (callerSta)&0xffff; + if (cpu != cpu_caller) { + s++; + } + return (h << 16) | (s & 0xffff); +} + +// Methods from ::android::hidl::base::V1_0::IBase follow. + +IScheduleTest* HIDL_FETCH_IScheduleTest(const char* /* name */) { + return new ScheduleTest(); +} + +} // namespace implementation +} // namespace V1_0 +} // namespace libhwbinder +} // namespace tests +} // namespace hardware +} // namespace android diff --git a/tests/libhwbinder/1.0/default/ScheduleTest.h b/tests/libhwbinder/1.0/default/ScheduleTest.h new file mode 100644 index 0000000000..ad6dd9d3c6 --- /dev/null +++ b/tests/libhwbinder/1.0/default/ScheduleTest.h @@ -0,0 +1,41 @@ +#ifndef ANDROID_HARDWARE_TESTS_LIBHWBINDER_V1_0_SCHEDULETEST_H +#define ANDROID_HARDWARE_TESTS_LIBHWBINDER_V1_0_SCHEDULETEST_H + +#include +#include +#include + +namespace android { +namespace hardware { +namespace tests { +namespace libhwbinder { +namespace V1_0 { +namespace implementation { + +using ::android::hardware::tests::libhwbinder::V1_0::IScheduleTest; +using ::android::hidl::base::V1_0::DebugInfo; +using ::android::hidl::base::V1_0::IBase; +using ::android::hardware::hidl_array; +using ::android::hardware::hidl_memory; +using ::android::hardware::hidl_string; +using ::android::hardware::hidl_vec; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::sp; + +struct ScheduleTest : public IScheduleTest { + // Methods from ::android::hardware::tests::libhwbinder::V1_0::IScheduleTest + // follow. + Return send(uint32_t cfg, uint32_t callerSta) override; + + // Methods from ::android::hidl::base::V1_0::IBase follow. +}; + +} // namespace implementation +} // namespace V1_0 +} // namespace libhwbinder +} // namespace tests +} // namespace hardware +} // namespace android + +#endif // ANDROID_HARDWARE_TESTS_LIBHWBINDER_V1_0_SCHEDULETEST_H