1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "hdf_log.h" 17#include "usbd_function.h" 18#include "usbd_port.h" 19#include <benchmark/benchmark.h> 20#include <gtest/gtest.h> 21 22using namespace benchmark::internal; 23using namespace OHOS; 24using namespace std; 25using namespace OHOS::HDI::Usb::V1_0; 26 27namespace { 28sptr<IUsbInterface> g_usbInterface = nullptr; 29 30constexpr int32_t SLEEP_TIME = 3; 31constexpr int32_t ITERATION_FREQUENCY = 100; 32constexpr int32_t REPETITION_FREQUENCY = 3; 33 34class UsbBenchmarkFunctionTest : public benchmark::Fixture { 35public: 36 void SetUp(const ::benchmark::State &state); 37 void TearDown(const ::benchmark::State &state); 38}; 39 40int32_t SwitchErrCode(int32_t ret) 41{ 42 return ret == HDF_ERR_NOT_SUPPORT ? HDF_SUCCESS : ret; 43} 44 45void UsbBenchmarkFunctionTest::SetUp(const ::benchmark::State &state) 46{ 47 g_usbInterface = IUsbInterface::Get(); 48 ASSERT_NE(g_usbInterface, nullptr); 49 auto ret = g_usbInterface->SetPortRole(DEFAULT_PORT_ID, POWER_ROLE_SINK, DATA_ROLE_DEVICE); 50 sleep(SLEEP_TIME); 51 ret = SwitchErrCode(ret); 52 ASSERT_EQ(0, ret); 53} 54 55void UsbBenchmarkFunctionTest::TearDown(const ::benchmark::State& state) {} 56 57/** 58 * @tc.name: GetCurrentFunctions 59 * @tc.desc: Test functions to GetCurrentFunctions benchmark test 60 * @tc.desc: int32_t GetCurrentFunctions(int32_t &funcs); 61 * @tc.desc: Positive test: parameters correctly 62 * @tc.type: FUNC 63 */ 64BENCHMARK_F(UsbBenchmarkFunctionTest, GetCurrentFunctions)(benchmark::State &state) 65{ 66 ASSERT_TRUE(g_usbInterface != nullptr); 67 auto ret = 0; 68 int32_t funcs = USB_FUNCTION_NONE; 69 for (auto _ : state) { 70 ret = g_usbInterface->GetCurrentFunctions(funcs); 71 } 72 ASSERT_EQ(0, ret); 73} 74 75BENCHMARK_REGISTER_F(UsbBenchmarkFunctionTest, GetCurrentFunctions)-> 76 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly(); 77 78/** 79 * @tc.name: SetCurrentFunctions 80 * @tc.desc: Test functions to SetCurrentFunctions benchmark test 81 * @tc.desc: int32_t SetCurrentFunctions(int32_t funcs) 82 * @tc.desc: Positive test: parameters correctly 83 * @tc.type: FUNC 84 */ 85BENCHMARK_F(UsbBenchmarkFunctionTest, SetCurrentFunctions)(benchmark::State &state) 86{ 87 ASSERT_TRUE(g_usbInterface != nullptr); 88 auto ret = 0; 89 for (auto _ : state) { 90 ret = g_usbInterface->SetCurrentFunctions(USB_FUNCTION_ACM); 91 } 92 ASSERT_EQ(0, ret); 93} 94 95BENCHMARK_REGISTER_F(UsbBenchmarkFunctionTest, SetCurrentFunctions)-> 96 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly(); 97 98/** 99 * @tc.name: SetPortRole 100 * @tc.desc: Test functions to SetPortRole benchmark test 101 * @tc.desc: int32_t SetPortRole(int32_t portId,int32_t powerRole,int32_t dataRole) 102 * @tc.desc: Positive test: parameters correctly 103 * @tc.type: FUNC 104 */ 105BENCHMARK_F(UsbBenchmarkFunctionTest, SetPortRole)(benchmark::State &state) 106{ 107 ASSERT_TRUE(g_usbInterface != nullptr); 108 auto ret = 0; 109 for (auto _ : state) { 110 ret = g_usbInterface->SetPortRole(DEFAULT_PORT_ID, POWER_ROLE_SOURCE, DATA_ROLE_HOST); 111 } 112 ret = SwitchErrCode(ret); 113 ASSERT_EQ(0, ret); 114} 115 116BENCHMARK_REGISTER_F(UsbBenchmarkFunctionTest, SetPortRole)-> 117 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly(); 118 119/** 120 * @tc.name: QueryPort 121 * @tc.desc: Test functions to QueryPort benchmark test 122 * @tc.desc: int32_t QueryPort(int32_t &portId, int32_t &powerRole, int32_t &dataRole, int32_t &mode); 123 * @tc.desc: Positive test: parameters correctly 124 * @tc.type: FUNC 125 */ 126 127BENCHMARK_F(UsbBenchmarkFunctionTest, QueryPort)(benchmark::State &state) 128{ 129 ASSERT_TRUE(g_usbInterface != nullptr); 130 int32_t portId = DEFAULT_PORT_ID; 131 int32_t powerRole = POWER_ROLE_NONE; 132 int32_t dataRole = DATA_ROLE_NONE; 133 int32_t mode = PORT_MODE_NONE; 134 auto ret = 0; 135 for (auto _ : state) { 136 ret = g_usbInterface->QueryPort(portId, powerRole, dataRole, mode); 137 } 138 ASSERT_EQ(0, ret); 139} 140 141BENCHMARK_REGISTER_F(UsbBenchmarkFunctionTest, QueryPort)-> 142 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly(); 143} 144 145BENCHMARK_MAIN(); 146