* 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 <benchmark/benchmark.h>
#include <cmath>
#include <cstdio>
#include <gtest/gtest.h>
#include <securec.h>
#include <string>
#include <vector>
#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<ILightInterface> 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<HdfLightInfo> 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<HdfLightInfo> 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<HdfLightInfo> 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<HdfLightInfo> 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<HdfLightColor> 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();