Merge "Add IScheduleTest for VTS libhwbinder scheduler test" into oc-dev
This commit is contained in:
commit
fdd891393c
7 changed files with 194 additions and 5 deletions
|
@ -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",
|
||||
],
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -17,5 +17,5 @@
|
|||
package android.hardware.tests.libhwbinder@1.0;
|
||||
|
||||
interface IBenchmark {
|
||||
sendVec(vec<uint8_t> data) generates (vec<uint8_t> return_data);
|
||||
sendVec(vec<uint8_t> data) generates (vec<uint8_t> data);
|
||||
};
|
||||
|
|
21
tests/libhwbinder/1.0/IScheduleTest.hal
Normal file
21
tests/libhwbinder/1.0/IScheduleTest.hal
Normal file
|
@ -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);
|
||||
};
|
|
@ -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",
|
||||
],
|
||||
}
|
||||
|
|
84
tests/libhwbinder/1.0/default/ScheduleTest.cpp
Normal file
84
tests/libhwbinder/1.0/default/ScheduleTest.cpp
Normal file
|
@ -0,0 +1,84 @@
|
|||
#include "ScheduleTest.h"
|
||||
#include <pthread.h>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
|
||||
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<uint32_t> 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
|
41
tests/libhwbinder/1.0/default/ScheduleTest.h
Normal file
41
tests/libhwbinder/1.0/default/ScheduleTest.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
#ifndef ANDROID_HARDWARE_TESTS_LIBHWBINDER_V1_0_SCHEDULETEST_H
|
||||
#define ANDROID_HARDWARE_TESTS_LIBHWBINDER_V1_0_SCHEDULETEST_H
|
||||
|
||||
#include <android/hardware/tests/libhwbinder/1.0/IScheduleTest.h>
|
||||
#include <hidl/MQDescriptor.h>
|
||||
#include <hidl/Status.h>
|
||||
|
||||
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<uint32_t> 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
|
Loading…
Reference in a new issue