diff options
author | Brian Stack <bstack@google.com> | 2018-09-26 16:17:33 -0700 |
---|---|---|
committer | Brian Stack <bstack@google.com> | 2018-10-05 10:03:43 -0700 |
commit | bc5a39bd249b46d6d6528e4489761ef0d8644aef (patch) | |
tree | 960b29716e971e2bd28bf2f0401febd17031a33b /sensors/1.0/vts | |
parent | f0dbf813b22624375727f1f50d8d7df6c5dc5a8a (diff) | |
download | android_hardware_interfaces-bc5a39bd249b46d6d6528e4489761ef0d8644aef.tar.gz android_hardware_interfaces-bc5a39bd249b46d6d6528e4489761ef0d8644aef.tar.bz2 android_hardware_interfaces-bc5a39bd249b46d6d6528e4489761ef0d8644aef.zip |
Create SensorsHidlEnvironmentBase
Move common parts of SensorsHidlEnvironment into a base class so they
can be reused with other versions of sensors tests.
Bug: 111070257
Test: Builds
Change-Id: I1e04e734d00308adff35b9c16de1499573a84b03
Diffstat (limited to 'sensors/1.0/vts')
3 files changed, 32 insertions, 87 deletions
diff --git a/sensors/1.0/vts/functional/SensorsHidlEnvironmentV1_0.cpp b/sensors/1.0/vts/functional/SensorsHidlEnvironmentV1_0.cpp index bb478aeac..f8b021e00 100644 --- a/sensors/1.0/vts/functional/SensorsHidlEnvironmentV1_0.cpp +++ b/sensors/1.0/vts/functional/SensorsHidlEnvironmentV1_0.cpp @@ -18,30 +18,14 @@ #include <log/log.h> +#include <vector> + using ::android::hardware::hidl_vec; using ::android::hardware::sensors::V1_0::ISensors; using ::android::hardware::sensors::V1_0::Result; using ::android::hardware::sensors::V1_0::SensorInfo; -void SensorsHidlEnvironment::HidlSetUp() { - resetHal(); - - ASSERT_NE(sensors, nullptr) << "sensors is nullptr, cannot get hidl service"; - - collectionEnabled = false; - startPollingThread(); - - // In case framework just stopped for test and there is sensor events in the pipe, - // wait some time for those events to be cleared to avoid them messing up the test. - std::this_thread::sleep_for(std::chrono::seconds(3)); -} - -void SensorsHidlEnvironment::HidlTearDown() { - stopThread = true; - pollThread.detach(); -} - -void SensorsHidlEnvironment::resetHal() { +bool SensorsHidlEnvironmentV1_0::resetHal() { // wait upto 100ms * 10 = 1s for hidl service. constexpr auto RETRY_DELAY = std::chrono::milliseconds(100); @@ -52,7 +36,7 @@ void SensorsHidlEnvironment::resetHal() { do { step = "getService()"; sensors = ISensors::getService( - SensorsHidlEnvironment::Instance()->getServiceName<ISensors>()); + SensorsHidlEnvironmentV1_0::Instance()->getServiceName<ISensors>()); if (sensors == nullptr) { break; } @@ -97,7 +81,7 @@ void SensorsHidlEnvironment::resetHal() { } while (0); if (succeed) { - return; + return true; } // Delay 100ms before retry, hidl service is expected to come up in short time after crash. @@ -106,35 +90,17 @@ void SensorsHidlEnvironment::resetHal() { } sensors = nullptr; + return false; } -void SensorsHidlEnvironment::catEvents(std::vector<Event>* output) { - std::lock_guard<std::mutex> lock(events_mutex); - if (output) { - output->insert(output->end(), events.begin(), events.end()); - } - events.clear(); -} - -void SensorsHidlEnvironment::setCollection(bool enable) { - std::lock_guard<std::mutex> lock(events_mutex); - collectionEnabled = enable; -} - -void SensorsHidlEnvironment::addEvent(const Event& ev) { - std::lock_guard<std::mutex> lock(events_mutex); - if (collectionEnabled) { - events.push_back(ev); - } -} - -void SensorsHidlEnvironment::startPollingThread() { +void SensorsHidlEnvironmentV1_0::startPollingThread() { stopThread = false; pollThread = std::thread(pollingThread, this, std::ref(stopThread)); events.reserve(128); } -void SensorsHidlEnvironment::pollingThread(SensorsHidlEnvironment* env, std::atomic_bool& stop) { +void SensorsHidlEnvironmentV1_0::pollingThread(SensorsHidlEnvironmentV1_0* env, + std::atomic_bool& stop) { ALOGD("polling thread start"); while (!stop) { diff --git a/sensors/1.0/vts/functional/SensorsHidlEnvironmentV1_0.h b/sensors/1.0/vts/functional/SensorsHidlEnvironmentV1_0.h index d18461365..0a9e59f21 100644 --- a/sensors/1.0/vts/functional/SensorsHidlEnvironmentV1_0.h +++ b/sensors/1.0/vts/functional/SensorsHidlEnvironmentV1_0.h @@ -17,62 +17,43 @@ #ifndef ANDROID_SENSORS_HIDL_ENVIRONMENT_V1_0_H #define ANDROID_SENSORS_HIDL_ENVIRONMENT_V1_0_H -#include <VtsHalHidlTargetTestEnvBase.h> +#include "sensors-vts-utils/SensorsHidlEnvironmentBase.h" + #include <android/hardware/sensors/1.0/ISensors.h> #include <android/hardware/sensors/1.0/types.h> #include <utils/StrongPointer.h> #include <atomic> #include <memory> -#include <mutex> -#include <thread> -#include <vector> using ::android::sp; class SensorsHidlTest; -class SensorsHidlEnvironment : public ::testing::VtsHalHidlTargetTestEnvBase { +class SensorsHidlEnvironmentV1_0 : public SensorsHidlEnvironmentBase { public: using Event = ::android::hardware::sensors::V1_0::Event; // get the test environment singleton - static SensorsHidlEnvironment* Instance() { - static SensorsHidlEnvironment* instance = new SensorsHidlEnvironment(); + static SensorsHidlEnvironmentV1_0* Instance() { + static SensorsHidlEnvironmentV1_0* instance = new SensorsHidlEnvironmentV1_0(); return instance; } - virtual void HidlSetUp() override; - virtual void HidlTearDown() override; - virtual void registerTestServices() override { registerTestService<android::hardware::sensors::V1_0::ISensors>(); } - // Get and clear all events collected so far (like "cat" shell command). - // If output is nullptr, it clears all collected events. - void catEvents(std::vector<Event>* output); - - // set sensor event collection status - void setCollection(bool enable); - private: friend SensorsHidlTest; // sensors hidl service sp<android::hardware::sensors::V1_0::ISensors> sensors; - SensorsHidlEnvironment() {} - - void addEvent(const Event& ev); - void startPollingThread(); - void resetHal(); - static void pollingThread(SensorsHidlEnvironment* env, std::atomic_bool& stop); + SensorsHidlEnvironmentV1_0() {} - bool collectionEnabled; - std::atomic_bool stopThread; - std::thread pollThread; - std::vector<Event> events; - std::mutex events_mutex; + bool resetHal() override; + void startPollingThread() override; + static void pollingThread(SensorsHidlEnvironmentV1_0* env, std::atomic_bool& stop); - GTEST_DISALLOW_COPY_AND_ASSIGN_(SensorsHidlEnvironment); + GTEST_DISALLOW_COPY_AND_ASSIGN_(SensorsHidlEnvironmentV1_0); }; #endif // ANDROID_SENSORS_HIDL_ENVIRONMENT_V1_0_H
\ No newline at end of file diff --git a/sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp b/sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp index 8e66466f5..54c9497ad 100644 --- a/sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp +++ b/sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp @@ -365,9 +365,7 @@ class SensorsHidlTest : public ::testing::VtsHalHidlTargetTestBase { return S()->configDirectReport(sensorHandle, channelHandle, rate, _hidl_cb); } - inline sp<ISensors>& S() { - return SensorsHidlEnvironment::Instance()->sensors; - } + inline sp<ISensors>& S() { return SensorsHidlEnvironmentV1_0::Instance()->sensors; } inline static SensorFlagBits extractReportMode(uint64_t flag) { return (SensorFlagBits) (flag @@ -453,10 +451,10 @@ std::vector<Event> SensorsHidlTest::collectEvents(useconds_t timeLimitUs, size_t nEventLimit, timeLimitUs, clearBeforeStart); if (changeCollection) { - SensorsHidlEnvironment::Instance()->setCollection(true); + SensorsHidlEnvironmentV1_0::Instance()->setCollection(true); } if (clearBeforeStart) { - SensorsHidlEnvironment::Instance()->catEvents(nullptr); + SensorsHidlEnvironmentV1_0::Instance()->catEvents(nullptr); } while (timeLimitUs > 0) { @@ -464,7 +462,7 @@ std::vector<Event> SensorsHidlTest::collectEvents(useconds_t timeLimitUs, size_t usleep(duration); timeLimitUs -= duration; - SensorsHidlEnvironment::Instance()->catEvents(&events); + SensorsHidlEnvironmentV1_0::Instance()->catEvents(&events); if (events.size() >= nEventLimit) { break; } @@ -473,7 +471,7 @@ std::vector<Event> SensorsHidlTest::collectEvents(useconds_t timeLimitUs, size_t } if (changeCollection) { - SensorsHidlEnvironment::Instance()->setCollection(false); + SensorsHidlEnvironmentV1_0::Instance()->setCollection(false); } return events; } @@ -1068,7 +1066,7 @@ void SensorsHidlTest::testBatchingOperation(SensorType type) { // since collection is not enabled all events will go down the drain usleep(batchingPeriodInNs / 1000 * 8 / 10); - SensorsHidlEnvironment::Instance()->setCollection(true); + SensorsHidlEnvironmentV1_0::Instance()->setCollection(true); // clean existing collections collectEvents(0 /*timeLimitUs*/, 0/*nEventLimit*/, true /*clearBeforeStart*/, false /*change collection*/); @@ -1081,7 +1079,7 @@ void SensorsHidlTest::testBatchingOperation(SensorType type) { events = collectEvents(allowedBatchDeliverTimeNs / 1000, minFifoCount, false /*clearBeforeStart*/, false /*change collection*/); - SensorsHidlEnvironment::Instance()->setCollection(false); + SensorsHidlEnvironmentV1_0::Instance()->setCollection(false); ASSERT_EQ(activate(handle, 0), Result::OK); size_t nEvent = 0; @@ -1337,11 +1335,11 @@ TEST_F(SensorsHidlTest, MagnetometerGrallocDirectReportOperationVeryFast) { } int main(int argc, char **argv) { - ::testing::AddGlobalTestEnvironment(SensorsHidlEnvironment::Instance()); - ::testing::InitGoogleTest(&argc, argv); - SensorsHidlEnvironment::Instance()->init(&argc, argv); - int status = RUN_ALL_TESTS(); - ALOGI("Test result = %d", status); - return status; + ::testing::AddGlobalTestEnvironment(SensorsHidlEnvironmentV1_0::Instance()); + ::testing::InitGoogleTest(&argc, argv); + SensorsHidlEnvironmentV1_0::Instance()->init(&argc, argv); + int status = RUN_ALL_TESTS(); + ALOGI("Test result = %d", status); + return status; } // vim: set ts=2 sw=2 |