diff options
author | Wei Wang <wvw@google.com> | 2017-11-16 16:02:54 -0800 |
---|---|---|
committer | Wei Wang <wvw@google.com> | 2017-12-01 16:04:57 -0800 |
commit | 2e687c25bcccd57789e508591194e7d24ab5646d (patch) | |
tree | 1191c243ac329c10504743d70dc4418c994f5010 /power/1.2 | |
parent | 5ca6f514ebd3c5401af380b28ec4efe9bc783f9d (diff) | |
download | platform_hardware_interfaces-2e687c25bcccd57789e508591194e7d24ab5646d.tar.gz platform_hardware_interfaces-2e687c25bcccd57789e508591194e7d24ab5646d.tar.bz2 platform_hardware_interfaces-2e687c25bcccd57789e508591194e7d24ab5646d.zip |
power hal: Add power HAL API 1.2
Extend more powerHint types
Test result: #./VtsHalPowerV1_2TargetTest
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from PowerHidlTest
[ RUN ] PowerHidlTest.PowerHintAsync_1_2
[ OK ] PowerHidlTest.PowerHintAsync_1_2 (9 ms)
[----------] 1 test from PowerHidlTest (9 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (10 ms total)
[ PASSED ] 1 test.
Bug: 62041945
Test: run VTS
Change-Id: If6c9d19962907bcb96ea83e9297f74e80a743b9e
Diffstat (limited to 'power/1.2')
-rw-r--r-- | power/1.2/Android.bp | 23 | ||||
-rw-r--r-- | power/1.2/IPower.hal | 33 | ||||
-rw-r--r-- | power/1.2/types.hal | 59 | ||||
-rw-r--r-- | power/1.2/vts/functional/Android.bp | 26 | ||||
-rw-r--r-- | power/1.2/vts/functional/VtsHalPowerV1_2TargetTest.cpp | 99 |
5 files changed, 240 insertions, 0 deletions
diff --git a/power/1.2/Android.bp b/power/1.2/Android.bp new file mode 100644 index 0000000000..0eb73e7a45 --- /dev/null +++ b/power/1.2/Android.bp @@ -0,0 +1,23 @@ +// This file is autogenerated by hidl-gen -Landroidbp. + +hidl_interface { + name: "android.hardware.power@1.2", + root: "android.hardware", + vndk: { + enabled: true, + }, + srcs: [ + "types.hal", + "IPower.hal", + ], + interfaces: [ + "android.hardware.power@1.0", + "android.hardware.power@1.1", + "android.hidl.base@1.0", + ], + types: [ + "PowerHint", + ], + gen_java: true, +} + diff --git a/power/1.2/IPower.hal b/power/1.2/IPower.hal new file mode 100644 index 0000000000..1c2c7b85a9 --- /dev/null +++ b/power/1.2/IPower.hal @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2017 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.power@1.2; + +import @1.1::IPower; + +interface IPower extends @1.1::IPower { + /** + * called to pass hints on power requirements which + * may result in adjustment of power/performance parameters of the + * cpufreq governor and other controls. + * + * A particular platform may choose to ignore any hint. + * + * @param hint PowerHint which is passed + * @param data contains additional information about the hint + * and is described along with the comments for each of the hints. + */ + oneway powerHintAsync_1_2(PowerHint hint, int32_t data); +}; diff --git a/power/1.2/types.hal b/power/1.2/types.hal new file mode 100644 index 0000000000..f7a6cf6878 --- /dev/null +++ b/power/1.2/types.hal @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2017 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.power@1.2; + +import @1.0::PowerHint; + +/** Power hint identifiers passed to powerHintAsync_1_2() */ +enum PowerHint : @1.0::PowerHint { + /** + * This hint indicates that audio stream is being started. Can be used + * for device specific optimizations during starting audio stream. The + * data parameter is non-zero when stream starts and zero when audio + * stream setup is complete. + */ + AUDIO_STREAMING, + + /** + * This hint indicates that low latency audio is active. Can be used + * for device specific optimizations towards low latency audio. The + * data parameter is non-zero when low latency audio starts and + * zero when ends. + */ + AUDIO_LOW_LATENCY, + + /** + * These hint indicates that camera is being launched. Can be used + * for device specific optimizations during camera launch. The data + * parameter is non-zero when camera launch starts and zero when launch + * is complete. + */ + CAMERA_LAUNCH, + + /** + * This hint indicates that camera stream is being started. Can be used + * for device specific optimizations during starting camera stream. The + * data parameter is non-zero when stream starts and zero when ends. + */ + CAMERA_STREAMING, + + /** + * This hint indicates that camera shot is being taken. Can be used + * for device specific optimizations during taking camera shot. The + * data parameter is non-zero when camera shot starts and zero when ends. + */ + CAMERA_SHOT, +}; diff --git a/power/1.2/vts/functional/Android.bp b/power/1.2/vts/functional/Android.bp new file mode 100644 index 0000000000..d615e85a7c --- /dev/null +++ b/power/1.2/vts/functional/Android.bp @@ -0,0 +1,26 @@ +// +// Copyright (C) 2017 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. +// + +cc_test { + name: "VtsHalPowerV1_2TargetTest", + defaults: ["VtsHalTargetTestDefaults"], + srcs: ["VtsHalPowerV1_2TargetTest.cpp"], + static_libs: [ + "android.hardware.power@1.0", + "android.hardware.power@1.1", + "android.hardware.power@1.2", + ], +} diff --git a/power/1.2/vts/functional/VtsHalPowerV1_2TargetTest.cpp b/power/1.2/vts/functional/VtsHalPowerV1_2TargetTest.cpp new file mode 100644 index 0000000000..5e929971ff --- /dev/null +++ b/power/1.2/vts/functional/VtsHalPowerV1_2TargetTest.cpp @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2017 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. + */ + +#define LOG_TAG "power_hidl_hal_test" +#include <android-base/logging.h> +#include <android/hardware/power/1.2/IPower.h> + +#include <VtsHalHidlTargetTestBase.h> +#include <VtsHalHidlTargetTestEnvBase.h> + +using ::android::sp; +using ::android::hardware::hidl_vec; +using ::android::hardware::Return; +using ::android::hardware::power::V1_2::IPower; +using ::android::hardware::power::V1_2::PowerHint; + +// Test environment for Power HIDL HAL. +class PowerHidlEnvironment : public ::testing::VtsHalHidlTargetTestEnvBase { + public: + // get the test environment singleton + static PowerHidlEnvironment* Instance() { + static PowerHidlEnvironment* instance = new PowerHidlEnvironment; + return instance; + } + + virtual void registerTestServices() override { registerTestService<IPower>(); } +}; + +class PowerHidlTest : public ::testing::VtsHalHidlTargetTestBase { + public: + virtual void SetUp() override { + power = ::testing::VtsHalHidlTargetTestBase::getService<IPower>( + PowerHidlEnvironment::Instance()->getServiceName<IPower>()); + ASSERT_NE(power, nullptr); + } + + sp<IPower> power; +}; + +// Sanity check Power::PowerHintAsync_1_2 on good and bad inputs. +TEST_F(PowerHidlTest, PowerHintAsync_1_2) { + std::vector<PowerHint> hints; + for (uint32_t i = static_cast<uint32_t>(PowerHint::VSYNC); + i <= static_cast<uint32_t>(PowerHint::CAMERA_SHOT); ++i) { + hints.emplace_back(static_cast<PowerHint>(i)); + } + PowerHint badHint = static_cast<PowerHint>(0xFF); + hints.emplace_back(badHint); + + Return<void> ret; + for (auto& hint : hints) { + ret = power->powerHintAsync_1_2(hint, 30000); + ASSERT_TRUE(ret.isOk()); + + ret = power->powerHintAsync_1_2(hint, 0); + ASSERT_TRUE(ret.isOk()); + } + + // Turning these hints on in different orders triggers different code paths, + // so iterate over possible orderings. + std::vector<PowerHint> hints2 = {PowerHint::AUDIO_STREAMING, PowerHint::CAMERA_LAUNCH, + PowerHint::CAMERA_STREAMING, PowerHint::CAMERA_SHOT}; + auto compareHints = [](PowerHint l, PowerHint r) { + return static_cast<uint32_t>(l) < static_cast<uint32_t>(r); + }; + std::sort(hints2.begin(), hints2.end(), compareHints); + do { + for (auto iter = hints2.begin(); iter != hints2.end(); iter++) { + ret = power->powerHintAsync_1_2(*iter, 0); + ASSERT_TRUE(ret.isOk()); + } + for (auto iter = hints2.begin(); iter != hints2.end(); iter++) { + ret = power->powerHintAsync_1_2(*iter, 30000); + ASSERT_TRUE(ret.isOk()); + } + } while (std::next_permutation(hints2.begin(), hints2.end(), compareHints)); +} + +int main(int argc, char** argv) { + ::testing::AddGlobalTestEnvironment(PowerHidlEnvironment::Instance()); + ::testing::InitGoogleTest(&argc, argv); + PowerHidlEnvironment::Instance()->init(&argc, argv); + int status = RUN_ALL_TESTS(); + LOG(INFO) << "Test result = " << status; + return status; +} |