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 <benchmark/benchmark.h>
17 #include <gtest/gtest.h>
18 #include <iostream>
19 #include <string>
20 #include <vector>
21 #include "hdf_log.h"
22 #include "securec.h"
23 #include "usbd_port.h"
24 #include "usbd_function.h"
25 #include "UsbSubscriberTest.h"
26 #include "v1_0/iusb_interface.h"
27 #include "v1_0/usb_types.h"
28
29 using namespace benchmark::internal;
30 using namespace OHOS;
31 using namespace std;
32 using namespace OHOS::USB;
33 using namespace OHOS::HDI::Usb::V1_0;
34
35 namespace {
36 sptr<IUsbInterface> g_usbInterface = nullptr;
37 struct UsbDev g_dev = {0, 0};
38 const int SLEEP_TIME = 3;
39 const uint8_t INTERFACEID_OK = 1;
40 const uint32_t MAX_BUFFER_LENGTH = 255;
41 const int32_t TRANSFER_TIME_OUT = 1000;
42 const int32_t ASHMEM_MAX_SIZE = 1024;
43 const uint8_t SAMPLE_DATA_1 = 1;
44 const uint8_t SAMPLE_DATA_2 = 2;
45 const uint8_t SAMPLE_DATA_3 = 3;
46 constexpr int32_t ITERATION_FREQUENCY = 100;
47 constexpr int32_t REPETITION_FREQUENCY = 3;
48 constexpr int32_t ITERATION_READ_FREQUENCY = 10;
49 constexpr int32_t ITERATION_WRITE_FREQUENCY = 20;
50 // data interface have 2 point : 1->bulk_out 2->bulk_in
51 const uint8_t POINTID_BULK_IN = USB_ENDPOINT_DIR_IN | 2;
52 const uint8_t POINTID_BULK_OUT = USB_ENDPOINT_DIR_OUT | 1;
53
54 class HdfUsbdBenchmarkTransferTest : public benchmark::Fixture {
55 public:
56 void SetUp(const ::benchmark::State &state);
57 void TearDown(const ::benchmark::State &state);
58 void InitPara(const sptr<UsbSubscriberTest> &subscriber);
59 void ReleasePara(const sptr<UsbSubscriberTest> &subscriber);
60 };
61
62 class UsbdBulkCallbackTest : public OHOS::HDI::Usb::V1_0::IUsbdBulkCallback {
63 public:
64 UsbdBulkCallbackTest() = default;
65 ~UsbdBulkCallbackTest() = default;
OnBulkWriteCallback(int32_t status,int32_t actLength)66 int32_t OnBulkWriteCallback(int32_t status, int32_t actLength) override
67 {
68 return 0;
69 };
OnBulkReadCallback(int32_t status,int32_t actLength)70 int32_t OnBulkReadCallback(int32_t status, int32_t actLength) override
71 {
72 return 0;
73 };
74 };
75
InitAshmemOne(sptr<Ashmem> & asmptr,int32_t asmSize,uint8_t rflg)76 int32_t InitAshmemOne(sptr<Ashmem>& asmptr, int32_t asmSize, uint8_t rflg)
77 {
78 asmptr = Ashmem::CreateAshmem("ttashmem000", asmSize);
79 if (asmptr == nullptr) {
80 return HDF_FAILURE;
81 }
82
83 asmptr->MapReadAndWriteAshmem();
84
85 if (rflg == 0) {
86 uint8_t tdata[ASHMEM_MAX_SIZE];
87 int32_t offset = 0;
88 int32_t tlen = 0;
89
90 int32_t retSafe = memset_s(tdata, sizeof(tdata), 'Y', ASHMEM_MAX_SIZE);
91 if (retSafe != EOK) {
92 return HDF_FAILURE;
93 }
94 while (offset < asmSize) {
95 tlen = (asmSize - offset) < ASHMEM_MAX_SIZE ? (asmSize - offset) : ASHMEM_MAX_SIZE;
96 asmptr->WriteToAshmem(tdata, tlen, offset);
97 offset += tlen;
98 }
99 }
100 return HDF_SUCCESS;
101 }
102
SwitchErrCode(int32_t ret)103 int32_t SwitchErrCode(int32_t ret)
104 {
105 return ret == HDF_ERR_NOT_SUPPORT ? HDF_SUCCESS : ret;
106 }
107
SetUp(const::benchmark::State & state)108 void HdfUsbdBenchmarkTransferTest::SetUp(const ::benchmark::State& state)
109 {
110 g_usbInterface = IUsbInterface::Get();
111 ASSERT_NE(g_usbInterface, nullptr);
112 auto ret = g_usbInterface->SetPortRole(DEFAULT_PORT_ID, POWER_ROLE_SOURCE, DATA_ROLE_HOST);
113 sleep(SLEEP_TIME);
114 ret = SwitchErrCode(ret);
115 EXPECT_EQ(0, ret);
116 }
117
TearDown(const::benchmark::State & state)118 void HdfUsbdBenchmarkTransferTest::TearDown(const ::benchmark::State& state)
119 {}
120
InitPara(const sptr<UsbSubscriberTest> & subscriber)121 void HdfUsbdBenchmarkTransferTest::InitPara(const sptr<UsbSubscriberTest> &subscriber)
122 {
123 if (g_usbInterface->BindUsbdSubscriber(subscriber) != HDF_SUCCESS) {
124 HDF_LOGW("HdfUsbdBenchmarkRequestTest::bind usbdsubscriber fail");
125 }
126 g_dev = {subscriber->busNum_, subscriber->devAddr_};
127 auto ret = g_usbInterface->OpenDevice(g_dev);
128 EXPECT_EQ(0, ret);
129 }
130
ReleasePara(const sptr<UsbSubscriberTest> & subscriber)131 void HdfUsbdBenchmarkTransferTest::ReleasePara(const sptr<UsbSubscriberTest> &subscriber)
132 {
133 ASSERT_TRUE(g_usbInterface != nullptr);
134 auto ret = g_usbInterface->UnbindUsbdSubscriber(subscriber);
135 EXPECT_EQ(0, ret);
136 ret = g_usbInterface->CloseDevice(g_dev);
137 EXPECT_EQ(0, ret);
138 }
139
140 /**
141 * @tc.name: ControlTransferRead
142 * @tc.desc: Benchmark test
143 * @tc.desc: Test functions to ControlTransferRead(const UsbDev &dev, UsbCtrlTransfer &ctrl,
144 * std::vector<uint8_t> &data);
145 * @tc.desc: Positive test: parameters correctly, standard request: get configuration
146 * @tc.type: FUNC
147 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,ControlTransferRead)148 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, ControlTransferRead)(benchmark::State& state)
149 {
150 ASSERT_TRUE(g_usbInterface != nullptr);
151 int32_t ret;
152 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
153 ASSERT_TRUE(subscriber != nullptr);
154 InitPara(subscriber);
155 std::vector<uint8_t> bufferData(MAX_BUFFER_LENGTH);
156 struct UsbCtrlTransfer ctrlparmas = {USB_ENDPOINT_DIR_IN, USB_DDK_REQ_GET_CONFIGURATION, 0, 0, TRANSFER_TIME_OUT};
157 for (auto _ : state) {
158 ret = g_usbInterface->ControlTransferRead(g_dev, ctrlparmas, bufferData);
159 }
160 EXPECT_EQ(0, ret);
161 ReleasePara(subscriber);
162 }
163
164 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, ControlTransferRead)->
165 Iterations(ITERATION_READ_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
166
167 /**
168 * @tc.name: ControlTransferWrite
169 * @tc.desc: Benchmark test
170 * @tc.desc: Test functions to ControlTransferWrite(const UsbDev &dev, UsbCtrlTransfer &ctrl,
171 * std::vector<uint8_t> &data);
172 * @tc.desc: Positive test: parameters correctly
173 * @tc.type: FUNC
174 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,ControlTransferWrite)175 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, ControlTransferWrite)(benchmark::State& state)
176 {
177 ASSERT_TRUE(g_usbInterface != nullptr);
178 int32_t ret;
179 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
180 ASSERT_TRUE(subscriber != nullptr);
181 InitPara(subscriber);
182 std::vector<uint8_t> bufferData(MAX_BUFFER_LENGTH);
183 bufferData.push_back(SAMPLE_DATA_1);
184 bufferData.push_back(SAMPLE_DATA_2);
185 bufferData.push_back(SAMPLE_DATA_3);
186 struct UsbCtrlTransfer ctrlparmas = {USB_ENDPOINT_DIR_OUT | USB_REQUEST_TARGET_INTERFACE,
187 USB_DDK_REQ_GET_CONFIGURATION, 0, 0, TRANSFER_TIME_OUT};
188 for (auto _ : state) {
189 ret = g_usbInterface->ControlTransferWrite(g_dev, ctrlparmas, bufferData);
190 }
191 EXPECT_EQ(0, ret);
192 ReleasePara(subscriber);
193 }
194 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, ControlTransferWrite)->
195 Iterations(ITERATION_WRITE_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
196
197 /**
198 * @tc.name: BulkTransferRead
199 * @tc.desc: Benchmark test
200 * @tc.desc: Test functions to BulkTransferRead(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout,
201 * std::vector<uint8_t> &data);
202 * @tc.desc: Positive test: parameters correctly
203 * @tc.type: FUNC
204 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,BulkTransferRead)205 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, BulkTransferRead)(benchmark::State& state)
206 {
207 ASSERT_TRUE(g_usbInterface != nullptr);
208 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
209 ASSERT_TRUE(subscriber != nullptr);
210 InitPara(subscriber);
211 uint8_t interfaceId = INTERFACEID_OK;
212 uint8_t pointid = POINTID_BULK_IN;
213 auto ret = g_usbInterface->ClaimInterface(g_dev, interfaceId, 1);
214 EXPECT_EQ(0, ret);
215 OHOS::HDI::Usb::V1_0::UsbPipe pipe = {interfaceId, pointid};
216 std::vector<uint8_t> bufferData(MAX_BUFFER_LENGTH);
217 for (auto _ : state) {
218 ret = g_usbInterface->BulkTransferRead(g_dev, pipe, TRANSFER_TIME_OUT, bufferData);
219 }
220 EXPECT_EQ(0, ret);
221 ReleasePara(subscriber);
222 }
223
224 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, BulkTransferRead)->
225 Iterations(ITERATION_READ_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
226
227 /**
228 * @tc.name: BulkTransferWrite
229 * @tc.desc: Benchmark test
230 * @tc.desc: Test functions to BulkTransferWrite(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout,
231 * std::vector<uint8_t> &data);
232 * @tc.desc: Positive test: parameters correctly
233 * @tc.type: FUNC
234 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,BulkTransferWrite)235 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, BulkTransferWrite)(benchmark::State& state)
236 {
237 ASSERT_TRUE(g_usbInterface != nullptr);
238 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
239 ASSERT_TRUE(subscriber != nullptr);
240 InitPara(subscriber);
241 uint8_t interfaceId = INTERFACEID_OK;
242 uint8_t pointid = POINTID_BULK_OUT;
243 auto ret = g_usbInterface->ClaimInterface(g_dev, interfaceId, 1);
244 EXPECT_EQ(0, ret);
245 OHOS::HDI::Usb::V1_0::UsbPipe pipe = {interfaceId, pointid};
246 std::vector<uint8_t> bufferData = {'b', 'u', 'l', 'k', 'w', 'r', 'i', 't', 'e', '0', '1'};
247 for (auto _ : state) {
248 ret = g_usbInterface->BulkTransferWrite(g_dev, pipe, TRANSFER_TIME_OUT, bufferData);
249 }
250 EXPECT_EQ(0, ret);
251 ReleasePara(subscriber);
252 }
253
254 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, BulkTransferWrite)->
255 Iterations(ITERATION_WRITE_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
256
257 /**
258 * @tc.name: InterruptTransferRead
259 * @tc.desc: Benchmark test
260 * @tc.desc: Test functions to InterruptTransferRead(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout,
261 * std::vector<uint8_t> &data);
262 * @tc.desc: Positive test: parameters correctly
263 * @tc.type: FUNC
264 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,InterruptTransferRead)265 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, InterruptTransferRead)(benchmark::State& state)
266 {
267 ASSERT_TRUE(g_usbInterface != nullptr);
268 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
269 ASSERT_TRUE(subscriber != nullptr);
270 InitPara(subscriber);
271 uint8_t interfaceId = INTERFACEID_OK;
272 uint8_t pointid = POINTID_BULK_IN;
273 auto ret = g_usbInterface->ClaimInterface(g_dev, interfaceId, 1);
274 EXPECT_EQ(0, ret);
275 OHOS::HDI::Usb::V1_0::UsbPipe pipe = {interfaceId, pointid};
276 std::vector<uint8_t> bufferData(MAX_BUFFER_LENGTH);
277 for (auto _ : state) {
278 ret = g_usbInterface->InterruptTransferRead(g_dev, pipe, TRANSFER_TIME_OUT, bufferData);
279 }
280 EXPECT_EQ(0, ret);
281 ReleasePara(subscriber);
282 }
283
284 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, InterruptTransferRead)->
285 Iterations(ITERATION_READ_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
286 /**
287 * @tc.name: InterruptTransferWrite
288 * @tc.desc: Benchmark test
289 * @tc.desc: Test functions to InterruptTransferWrite(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout,
290 * std::vector<uint8_t> &data);
291 * @tc.desc: Positive test: parameters correctly
292 * @tc.type: FUNC
293 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,InterruptTransferWrite)294 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, InterruptTransferWrite)(benchmark::State& state)
295 {
296 ASSERT_TRUE(g_usbInterface != nullptr);
297 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
298 ASSERT_TRUE(subscriber != nullptr);
299 InitPara(subscriber);
300 uint8_t interfaceId = INTERFACEID_OK;
301 uint8_t pointid = POINTID_BULK_OUT;
302 auto ret = g_usbInterface->ClaimInterface(g_dev, interfaceId, 1);
303 EXPECT_EQ(0, ret);
304 OHOS::HDI::Usb::V1_0::UsbPipe pipe = {interfaceId, pointid};
305 std::vector<uint8_t> bufferData = {'i', 'n', 't', 'w', 'r', 'i', 't', 'e', '0', '1'};
306 for (auto _ : state) {
307 ret = g_usbInterface->InterruptTransferWrite(g_dev, pipe, TRANSFER_TIME_OUT, bufferData);
308 }
309 EXPECT_EQ(0, ret);
310 ReleasePara(subscriber);
311 }
312
313 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, InterruptTransferWrite)->
314 Iterations(ITERATION_WRITE_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
315 /**
316 * @tc.name: IsoTransferRead
317 * @tc.desc: Benchmark test
318 * @tc.desc: Test functions to IsoTransferRead(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout,
319 * std::vector<uint8_t> &data);
320 * @tc.desc: Positive test: parameters correctly
321 * @tc.type: FUNC
322 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,IsoTransferRead)323 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, IsoTransferRead)(benchmark::State& state)
324 {
325 ASSERT_TRUE(g_usbInterface != nullptr);
326 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
327 ASSERT_TRUE(subscriber != nullptr);
328 InitPara(subscriber);
329 uint8_t interfaceId = INTERFACEID_OK;
330 uint8_t pointid = POINTID_BULK_IN;
331 auto ret = g_usbInterface->ClaimInterface(g_dev, interfaceId, 1);
332 EXPECT_EQ(0, ret);
333 OHOS::HDI::Usb::V1_0::UsbPipe pipe = {interfaceId, pointid};
334 std::vector<uint8_t> bufferData(MAX_BUFFER_LENGTH);
335 for (auto _ : state) {
336 ret = g_usbInterface->IsoTransferRead(g_dev, pipe, TRANSFER_TIME_OUT, bufferData);
337 }
338 EXPECT_EQ(0, ret);
339 ReleasePara(subscriber);
340 }
341
342 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, IsoTransferRead)->
343 Iterations(ITERATION_READ_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
344 /**
345 * @tc.name: IsoTransferWrite
346 * @tc.desc: Benchmark test
347 * @tc.desc: Test functions to IsoTransferWrite(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout,
348 * std::vector<uint8_t> &data);
349 * @tc.desc: Positive test: parameters correctly
350 * @tc.type: FUNC
351 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,IsoTransferWrite)352 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, IsoTransferWrite)(benchmark::State& state)
353 {
354 ASSERT_TRUE(g_usbInterface != nullptr);
355 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
356 ASSERT_TRUE(subscriber != nullptr);
357 InitPara(subscriber);
358 uint8_t interfaceId = INTERFACEID_OK;
359 uint8_t pointid = POINTID_BULK_OUT;
360 auto ret = g_usbInterface->ClaimInterface(g_dev, interfaceId, 1);
361 EXPECT_EQ(0, ret);
362 OHOS::HDI::Usb::V1_0::UsbPipe pipe = {interfaceId, pointid};
363 std::vector<uint8_t> bufferData = {'i', 's', 'o', 'w', 'r', 'i', 't', 'e', '0', '1'};
364 for (auto _ : state) {
365 ret = g_usbInterface->IsoTransferWrite(g_dev, pipe, TRANSFER_TIME_OUT, bufferData);
366 }
367 EXPECT_EQ(0, ret);
368 ReleasePara(subscriber);
369 }
370
371 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, IsoTransferWrite)->
372 Iterations(ITERATION_WRITE_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
373
374 /**
375 * @tc.name: BulkRead
376 * @tc.desc: Benchmark test
377 * @tc.desc: Test functions to int32_t BulkRead(const UsbDev &dev, const UsbPipe &pipe, const sptr<Ashmem> &ashmem)
378 * @tc.desc: Positive test: parameters correctly
379 * @tc.type: FUNC
380 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,BulkRead)381 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, BulkRead)(benchmark::State& state)
382 {
383 ASSERT_TRUE(g_usbInterface != nullptr);
384 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
385 ASSERT_TRUE(subscriber != nullptr);
386 InitPara(subscriber);
387 sptr<Ashmem> ashmem;
388 uint8_t rflg = 0;
389 int32_t asmSize = MAX_BUFFER_LENGTH;
390 uint8_t interfaceId = INTERFACEID_OK;
391 uint8_t pointid = POINTID_BULK_IN;
392 auto ret = g_usbInterface->ClaimInterface(g_dev, interfaceId, 1);
393 EXPECT_EQ(0, ret);
394 OHOS::HDI::Usb::V1_0::UsbPipe pipe = {interfaceId, pointid};
395 (void)InitAshmemOne(ashmem, asmSize, rflg);
396 for (auto _ : state) {
397 ret = g_usbInterface->BulkRead(g_dev, pipe, ashmem);
398 }
399 EXPECT_EQ(ret, 0);
400 ReleasePara(subscriber);
401 }
402
403 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, BulkRead)->
404 Iterations(ITERATION_READ_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
405
406 /**
407 * @tc.name: BulkWrite
408 * @tc.desc: Benchmark test
409 * @tc.desc: Test functions to int32_t BulkWrite(const UsbDev &dev, const UsbPipe &pipe, const sptr<Ashmem> &ashmem)
410 * @tc.desc: Positive test: parameters correctly
411 * @tc.type: FUNC
412 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,BulkWrite)413 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, BulkWrite)(benchmark::State& state)
414 {
415 ASSERT_TRUE(g_usbInterface != nullptr);
416 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
417 ASSERT_TRUE(subscriber != nullptr);
418 InitPara(subscriber);
419 sptr<Ashmem> ashmem;
420 uint8_t rflg = 0;
421 int32_t asmSize = MAX_BUFFER_LENGTH;
422 uint8_t interfaceId = INTERFACEID_OK;
423 uint8_t pointid = POINTID_BULK_IN;
424 auto ret = g_usbInterface->ClaimInterface(g_dev, interfaceId, 1);
425 EXPECT_EQ(0, ret);
426 OHOS::HDI::Usb::V1_0::UsbPipe pipe = {interfaceId, pointid};
427 (void)InitAshmemOne(ashmem, asmSize, rflg);
428 for (auto _ : state) {
429 ret = g_usbInterface->BulkWrite(g_dev, pipe, ashmem);
430 }
431 EXPECT_EQ(ret, 0);
432 ReleasePara(subscriber);
433 }
434
435 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, BulkWrite)->
436 Iterations(ITERATION_WRITE_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
437
438 /**
439 * @tc.name: RegBulkCallback
440 * @tc.desc: Benchmark test
441 * @tc.desc: int32_t RegBulkCallback(const UsbDev &dev, const UsbPipe &pipe, const sptr<IUsbdBulkCallback> &cb)
442 * @tc.desc: Positive test: parameters correctly
443 * @tc.type: FUNC
444 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,RegBulkCallback)445 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, RegBulkCallback)(benchmark::State& state)
446 {
447 ASSERT_TRUE(g_usbInterface != nullptr);
448 int32_t ret;
449 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
450 ASSERT_TRUE(subscriber != nullptr);
451 InitPara(subscriber);
452 uint8_t interfaceId = INTERFACEID_OK;
453 uint8_t pointid = POINTID_BULK_OUT;
454 OHOS::HDI::Usb::V1_0::UsbPipe pipe = {interfaceId, pointid};
455 sptr<UsbdBulkCallbackTest> usbdBulkCallback = new UsbdBulkCallbackTest();
456 ASSERT_TRUE(usbdBulkCallback != nullptr);
457 for (auto _ : state) {
458 ret = g_usbInterface->RegBulkCallback(g_dev, pipe, usbdBulkCallback);
459 }
460 EXPECT_EQ(ret, 0);
461 ReleasePara(subscriber);
462 }
463
464 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, RegBulkCallback)->
465 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
466
467 /**
468 * @tc.name: UnRegBulkCallback
469 * @tc.desc: Benchmark test
470 * @tc.desc: Test functions to int32_t UnRegBulkCallback(const UsbDev &dev, const UsbPipe &pipe)
471 * @tc.desc: Positive test: parameters correctly
472 * @tc.type: FUNC
473 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,UnRegBulkCallback)474 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, UnRegBulkCallback)(benchmark::State& state)
475 {
476 ASSERT_TRUE(g_usbInterface != nullptr);
477 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
478 ASSERT_TRUE(subscriber != nullptr);
479 InitPara(subscriber);
480 uint8_t interfaceId = INTERFACEID_OK;
481 uint8_t pointid = POINTID_BULK_OUT;
482 OHOS::HDI::Usb::V1_0::UsbPipe pipe = {interfaceId, pointid};
483 sptr<UsbdBulkCallbackTest> usbdBulkCallback = new UsbdBulkCallbackTest();
484 ASSERT_TRUE(usbdBulkCallback != nullptr);
485 auto ret = g_usbInterface->RegBulkCallback(g_dev, pipe, usbdBulkCallback);
486 EXPECT_EQ(ret, 0);
487 for (auto _ : state) {
488 ret = g_usbInterface->UnRegBulkCallback(g_dev, pipe);
489 }
490 EXPECT_EQ(ret, 0);
491 ReleasePara(subscriber);
492 }
493
494 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, UnRegBulkCallback)->
495 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
496
497 /**
498 * @tc.name: BindUsbdSubscriber
499 * @tc.desc: Benchmark test
500 * @tc.desc: Test functions to int32_t BindUsbdSubscriber(const sptr<IUsbdSubscriber> &subscriber)
501 * @tc.desc: Positive test: parameters correctly
502 * @tc.type: FUNC
503 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,BindUsbdSubscriber)504 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, BindUsbdSubscriber)(benchmark::State& state)
505 {
506 ASSERT_TRUE(g_usbInterface != nullptr);
507 int32_t ret;
508 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
509 ASSERT_TRUE(subscriber != nullptr);
510 InitPara(subscriber);
511 for (auto _ : state) {
512 ret = g_usbInterface->BindUsbdSubscriber(subscriber);
513 }
514 EXPECT_EQ(0, ret);
515 ReleasePara(subscriber);
516 }
517
518 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, BindUsbdSubscriber)->
519 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
520 /**
521 * @tc.name: UnbindUsbdSubscriber
522 * @tc.desc: Benchmark test
523 * @tc.desc: Test functions to int32_t UnbindUsbdSubscriber(const sptr<IUsbdSubscriber> &subscriber)
524 * @tc.desc: Positive test: parameters correctly
525 * @tc.type: FUNC
526 */
BENCHMARK_F(HdfUsbdBenchmarkTransferTest,UnbindUsbdSubscriber)527 BENCHMARK_F(HdfUsbdBenchmarkTransferTest, UnbindUsbdSubscriber)(benchmark::State& state)
528 {
529 ASSERT_TRUE(g_usbInterface != nullptr);
530 sptr<UsbSubscriberTest> subscriber = new UsbSubscriberTest();
531 ASSERT_NE(subscriber, nullptr);
532 if (g_usbInterface->BindUsbdSubscriber(subscriber) != HDF_SUCCESS) {
533 HDF_LOGW("%{public}s: bind usbd subscriber failed\n", __func__);
534 }
535 g_dev = {subscriber->busNum_, subscriber->devAddr_};
536 auto ret = g_usbInterface->OpenDevice(g_dev);
537 EXPECT_EQ(ret, 0);
538 for (auto _ : state) {
539 ret = g_usbInterface->UnbindUsbdSubscriber(subscriber);
540 }
541 ret = g_usbInterface->CloseDevice(g_dev);
542 EXPECT_EQ(0, ret);
543 }
544
545 BENCHMARK_REGISTER_F(HdfUsbdBenchmarkTransferTest, UnbindUsbdSubscriber)->
546 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
547 } // namespace
548
549 BENCHMARK_MAIN();
550