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