• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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