1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#include <benchmark/benchmark.h>
17094332d3Sopenharmony_ci#include <climits>
18094332d3Sopenharmony_ci#include <gtest/gtest.h>
19094332d3Sopenharmony_ci#include "hdf_base.h"
20094332d3Sopenharmony_ci#include "osal_mem.h"
21094332d3Sopenharmony_ci#include "v4_0/iaudio_manager.h"
22094332d3Sopenharmony_ci
23094332d3Sopenharmony_ciusing namespace testing::ext;
24094332d3Sopenharmony_ciusing namespace std;
25094332d3Sopenharmony_ci
26094332d3Sopenharmony_ci#define AUDIO_CHANNELCOUNT             2
27094332d3Sopenharmony_ci#define AUDIO_SAMPLE_RATE_48K          48000
28094332d3Sopenharmony_ci#define DEEP_BUFFER_RENDER_PERIOD_SIZE 4096
29094332d3Sopenharmony_ci#define INT_32_MAX                     0x7fffffff
30094332d3Sopenharmony_ci#define PCM_16_BIT                     16
31094332d3Sopenharmony_ci#define PCM_8_BIT                      8
32094332d3Sopenharmony_ci
33094332d3Sopenharmony_cinamespace {
34094332d3Sopenharmony_cistatic const uint32_t g_audioAdapterNumMax = 5;
35094332d3Sopenharmony_ciconst int32_t AUDIO_ADAPTER_BUF_TEST = 1024;
36094332d3Sopenharmony_ciconst int32_t ITERATION_FREQUENCY = 100;
37094332d3Sopenharmony_ciconst int32_t REPETITION_FREQUENCY = 3;
38094332d3Sopenharmony_ci
39094332d3Sopenharmony_ciclass AudioAdapterBenchmarkTest : public benchmark::Fixture {
40094332d3Sopenharmony_cipublic:
41094332d3Sopenharmony_ci    struct IAudioManager *manager_ = nullptr;
42094332d3Sopenharmony_ci    struct IAudioAdapter *adapter_ = nullptr;
43094332d3Sopenharmony_ci    struct AudioAdapterDescriptor *adapterDescs_ = nullptr;
44094332d3Sopenharmony_ci    uint32_t renderId_ = 0;
45094332d3Sopenharmony_ci    uint32_t captureId_ = 0;
46094332d3Sopenharmony_ci    void SetUp(const ::benchmark::State &state);
47094332d3Sopenharmony_ci    void TearDown(const ::benchmark::State &state);
48094332d3Sopenharmony_ci    void InitAttrs(struct AudioSampleAttributes &attrs);
49094332d3Sopenharmony_ci    void InitDevDesc(struct AudioDeviceDescriptor &devDesc);
50094332d3Sopenharmony_ci    void AudioAdapterDescriptorFree(struct AudioAdapterDescriptor *dataBlock, bool freeSelf);
51094332d3Sopenharmony_ci    void ReleaseAdapterDescs(struct AudioAdapterDescriptor *descs, uint32_t descsLen);
52094332d3Sopenharmony_ci};
53094332d3Sopenharmony_ci
54094332d3Sopenharmony_civoid AudioAdapterBenchmarkTest::AudioAdapterDescriptorFree(struct AudioAdapterDescriptor *dataBlock, bool freeSelf)
55094332d3Sopenharmony_ci{
56094332d3Sopenharmony_ci    if (dataBlock == nullptr) {
57094332d3Sopenharmony_ci        return;
58094332d3Sopenharmony_ci    }
59094332d3Sopenharmony_ci
60094332d3Sopenharmony_ci    if (dataBlock->adapterName != nullptr) {
61094332d3Sopenharmony_ci        OsalMemFree(dataBlock->adapterName);
62094332d3Sopenharmony_ci        dataBlock->adapterName = nullptr;
63094332d3Sopenharmony_ci    }
64094332d3Sopenharmony_ci
65094332d3Sopenharmony_ci    if (dataBlock->ports != nullptr) {
66094332d3Sopenharmony_ci        OsalMemFree(dataBlock->ports);
67094332d3Sopenharmony_ci    }
68094332d3Sopenharmony_ci
69094332d3Sopenharmony_ci    if (freeSelf) {
70094332d3Sopenharmony_ci        OsalMemFree(dataBlock);
71094332d3Sopenharmony_ci    }
72094332d3Sopenharmony_ci}
73094332d3Sopenharmony_ci
74094332d3Sopenharmony_civoid AudioAdapterBenchmarkTest::ReleaseAdapterDescs(struct AudioAdapterDescriptor *descs, uint32_t descsLen)
75094332d3Sopenharmony_ci{
76094332d3Sopenharmony_ci    if ((descs == nullptr) || (descsLen == 0)) {
77094332d3Sopenharmony_ci        return;
78094332d3Sopenharmony_ci    }
79094332d3Sopenharmony_ci
80094332d3Sopenharmony_ci    for (uint32_t i = 0; i < descsLen; i++) {
81094332d3Sopenharmony_ci        AudioAdapterDescriptorFree(&descs[i], false);
82094332d3Sopenharmony_ci    }
83094332d3Sopenharmony_ci}
84094332d3Sopenharmony_ci
85094332d3Sopenharmony_civoid AudioAdapterBenchmarkTest::InitAttrs(struct AudioSampleAttributes &attrs)
86094332d3Sopenharmony_ci{
87094332d3Sopenharmony_ci    attrs.format = AUDIO_FORMAT_TYPE_PCM_16_BIT;
88094332d3Sopenharmony_ci    attrs.channelCount = AUDIO_CHANNELCOUNT;
89094332d3Sopenharmony_ci    attrs.sampleRate = AUDIO_SAMPLE_RATE_48K;
90094332d3Sopenharmony_ci    attrs.interleaved = 1;
91094332d3Sopenharmony_ci    attrs.type = AUDIO_IN_MEDIA;
92094332d3Sopenharmony_ci    attrs.period = DEEP_BUFFER_RENDER_PERIOD_SIZE;
93094332d3Sopenharmony_ci    attrs.frameSize = PCM_16_BIT * attrs.channelCount / PCM_8_BIT;
94094332d3Sopenharmony_ci    attrs.isBigEndian = false;
95094332d3Sopenharmony_ci    attrs.isSignedData = true;
96094332d3Sopenharmony_ci    attrs.startThreshold = DEEP_BUFFER_RENDER_PERIOD_SIZE / (attrs.frameSize);
97094332d3Sopenharmony_ci    attrs.stopThreshold = INT_32_MAX;
98094332d3Sopenharmony_ci}
99094332d3Sopenharmony_ci
100094332d3Sopenharmony_civoid AudioAdapterBenchmarkTest::InitDevDesc(struct AudioDeviceDescriptor &devDesc)
101094332d3Sopenharmony_ci{
102094332d3Sopenharmony_ci    ASSERT_NE(adapterDescs_, nullptr);
103094332d3Sopenharmony_ci    ASSERT_NE(adapterDescs_->ports, nullptr);
104094332d3Sopenharmony_ci    for (uint32_t index = 0; index < adapterDescs_->portsLen; index++) {
105094332d3Sopenharmony_ci        if (adapterDescs_->ports[index].dir == PORT_OUT) {
106094332d3Sopenharmony_ci            devDesc.portId = adapterDescs_->ports[index].portId;
107094332d3Sopenharmony_ci            return;
108094332d3Sopenharmony_ci        }
109094332d3Sopenharmony_ci    }
110094332d3Sopenharmony_ci}
111094332d3Sopenharmony_ci
112094332d3Sopenharmony_civoid AudioAdapterBenchmarkTest::SetUp(const ::benchmark::State &state)
113094332d3Sopenharmony_ci{
114094332d3Sopenharmony_ci    uint32_t size = g_audioAdapterNumMax;
115094332d3Sopenharmony_ci    manager_ = IAudioManagerGet(false);
116094332d3Sopenharmony_ci    ASSERT_NE(manager_, nullptr);
117094332d3Sopenharmony_ci
118094332d3Sopenharmony_ci    adapterDescs_ = (struct AudioAdapterDescriptor *)OsalMemCalloc(
119094332d3Sopenharmony_ci        sizeof(struct AudioAdapterDescriptor) * (g_audioAdapterNumMax));
120094332d3Sopenharmony_ci    ASSERT_NE(adapterDescs_, nullptr);
121094332d3Sopenharmony_ci
122094332d3Sopenharmony_ci    ASSERT_EQ(HDF_SUCCESS, manager_->GetAllAdapters(manager_, adapterDescs_, &size));
123094332d3Sopenharmony_ci    if (size > g_audioAdapterNumMax) {
124094332d3Sopenharmony_ci        ReleaseAdapterDescs(adapterDescs_, g_audioAdapterNumMax);
125094332d3Sopenharmony_ci        ASSERT_LT(size, g_audioAdapterNumMax);
126094332d3Sopenharmony_ci    }
127094332d3Sopenharmony_ci
128094332d3Sopenharmony_ci    if (manager_->LoadAdapter(manager_, &adapterDescs_[0], &adapter_) != HDF_SUCCESS) {
129094332d3Sopenharmony_ci        ReleaseAdapterDescs(adapterDescs_, g_audioAdapterNumMax);
130094332d3Sopenharmony_ci        ASSERT_TRUE(false);
131094332d3Sopenharmony_ci    }
132094332d3Sopenharmony_ci
133094332d3Sopenharmony_ci    if (adapter_ == nullptr) {
134094332d3Sopenharmony_ci        ReleaseAdapterDescs(adapterDescs_, g_audioAdapterNumMax);
135094332d3Sopenharmony_ci        ASSERT_TRUE(false);
136094332d3Sopenharmony_ci    }
137094332d3Sopenharmony_ci}
138094332d3Sopenharmony_ci
139094332d3Sopenharmony_civoid AudioAdapterBenchmarkTest::TearDown(const ::benchmark::State &state)
140094332d3Sopenharmony_ci{
141094332d3Sopenharmony_ci    ASSERT_NE(manager_, nullptr);
142094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
143094332d3Sopenharmony_ci
144094332d3Sopenharmony_ci    manager_->UnloadAdapter(manager_, adapterDescs_[0].adapterName);
145094332d3Sopenharmony_ci    ReleaseAdapterDescs(adapterDescs_, g_audioAdapterNumMax);
146094332d3Sopenharmony_ci    adapter_ = nullptr;
147094332d3Sopenharmony_ci    IAudioManagerRelease(manager_, false);
148094332d3Sopenharmony_ci    manager_ = nullptr;
149094332d3Sopenharmony_ci}
150094332d3Sopenharmony_ci
151094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, InitAllPorts)(benchmark::State &state)
152094332d3Sopenharmony_ci{
153094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
154094332d3Sopenharmony_ci    int32_t ret;
155094332d3Sopenharmony_ci    for (auto _ : state) {
156094332d3Sopenharmony_ci        ret = adapter_->InitAllPorts(adapter_);
157094332d3Sopenharmony_ci        EXPECT_EQ(HDF_SUCCESS, ret);
158094332d3Sopenharmony_ci    }
159094332d3Sopenharmony_ci}
160094332d3Sopenharmony_ci
161094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, InitAllPorts)->
162094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
163094332d3Sopenharmony_ci
164094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, CreateRenderAndDestroyRender)(benchmark::State &state)
165094332d3Sopenharmony_ci{
166094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
167094332d3Sopenharmony_ci    int32_t ret;
168094332d3Sopenharmony_ci    struct IAudioRender *render = nullptr;
169094332d3Sopenharmony_ci    struct AudioDeviceDescriptor devicedesc = {};
170094332d3Sopenharmony_ci    struct AudioSampleAttributes attrs = {};
171094332d3Sopenharmony_ci    InitDevDesc(devicedesc);
172094332d3Sopenharmony_ci    devicedesc.desc = const_cast<char*>("primary");
173094332d3Sopenharmony_ci    devicedesc.pins = PIN_OUT_SPEAKER;
174094332d3Sopenharmony_ci    InitAttrs(attrs);
175094332d3Sopenharmony_ci    attrs.silenceThreshold = 0;
176094332d3Sopenharmony_ci    attrs.streamId = 0;
177094332d3Sopenharmony_ci
178094332d3Sopenharmony_ci    for (auto _ : state) {
179094332d3Sopenharmony_ci        ret = adapter_->CreateRender(adapter_, &devicedesc, &attrs, &render, &renderId_);
180094332d3Sopenharmony_ci        if (ret != HDF_SUCCESS) {
181094332d3Sopenharmony_ci            attrs.format = AUDIO_FORMAT_TYPE_PCM_32_BIT;
182094332d3Sopenharmony_ci            ASSERT_EQ(HDF_SUCCESS, adapter_->CreateRender(adapter_, &devicedesc, &attrs, &render, &renderId_));
183094332d3Sopenharmony_ci        }
184094332d3Sopenharmony_ci        ret = adapter_->DestroyRender(adapter_, renderId_);
185094332d3Sopenharmony_ci        EXPECT_EQ(HDF_SUCCESS, ret);
186094332d3Sopenharmony_ci    }
187094332d3Sopenharmony_ci}
188094332d3Sopenharmony_ci
189094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, CreateRenderAndDestroyRender)->
190094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
191094332d3Sopenharmony_ci
192094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, CreateCaptureAndDestroyCapture)(benchmark::State &state)
193094332d3Sopenharmony_ci{
194094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
195094332d3Sopenharmony_ci    int32_t ret;
196094332d3Sopenharmony_ci    struct IAudioCapture *capture = nullptr;
197094332d3Sopenharmony_ci    struct AudioDeviceDescriptor devicedesc = {};
198094332d3Sopenharmony_ci    struct AudioSampleAttributes attrs = {};
199094332d3Sopenharmony_ci    InitDevDesc(devicedesc);
200094332d3Sopenharmony_ci    devicedesc.desc = const_cast<char*>("primary");
201094332d3Sopenharmony_ci    devicedesc.pins = PIN_IN_MIC;
202094332d3Sopenharmony_ci    InitAttrs(attrs);
203094332d3Sopenharmony_ci    attrs.silenceThreshold = DEEP_BUFFER_RENDER_PERIOD_SIZE;
204094332d3Sopenharmony_ci
205094332d3Sopenharmony_ci    for (auto _ : state) {
206094332d3Sopenharmony_ci        ret = adapter_->CreateCapture(adapter_, &devicedesc, &attrs, &capture, &captureId_);
207094332d3Sopenharmony_ci        if (ret != HDF_SUCCESS) {
208094332d3Sopenharmony_ci            attrs.format = AUDIO_FORMAT_TYPE_PCM_32_BIT;
209094332d3Sopenharmony_ci            ASSERT_EQ(HDF_SUCCESS, adapter_->CreateCapture(adapter_, &devicedesc, &attrs, &capture, &captureId_));
210094332d3Sopenharmony_ci        }
211094332d3Sopenharmony_ci        ret = adapter_->DestroyCapture(adapter_, captureId_);
212094332d3Sopenharmony_ci        EXPECT_EQ(HDF_SUCCESS, ret);
213094332d3Sopenharmony_ci    }
214094332d3Sopenharmony_ci}
215094332d3Sopenharmony_ci
216094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, CreateCaptureAndDestroyCapture)->
217094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
218094332d3Sopenharmony_ci
219094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, GetPortCapability)(benchmark::State &state)
220094332d3Sopenharmony_ci{
221094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
222094332d3Sopenharmony_ci    int32_t ret;
223094332d3Sopenharmony_ci    struct AudioPort port = {};
224094332d3Sopenharmony_ci    struct AudioPortCapability capability = {};
225094332d3Sopenharmony_ci    port.dir = PORT_OUT;
226094332d3Sopenharmony_ci    port.portId = 0;
227094332d3Sopenharmony_ci    port.portName = const_cast<char*>("primary");
228094332d3Sopenharmony_ci
229094332d3Sopenharmony_ci    for (auto _ : state) {
230094332d3Sopenharmony_ci        ret = adapter_->GetPortCapability(adapter_, &port, &capability);
231094332d3Sopenharmony_ci        ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
232094332d3Sopenharmony_ci    }
233094332d3Sopenharmony_ci}
234094332d3Sopenharmony_ci
235094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, GetPortCapability)->
236094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
237094332d3Sopenharmony_ci
238094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, SetPassthroughMode)(benchmark::State &state)
239094332d3Sopenharmony_ci{
240094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
241094332d3Sopenharmony_ci    int32_t ret;
242094332d3Sopenharmony_ci    struct AudioPort port = {};
243094332d3Sopenharmony_ci    port.dir = PORT_OUT;
244094332d3Sopenharmony_ci    port.portId = 0;
245094332d3Sopenharmony_ci    port.portName = const_cast<char*>("primary");
246094332d3Sopenharmony_ci    enum AudioPortPassthroughMode mode = PORT_PASSTHROUGH_LPCM;
247094332d3Sopenharmony_ci
248094332d3Sopenharmony_ci    for (auto _ : state) {
249094332d3Sopenharmony_ci        ret = adapter_->SetPassthroughMode(adapter_, &port, mode);
250094332d3Sopenharmony_ci        ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_FAILURE);
251094332d3Sopenharmony_ci    }
252094332d3Sopenharmony_ci}
253094332d3Sopenharmony_ci
254094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, SetPassthroughMode)->
255094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
256094332d3Sopenharmony_ci
257094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, GetPassthroughMode)(benchmark::State &state)
258094332d3Sopenharmony_ci{
259094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
260094332d3Sopenharmony_ci    int32_t ret;
261094332d3Sopenharmony_ci    struct AudioPort port = {};
262094332d3Sopenharmony_ci    port.dir = PORT_OUT;
263094332d3Sopenharmony_ci    port.portId = 0;
264094332d3Sopenharmony_ci    port.portName = const_cast<char*>("primary");
265094332d3Sopenharmony_ci    enum AudioPortPassthroughMode mode;
266094332d3Sopenharmony_ci
267094332d3Sopenharmony_ci    for (auto _ : state) {
268094332d3Sopenharmony_ci        ret = adapter_->GetPassthroughMode(adapter_, &port, &mode);
269094332d3Sopenharmony_ci        ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_FAILURE);
270094332d3Sopenharmony_ci    }
271094332d3Sopenharmony_ci}
272094332d3Sopenharmony_ci
273094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, GetPassthroughMode)->
274094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
275094332d3Sopenharmony_ci
276094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, GetDeviceStatus)(benchmark::State &state)
277094332d3Sopenharmony_ci{
278094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
279094332d3Sopenharmony_ci    int32_t ret;
280094332d3Sopenharmony_ci    struct AudioDeviceStatus status = {};
281094332d3Sopenharmony_ci
282094332d3Sopenharmony_ci    for (auto _ : state) {
283094332d3Sopenharmony_ci        ret = adapter_->GetDeviceStatus(adapter_, &status);
284094332d3Sopenharmony_ci        EXPECT_EQ(HDF_SUCCESS, ret);
285094332d3Sopenharmony_ci    }
286094332d3Sopenharmony_ci}
287094332d3Sopenharmony_ci
288094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, GetDeviceStatus)->
289094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
290094332d3Sopenharmony_ci
291094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, GetMicMute)(benchmark::State &state)
292094332d3Sopenharmony_ci{
293094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
294094332d3Sopenharmony_ci    int32_t ret;
295094332d3Sopenharmony_ci    bool mute = false;
296094332d3Sopenharmony_ci
297094332d3Sopenharmony_ci    for (auto _ : state) {
298094332d3Sopenharmony_ci        ret = adapter_->GetMicMute(adapter_, &mute);
299094332d3Sopenharmony_ci        ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
300094332d3Sopenharmony_ci    }
301094332d3Sopenharmony_ci}
302094332d3Sopenharmony_ci
303094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, GetMicMute)->
304094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
305094332d3Sopenharmony_ci
306094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, SetVoiceVolume)(benchmark::State &state)
307094332d3Sopenharmony_ci{
308094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
309094332d3Sopenharmony_ci    int32_t ret;
310094332d3Sopenharmony_ci    float volume = 0;
311094332d3Sopenharmony_ci
312094332d3Sopenharmony_ci    for (auto _ : state) {
313094332d3Sopenharmony_ci        ret = adapter_->SetVoiceVolume(adapter_, volume);
314094332d3Sopenharmony_ci        ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
315094332d3Sopenharmony_ci    }
316094332d3Sopenharmony_ci}
317094332d3Sopenharmony_ci
318094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, SetVoiceVolume)->
319094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
320094332d3Sopenharmony_ci
321094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, SetExtraParams)(benchmark::State &state)
322094332d3Sopenharmony_ci{
323094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
324094332d3Sopenharmony_ci    int32_t ret;
325094332d3Sopenharmony_ci    enum AudioExtParamKey key = AUDIO_EXT_PARAM_KEY_LOWPOWER;
326094332d3Sopenharmony_ci    char condition[AUDIO_ADAPTER_BUF_TEST];
327094332d3Sopenharmony_ci    const char *value = "sup_sampling_rates=4800;sup_channels=1;sup_formats=2;";
328094332d3Sopenharmony_ci
329094332d3Sopenharmony_ci    for (auto _ : state) {
330094332d3Sopenharmony_ci        ret = adapter_->SetExtraParams(adapter_, key, condition, value);
331094332d3Sopenharmony_ci        ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
332094332d3Sopenharmony_ci    }
333094332d3Sopenharmony_ci}
334094332d3Sopenharmony_ci
335094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, SetExtraParams)->
336094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
337094332d3Sopenharmony_ci
338094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, GetExtraParams)(benchmark::State &state)
339094332d3Sopenharmony_ci{
340094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
341094332d3Sopenharmony_ci    int32_t ret;
342094332d3Sopenharmony_ci    enum AudioExtParamKey key = AUDIO_EXT_PARAM_KEY_NONE;
343094332d3Sopenharmony_ci    char condition[AUDIO_ADAPTER_BUF_TEST];
344094332d3Sopenharmony_ci    char value[AUDIO_ADAPTER_BUF_TEST] = "sup_sampling_rates=4800;sup_channels=1;sup_formats=2;";
345094332d3Sopenharmony_ci    uint32_t valueLen = AUDIO_ADAPTER_BUF_TEST;
346094332d3Sopenharmony_ci
347094332d3Sopenharmony_ci    for (auto _ : state) {
348094332d3Sopenharmony_ci        ret = adapter_->GetExtraParams(adapter_, key, condition, value, valueLen);
349094332d3Sopenharmony_ci        EXPECT_NE(HDF_SUCCESS, ret);
350094332d3Sopenharmony_ci    }
351094332d3Sopenharmony_ci}
352094332d3Sopenharmony_ci
353094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, GetExtraParams)->
354094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
355094332d3Sopenharmony_ci
356094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, UpdateAudioRoute)(benchmark::State &state)
357094332d3Sopenharmony_ci{
358094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
359094332d3Sopenharmony_ci    int32_t ret;
360094332d3Sopenharmony_ci    struct AudioRoute route = {};
361094332d3Sopenharmony_ci    int32_t routeHandle = 0;
362094332d3Sopenharmony_ci
363094332d3Sopenharmony_ci    for (auto _ : state) {
364094332d3Sopenharmony_ci        ret = adapter_->UpdateAudioRoute(adapter_, &route, &routeHandle);
365094332d3Sopenharmony_ci        EXPECT_NE(HDF_SUCCESS, ret);
366094332d3Sopenharmony_ci    }
367094332d3Sopenharmony_ci}
368094332d3Sopenharmony_ci
369094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, UpdateAudioRoute)->
370094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
371094332d3Sopenharmony_ci
372094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, ReleaseAudioRoute)(benchmark::State &state)
373094332d3Sopenharmony_ci{
374094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
375094332d3Sopenharmony_ci    int32_t ret;
376094332d3Sopenharmony_ci    int32_t routeHandle = 0;
377094332d3Sopenharmony_ci
378094332d3Sopenharmony_ci    for (auto _ : state) {
379094332d3Sopenharmony_ci        ret = adapter_->ReleaseAudioRoute(adapter_, routeHandle);
380094332d3Sopenharmony_ci        EXPECT_NE(HDF_SUCCESS, ret);
381094332d3Sopenharmony_ci    }
382094332d3Sopenharmony_ci}
383094332d3Sopenharmony_ci
384094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, ReleaseAudioRoute)->
385094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
386094332d3Sopenharmony_ci
387094332d3Sopenharmony_ciBENCHMARK_F(AudioAdapterBenchmarkTest, RegExtraParamObserver)(benchmark::State &state)
388094332d3Sopenharmony_ci{
389094332d3Sopenharmony_ci    ASSERT_NE(adapter_, nullptr);
390094332d3Sopenharmony_ci    int32_t ret;
391094332d3Sopenharmony_ci    int8_t cookie = 0;
392094332d3Sopenharmony_ci    struct IAudioCallback *audioCallback = nullptr;
393094332d3Sopenharmony_ci
394094332d3Sopenharmony_ci    for (auto _ : state) {
395094332d3Sopenharmony_ci        ret = adapter_->RegExtraParamObserver(adapter_, audioCallback, cookie);
396094332d3Sopenharmony_ci        ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
397094332d3Sopenharmony_ci    }
398094332d3Sopenharmony_ci}
399094332d3Sopenharmony_ci
400094332d3Sopenharmony_ciBENCHMARK_REGISTER_F(AudioAdapterBenchmarkTest, RegExtraParamObserver)->
401094332d3Sopenharmony_ci    Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
402094332d3Sopenharmony_ci}
403