Merge "power hal: Add power HAL API 1.2"
This commit is contained in:
commit
6fed84a35d
5 changed files with 240 additions and 0 deletions
23
power/1.2/Android.bp
Normal file
23
power/1.2/Android.bp
Normal file
|
@ -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,
|
||||
}
|
||||
|
33
power/1.2/IPower.hal
Normal file
33
power/1.2/IPower.hal
Normal file
|
@ -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);
|
||||
};
|
59
power/1.2/types.hal
Normal file
59
power/1.2/types.hal
Normal file
|
@ -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,
|
||||
};
|
26
power/1.2/vts/functional/Android.bp
Normal file
26
power/1.2/vts/functional/Android.bp
Normal file
|
@ -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",
|
||||
],
|
||||
}
|
99
power/1.2/vts/functional/VtsHalPowerV1_2TargetTest.cpp
Normal file
99
power/1.2/vts/functional/VtsHalPowerV1_2TargetTest.cpp
Normal file
|
@ -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;
|
||||
}
|
Loading…
Reference in a new issue