summaryrefslogtreecommitdiffstats
path: root/power
diff options
context:
space:
mode:
authorWei Wang <wvw@google.com>2017-11-16 16:02:54 -0800
committerWei Wang <wvw@google.com>2017-12-01 16:04:57 -0800
commit2e687c25bcccd57789e508591194e7d24ab5646d (patch)
tree1191c243ac329c10504743d70dc4418c994f5010 /power
parent5ca6f514ebd3c5401af380b28ec4efe9bc783f9d (diff)
downloadandroid_hardware_interfaces-2e687c25bcccd57789e508591194e7d24ab5646d.tar.gz
android_hardware_interfaces-2e687c25bcccd57789e508591194e7d24ab5646d.tar.bz2
android_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')
-rw-r--r--power/1.2/Android.bp23
-rw-r--r--power/1.2/IPower.hal33
-rw-r--r--power/1.2/types.hal59
-rw-r--r--power/1.2/vts/functional/Android.bp26
-rw-r--r--power/1.2/vts/functional/VtsHalPowerV1_2TargetTest.cpp99
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 000000000..0eb73e7a4
--- /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 000000000..1c2c7b85a
--- /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 000000000..f7a6cf687
--- /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 000000000..d615e85a7
--- /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 000000000..5e929971f
--- /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;
+}