/* * Copyright (c) 2022 Huawei Device Co., Ltd. * 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. */ #include #include #include #include #include #include #include #include "hdf_base.h" #include "light_type.h" #include "osal_time.h" #include "v1_0/ilight_interface.h" using namespace OHOS::HDI::Light::V1_0; using namespace testing::ext; using namespace std; namespace { constexpr int32_t ITERATION_FREQUENCY = 100; constexpr int32_t REPETITION_FREQUENCY = 3; constexpr int32_t COLORVALUE_RED = 255; constexpr int32_t COLORVALUE_GREEN = 0; constexpr int32_t COLORVALUE_BLUE = 0; constexpr uint32_t SLEEP_TIME = 3; constexpr int32_t MIN_LIGHT_ID = HDF_LIGHT_ID_BATTERY; constexpr int32_t MAX_LIGHT_ID = HDF_LIGHT_ID_ATTENTION; constexpr int32_t ON_TIME = 500; constexpr int32_t OFF_TIME = 500; sptr g_lightInterface = nullptr; class LightBenchmarkTest : public benchmark::Fixture { public: void SetUp(const ::benchmark::State &state); void TearDown(const ::benchmark::State &state); }; void LightBenchmarkTest::SetUp(const ::benchmark::State &state) { g_lightInterface = ILightInterface::Get(); } void LightBenchmarkTest::TearDown(const ::benchmark::State &state) { } /** * @tc.name: SUB_DriverSystem_LightBenchmark_GetLightInfo * @tc.desc: Benchmarktest for interface GetLightInfo * @tc.type: FUNC */ BENCHMARK_F(LightBenchmarkTest, GetLightInfo)(benchmark::State &st) { ASSERT_NE(nullptr, g_lightInterface); std::vector info; int32_t ret; for (auto _ : st) { ret = g_lightInterface->GetLightInfo(info); EXPECT_EQ(HDF_SUCCESS, ret); } for (auto iter : info) { EXPECT_GE(iter.lightId, MIN_LIGHT_ID); EXPECT_LE(iter.lightId, MAX_LIGHT_ID); } } BENCHMARK_REGISTER_F(LightBenchmarkTest, GetLightInfo)-> Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly(); /** * @tc.name: SUB_DriverSystem_LightBenchmark_TurnOnLight * @tc.desc: Benchmarktest for interface TurnOnLight * @tc.type: FUNC */ BENCHMARK_F(LightBenchmarkTest, TurnOnLight)(benchmark::State &st) { ASSERT_NE(nullptr, g_lightInterface); std::vector info; int32_t ret; ret = g_lightInterface->GetLightInfo(info); EXPECT_EQ(HDF_SUCCESS, ret); for (auto iter : info) { EXPECT_GE(iter.lightId, MIN_LIGHT_ID); EXPECT_LE(iter.lightId, MAX_LIGHT_ID); HdfLightEffect effect; effect.lightColor.colorValue.rgbColor.r = COLORVALUE_RED; effect.lightColor.colorValue.rgbColor.g = COLORVALUE_GREEN; effect.lightColor.colorValue.rgbColor.b = COLORVALUE_BLUE; effect.flashEffect.flashMode = LIGHT_FLASH_NONE; for (auto _ : st) { ret = g_lightInterface->TurnOnLight(iter.lightId, effect); EXPECT_EQ(HDF_SUCCESS, ret); } OsalMSleep(SLEEP_TIME); ret = g_lightInterface->TurnOffLight(iter.lightId); EXPECT_EQ(HDF_SUCCESS, ret); } } BENCHMARK_REGISTER_F(LightBenchmarkTest, TurnOnLight)-> Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly(); /** * @tc.name: SUB_DriverSystem_LightBenchmark_TurnOffLight * @tc.desc: Benchmarktest for interface TurnOffLight * @tc.type: FUNC */ BENCHMARK_F(LightBenchmarkTest, TurnOffLight)(benchmark::State &st) { ASSERT_NE(nullptr, g_lightInterface); std::vector info; int32_t ret; ret = g_lightInterface->GetLightInfo(info); EXPECT_EQ(HDF_SUCCESS, ret); for (auto iter : info) { EXPECT_GE(iter.lightId, MIN_LIGHT_ID); EXPECT_LE(iter.lightId, MAX_LIGHT_ID); HdfLightEffect effect; effect.lightColor.colorValue.rgbColor.r = COLORVALUE_RED; effect.lightColor.colorValue.rgbColor.g = COLORVALUE_GREEN; effect.lightColor.colorValue.rgbColor.b = COLORVALUE_BLUE; effect.flashEffect.flashMode = LIGHT_FLASH_BLINK; effect.flashEffect.onTime = ON_TIME; effect.flashEffect.offTime = OFF_TIME; ret = g_lightInterface->TurnOnLight(iter.lightId, effect); EXPECT_EQ(HDF_SUCCESS, ret); OsalMSleep(SLEEP_TIME); for (auto _ : st) { ret = g_lightInterface->TurnOffLight(iter.lightId); EXPECT_EQ(HDF_SUCCESS, ret); } } } BENCHMARK_REGISTER_F(LightBenchmarkTest, TurnOffLight)-> Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly(); /** * @tc.name: SUB_DriverSystem_LightBenchmark_TurnOnMultiLights * @tc.desc: Benchmarktest for interface TurnOnMultiLights * @tc.type: FUNC */ BENCHMARK_F(LightBenchmarkTest, TurnOnMultiLights)(benchmark::State &st) { ASSERT_NE(nullptr, g_lightInterface); std::vector info; int32_t ret; ret = g_lightInterface->GetLightInfo(info); EXPECT_EQ(0, ret); for (auto iter : info) { EXPECT_GE(iter.lightId, MIN_LIGHT_ID); EXPECT_LE(iter.lightId, MAX_LIGHT_ID); std::vector lightColor; struct HdfLightColor light; light.colorValue.rgbColor.b = COLORVALUE_BLUE; lightColor.push_back(light); for (auto _ : st) { ret = g_lightInterface->TurnOnMultiLights(iter.lightId, lightColor); EXPECT_EQ(HDF_SUCCESS, ret); } } } BENCHMARK_REGISTER_F(LightBenchmarkTest, TurnOnMultiLights)-> Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly(); } BENCHMARK_MAIN();