summaryrefslogtreecommitdiff
path: root/services/vibratorservice/benchmarks/VibratorHalControllerBenchmarks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'services/vibratorservice/benchmarks/VibratorHalControllerBenchmarks.cpp')
-rw-r--r--services/vibratorservice/benchmarks/VibratorHalControllerBenchmarks.cpp471
1 files changed, 0 insertions, 471 deletions
diff --git a/services/vibratorservice/benchmarks/VibratorHalControllerBenchmarks.cpp b/services/vibratorservice/benchmarks/VibratorHalControllerBenchmarks.cpp
deleted file mode 100644
index 53f3daf969..0000000000
--- a/services/vibratorservice/benchmarks/VibratorHalControllerBenchmarks.cpp
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- * Copyright (C) 2020 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 "PowerHalControllerBenchmarks"
-
-#include <benchmark/benchmark.h>
-#include <vibratorservice/VibratorHalController.h>
-
-using ::android::enum_range;
-using ::android::hardware::vibrator::CompositeEffect;
-using ::android::hardware::vibrator::CompositePrimitive;
-using ::android::hardware::vibrator::Effect;
-using ::android::hardware::vibrator::EffectStrength;
-using ::benchmark::Counter;
-using ::benchmark::Fixture;
-using ::benchmark::kMicrosecond;
-using ::benchmark::State;
-using ::benchmark::internal::Benchmark;
-
-using namespace android;
-using namespace std::chrono_literals;
-
-class VibratorBench : public Fixture {
-public:
- void SetUp(State& /*state*/) override { mController.init(); }
-
- void TearDown(State& state) override { turnVibratorOff(state); }
-
- static void DefaultConfig(Benchmark* b) { b->Unit(kMicrosecond); }
-
- static void DefaultArgs(Benchmark* /*b*/) {
- // none
- }
-
-protected:
- vibrator::HalController mController;
-
- auto getOtherArg(const State& state, std::size_t index) const { return state.range(index + 0); }
-
- bool hasCapabilities(vibrator::Capabilities&& query, State& state) {
- auto result = mController.getInfo().capabilities;
- if (result.isFailed()) {
- state.SkipWithError(result.errorMessage());
- return false;
- }
- if (!result.isOk()) {
- return false;
- }
- return (result.value() & query) == query;
- }
-
- void turnVibratorOff(State& state) {
- checkHalResult(halCall<void>(mController, [](auto hal) { return hal->off(); }), state);
- }
-
- template <class R>
- bool checkHalResult(const vibrator::HalResult<R>& result, State& state) {
- if (result.isFailed()) {
- state.SkipWithError(result.errorMessage());
- return false;
- }
- return true;
- }
-
- template <class R>
- vibrator::HalResult<R> halCall(vibrator::HalController& controller,
- const vibrator::HalFunction<vibrator::HalResult<R>>& halFn) {
- return controller.doWithRetry<R>(halFn, "benchmark");
- }
-};
-
-#define BENCHMARK_WRAPPER(fixt, test, code) \
- BENCHMARK_DEFINE_F(fixt, test) \
- /* NOLINTNEXTLINE */ \
- (State& state){code} BENCHMARK_REGISTER_F(fixt, test) \
- ->Apply(fixt::DefaultConfig) \
- ->Apply(fixt::DefaultArgs)
-
-BENCHMARK_WRAPPER(VibratorBench, init, {
- for (auto _ : state) {
- state.PauseTiming();
- vibrator::HalController controller;
- state.ResumeTiming();
- controller.init();
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, initCached, {
- for (auto _ : state) {
- mController.init();
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, ping, {
- for (auto _ : state) {
- state.ResumeTiming();
- auto ret = halCall<void>(mController, [](auto hal) { return hal->ping(); });
- state.PauseTiming();
- checkHalResult(ret, state);
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, tryReconnect, {
- for (auto _ : state) {
- mController.tryReconnect();
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, on, {
- auto duration = 60s;
- auto callback = []() {};
-
- for (auto _ : state) {
- state.ResumeTiming();
- auto ret =
- halCall<void>(mController, [&](auto hal) { return hal->on(duration, callback); });
- state.PauseTiming();
- if (checkHalResult(ret, state)) {
- turnVibratorOff(state);
- }
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, off, {
- auto duration = 60s;
- auto callback = []() {};
-
- for (auto _ : state) {
- state.PauseTiming();
- auto ret =
- halCall<void>(mController, [&](auto hal) { return hal->on(duration, callback); });
- if (!checkHalResult(ret, state)) {
- continue;
- }
- state.ResumeTiming();
- turnVibratorOff(state);
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, setAmplitude, {
- if (!hasCapabilities(vibrator::Capabilities::AMPLITUDE_CONTROL, state)) {
- return;
- }
-
- auto duration = 60s;
- auto callback = []() {};
- auto amplitude = 1.0f;
-
- for (auto _ : state) {
- state.PauseTiming();
- vibrator::HalController controller;
- controller.init();
- auto result =
- halCall<void>(controller, [&](auto hal) { return hal->on(duration, callback); });
- if (!checkHalResult(result, state)) {
- continue;
- }
- state.ResumeTiming();
- auto ret =
- halCall<void>(controller, [&](auto hal) { return hal->setAmplitude(amplitude); });
- state.PauseTiming();
- if (checkHalResult(ret, state)) {
- turnVibratorOff(state);
- }
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, setAmplitudeCached, {
- if (!hasCapabilities(vibrator::Capabilities::AMPLITUDE_CONTROL, state)) {
- return;
- }
-
- auto duration = 6000s;
- auto callback = []() {};
- auto amplitude = 1.0f;
-
- auto onResult =
- halCall<void>(mController, [&](auto hal) { return hal->on(duration, callback); });
- checkHalResult(onResult, state);
-
- for (auto _ : state) {
- auto ret =
- halCall<void>(mController, [&](auto hal) { return hal->setAmplitude(amplitude); });
- checkHalResult(ret, state);
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, setExternalControl, {
- if (!hasCapabilities(vibrator::Capabilities::EXTERNAL_CONTROL, state)) {
- return;
- }
-
- for (auto _ : state) {
- state.PauseTiming();
- vibrator::HalController controller;
- controller.init();
- state.ResumeTiming();
- auto ret =
- halCall<void>(controller, [](auto hal) { return hal->setExternalControl(true); });
- state.PauseTiming();
- if (checkHalResult(ret, state)) {
- auto result = halCall<void>(controller,
- [](auto hal) { return hal->setExternalControl(false); });
- checkHalResult(result, state);
- }
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, setExternalControlCached, {
- if (!hasCapabilities(vibrator::Capabilities::EXTERNAL_CONTROL, state)) {
- return;
- }
-
- for (auto _ : state) {
- state.ResumeTiming();
- auto result =
- halCall<void>(mController, [](auto hal) { return hal->setExternalControl(true); });
- state.PauseTiming();
- if (checkHalResult(result, state)) {
- auto ret = halCall<void>(mController,
- [](auto hal) { return hal->setExternalControl(false); });
- checkHalResult(ret, state);
- }
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, setExternalAmplitudeCached, {
- if (!hasCapabilities(vibrator::Capabilities::EXTERNAL_AMPLITUDE_CONTROL, state)) {
- return;
- }
-
- auto amplitude = 1.0f;
-
- auto onResult =
- halCall<void>(mController, [](auto hal) { return hal->setExternalControl(true); });
- checkHalResult(onResult, state);
-
- for (auto _ : state) {
- auto ret =
- halCall<void>(mController, [&](auto hal) { return hal->setAmplitude(amplitude); });
- checkHalResult(ret, state);
- }
-
- auto offResult =
- halCall<void>(mController, [](auto hal) { return hal->setExternalControl(false); });
- checkHalResult(offResult, state);
-});
-
-BENCHMARK_WRAPPER(VibratorBench, getInfo, {
- for (auto _ : state) {
- state.PauseTiming();
- vibrator::HalController controller;
- controller.init();
- state.ResumeTiming();
- auto result = controller.getInfo();
- checkHalResult(result.capabilities, state);
- checkHalResult(result.supportedEffects, state);
- checkHalResult(result.supportedPrimitives, state);
- checkHalResult(result.primitiveDurations, state);
- checkHalResult(result.resonantFrequency, state);
- checkHalResult(result.qFactor, state);
- }
-});
-
-BENCHMARK_WRAPPER(VibratorBench, getInfoCached, {
- // First call to cache values.
- mController.getInfo();
-
- for (auto _ : state) {
- auto result = mController.getInfo();
- checkHalResult(result.capabilities, state);
- checkHalResult(result.supportedEffects, state);
- checkHalResult(result.supportedPrimitives, state);
- checkHalResult(result.primitiveDurations, state);
- checkHalResult(result.resonantFrequency, state);
- checkHalResult(result.qFactor, state);
- }
-});
-
-class VibratorEffectsBench : public VibratorBench {
-public:
- static void DefaultArgs(Benchmark* b) {
- vibrator::HalController controller;
- auto effectsResult = controller.getInfo().supportedEffects;
- if (!effectsResult.isOk()) {
- return;
- }
-
- std::vector<Effect> supported = effectsResult.value();
- b->ArgNames({"Effect", "Strength"});
-
- if (supported.empty()) {
- b->Args({static_cast<long>(-1), static_cast<long>(-1)});
- return;
- }
-
- for (const auto& effect : enum_range<Effect>()) {
- if (std::find(supported.begin(), supported.end(), effect) == supported.end()) {
- continue;
- }
- for (const auto& strength : enum_range<EffectStrength>()) {
- b->Args({static_cast<long>(effect), static_cast<long>(strength)});
- }
- }
- }
-
-protected:
- bool hasArgs(const State& state) const { return this->getOtherArg(state, 0) >= 0; }
-
- auto getEffect(const State& state) const {
- return static_cast<Effect>(this->getOtherArg(state, 0));
- }
-
- auto getStrength(const State& state) const {
- return static_cast<EffectStrength>(this->getOtherArg(state, 1));
- }
-};
-
-BENCHMARK_WRAPPER(VibratorEffectsBench, alwaysOnEnable, {
- if (!hasCapabilities(vibrator::Capabilities::ALWAYS_ON_CONTROL, state)) {
- return;
- }
- if (!hasArgs(state)) {
- return;
- }
-
- int32_t id = 1;
- auto effect = getEffect(state);
- auto strength = getStrength(state);
-
- for (auto _ : state) {
- state.ResumeTiming();
- auto ret = halCall<void>(mController, [&](auto hal) {
- return hal->alwaysOnEnable(id, effect, strength);
- });
- state.PauseTiming();
- if (checkHalResult(ret, state)) {
- auto disableResult =
- halCall<void>(mController, [&](auto hal) { return hal->alwaysOnDisable(id); });
- checkHalResult(disableResult, state);
- }
- }
-});
-
-BENCHMARK_WRAPPER(VibratorEffectsBench, alwaysOnDisable, {
- if (!hasCapabilities(vibrator::Capabilities::ALWAYS_ON_CONTROL, state)) {
- return;
- }
- if (!hasArgs(state)) {
- return;
- }
-
- int32_t id = 1;
- auto effect = getEffect(state);
- auto strength = getStrength(state);
-
- for (auto _ : state) {
- state.PauseTiming();
- auto enableResult = halCall<void>(mController, [&](auto hal) {
- return hal->alwaysOnEnable(id, effect, strength);
- });
- if (!checkHalResult(enableResult, state)) {
- continue;
- }
- state.ResumeTiming();
- auto disableResult =
- halCall<void>(mController, [&](auto hal) { return hal->alwaysOnDisable(id); });
- checkHalResult(disableResult, state);
- }
-});
-
-BENCHMARK_WRAPPER(VibratorEffectsBench, performEffect, {
- if (!hasArgs(state)) {
- return;
- }
-
- auto effect = getEffect(state);
- auto strength = getStrength(state);
- auto callback = []() {};
-
- for (auto _ : state) {
- state.ResumeTiming();
- auto ret = halCall<std::chrono::milliseconds>(mController, [&](auto hal) {
- return hal->performEffect(effect, strength, callback);
- });
- state.PauseTiming();
- if (checkHalResult(ret, state)) {
- turnVibratorOff(state);
- }
- }
-});
-
-class VibratorPrimitivesBench : public VibratorBench {
-public:
- static void DefaultArgs(Benchmark* b) {
- vibrator::HalController controller;
- auto primitivesResult = controller.getInfo().supportedPrimitives;
- if (!primitivesResult.isOk()) {
- return;
- }
-
- std::vector<CompositePrimitive> supported = primitivesResult.value();
- b->ArgNames({"Primitive"});
-
- if (supported.empty()) {
- b->Args({static_cast<long>(-1)});
- return;
- }
-
- for (const auto& primitive : enum_range<CompositePrimitive>()) {
- if (std::find(supported.begin(), supported.end(), primitive) == supported.end()) {
- continue;
- }
- if (primitive == CompositePrimitive::NOOP) {
- continue;
- }
- b->Args({static_cast<long>(primitive)});
- }
- }
-
-protected:
- bool hasArgs(const State& state) const { return this->getOtherArg(state, 0) >= 0; }
-
- auto getPrimitive(const State& state) const {
- return static_cast<CompositePrimitive>(this->getOtherArg(state, 0));
- }
-};
-
-BENCHMARK_WRAPPER(VibratorPrimitivesBench, performComposedEffect, {
- if (!hasCapabilities(vibrator::Capabilities::COMPOSE_EFFECTS, state)) {
- return;
- }
- if (!hasArgs(state)) {
- return;
- }
-
- CompositeEffect effect;
- effect.primitive = getPrimitive(state);
- effect.scale = 1.0f;
- effect.delayMs = static_cast<int32_t>(0);
-
- std::vector<CompositeEffect> effects;
- effects.push_back(effect);
- auto callback = []() {};
-
- for (auto _ : state) {
- state.ResumeTiming();
- auto ret = halCall<std::chrono::milliseconds>(mController, [&](auto hal) {
- return hal->performComposedEffect(effects, callback);
- });
- state.PauseTiming();
- if (checkHalResult(ret, state)) {
- turnVibratorOff(state);
- }
- }
-});
-
-BENCHMARK_MAIN(); \ No newline at end of file