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 <climits>
18 #include <gtest/gtest.h>
19 #include "hdf_base.h"
20 #include "osal_mem.h"
21 #include "v1_0/audio_types.h"
22 #include "v1_0/iaudio_manager.h"
23 #include "v1_0/iaudio_render.h"
24
25 using namespace std;
26 using namespace testing::ext;
27
28 namespace {
29 const float MAX_GAINTHRESHOLD = 15.0;
30 const float MIN_GAINTHRESHOLD = 0.0;
31 const int BUFFER_LENTH = 1024 * 16;
32 const int DEEP_BUFFER_RENDER_PERIOD_SIZE = 4 * 1024;
33 const int MOVE_LEFT_NUM = 8;
34 const int32_t AUDIO_RENDER_BUF_TEST = 1024;
35 const int32_t AUDIO_RENDER_CHANNELCOUNT = 2;
36 const int32_t AUDIO_SAMPLE_RATE_48K = 48000;
37 const int32_t MAX_AUDIO_ADAPTER_DESC = 5;
38 const uint64_t DEFAULT_BUFFER_SIZE = 16384;
39 const int32_t ITERATION_FREQUENCY = 100;
40 const int32_t REPETITION_FREQUENCY = 3;
41 const int32_t MMAP_SUGGEST_BUFFER_SIZE = 1920;
42
43 class AudioRenderBenchmarkTest : public benchmark::Fixture {
44 public:
45 struct IAudioManager *manager_ = nullptr;
46 struct AudioAdapterDescriptor descs_[MAX_AUDIO_ADAPTER_DESC];
47 struct AudioAdapterDescriptor *desc_;
48 struct IAudioAdapter *adapter_ = nullptr;
49 struct IAudioRender *render_ = nullptr;
50 struct AudioDeviceDescriptor devDescRender_ = {};
51 struct AudioSampleAttributes attrsRender_ = {};
52 uint32_t renderId_ = 0;
53 uint32_t size_ = MAX_AUDIO_ADAPTER_DESC;
54 virtual void SetUp(const ::benchmark::State &state);
55 virtual void TearDown(const ::benchmark::State &state);
56 uint64_t GetRenderBufferSize();
57 void InitRenderAttrs(struct AudioSampleAttributes &attrs);
58 void InitRenderDevDesc(struct AudioDeviceDescriptor &devDesc);
59 void FreeAdapterElements(struct AudioAdapterDescriptor *dataBlock, bool freeSelf);
60 void ReleaseAllAdapterDescs(struct AudioAdapterDescriptor *descs, uint32_t descsLen);
61 };
62
GetRenderBufferSize()63 uint64_t AudioRenderBenchmarkTest::GetRenderBufferSize()
64 {
65 int32_t ret = HDF_SUCCESS;
66 uint64_t frameSize = 0;
67 uint64_t frameCount = 0;
68 uint64_t bufferSize = 0;
69
70 if (render_ == nullptr) {
71 return DEFAULT_BUFFER_SIZE;
72 }
73
74 ret = render_->GetFrameSize(render_, &frameSize);
75 if (ret != HDF_SUCCESS) {
76 return DEFAULT_BUFFER_SIZE;
77 }
78
79 ret = render_->GetFrameCount(render_, &frameCount);
80 if (ret != HDF_SUCCESS) {
81 return DEFAULT_BUFFER_SIZE;
82 }
83
84 bufferSize = frameCount * frameSize;
85 if (bufferSize == 0) {
86 bufferSize = DEFAULT_BUFFER_SIZE;
87 }
88
89 return bufferSize;
90 }
91
InitRenderAttrs(struct AudioSampleAttributes & attrs)92 void AudioRenderBenchmarkTest::InitRenderAttrs(struct AudioSampleAttributes &attrs)
93 {
94 attrs.channelCount = AUDIO_RENDER_CHANNELCOUNT;
95 attrs.sampleRate = AUDIO_SAMPLE_RATE_48K;
96 attrs.interleaved = 0;
97 attrs.type = AUDIO_IN_MEDIA;
98 attrs.period = DEEP_BUFFER_RENDER_PERIOD_SIZE;
99 attrs.frameSize = AUDIO_FORMAT_TYPE_PCM_16_BIT * AUDIO_RENDER_CHANNELCOUNT / MOVE_LEFT_NUM;
100 attrs.isBigEndian = false;
101 attrs.isSignedData = true;
102 attrs.startThreshold = DEEP_BUFFER_RENDER_PERIOD_SIZE / (attrs.format * attrs.channelCount / MOVE_LEFT_NUM);
103 attrs.stopThreshold = INT_MAX;
104 attrs.silenceThreshold = BUFFER_LENTH;
105 }
106
InitRenderDevDesc(struct AudioDeviceDescriptor & devDesc)107 void AudioRenderBenchmarkTest::InitRenderDevDesc(struct AudioDeviceDescriptor &devDesc)
108 {
109 devDesc.pins = PIN_OUT_SPEAKER;
110 devDesc.desc = strdup("cardname");
111
112 ASSERT_NE(desc_, nullptr);
113 ASSERT_NE(desc_->ports, nullptr);
114 for (uint32_t index = 0; index < desc_->portsLen; index++) {
115 if (desc_->ports[index].dir == PORT_OUT) {
116 devDesc.portId = desc_->ports[index].portId;
117 return;
118 }
119 }
120 free(devDesc.desc);
121 }
122
FreeAdapterElements(struct AudioAdapterDescriptor * dataBlock,bool freeSelf)123 void AudioRenderBenchmarkTest::FreeAdapterElements(struct AudioAdapterDescriptor *dataBlock, bool freeSelf)
124 {
125 if (dataBlock == nullptr) {
126 return;
127 }
128
129 OsalMemFree(dataBlock->adapterName);
130
131 OsalMemFree(dataBlock->ports);
132
133 if (freeSelf) {
134 OsalMemFree(dataBlock);
135 }
136 }
137
ReleaseAllAdapterDescs(struct AudioAdapterDescriptor * descs,uint32_t descsLen)138 void AudioRenderBenchmarkTest::ReleaseAllAdapterDescs(struct AudioAdapterDescriptor *descs, uint32_t descsLen)
139 {
140 if (descs == nullptr || descsLen == 0) {
141 return;
142 }
143
144 for (uint32_t i = 0; i < descsLen; i++) {
145 FreeAdapterElements(&descs[i], false);
146 }
147 }
148
SetUp(const::benchmark::State & state)149 void AudioRenderBenchmarkTest::SetUp(const ::benchmark::State &state)
150 {
151 manager_ = IAudioManagerGet(false);
152 ASSERT_NE(manager_, nullptr);
153
154 ASSERT_EQ(HDF_SUCCESS, manager_->GetAllAdapters(manager_, descs_, &size_));
155 ASSERT_NE(descs_, nullptr);
156 EXPECT_GE(MAX_AUDIO_ADAPTER_DESC, size_);
157 desc_ = &descs_[0];
158 ASSERT_EQ(HDF_SUCCESS, manager_->LoadAdapter(manager_, desc_, &adapter_));
159 ASSERT_NE(adapter_, nullptr);
160 InitRenderDevDesc(devDescRender_);
161 InitRenderAttrs(attrsRender_);
162
163 attrsRender_.format = AUDIO_FORMAT_TYPE_PCM_16_BIT;
164 int32_t ret = adapter_->CreateRender(adapter_, &devDescRender_, &attrsRender_, &render_, &renderId_);
165 if (ret != HDF_SUCCESS) {
166 attrsRender_.format = AUDIO_FORMAT_TYPE_PCM_32_BIT;
167 ASSERT_EQ(HDF_SUCCESS, adapter_->CreateRender(adapter_, &devDescRender_, &attrsRender_, &render_, &renderId_));
168 }
169 ASSERT_NE(render_, nullptr);
170 }
171
TearDown(const::benchmark::State & state)172 void AudioRenderBenchmarkTest::TearDown(const ::benchmark::State &state)
173 {
174 if (adapter_ != nullptr) {
175 adapter_->DestroyRender(adapter_, renderId_);
176 render_ = nullptr;
177 }
178 if (manager_ != nullptr) {
179 manager_->UnloadAdapter(manager_, desc_->adapterName);
180 adapter_ = nullptr;
181 ReleaseAllAdapterDescs(descs_, size_);
182
183 IAudioManagerRelease(manager_, false);
184 }
185 }
186
BENCHMARK_F(AudioRenderBenchmarkTest,StartAndStop)187 BENCHMARK_F(AudioRenderBenchmarkTest, StartAndStop)(benchmark::State &state)
188 {
189 int32_t ret;
190 for (auto _ : state) {
191 ret = render_->Start(render_);
192 ret = render_->Stop(render_);
193 }
194 EXPECT_EQ(ret, HDF_SUCCESS);
195 }
196
197 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, StartAndStop)->
198 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
199
BENCHMARK_F(AudioRenderBenchmarkTest,Pause)200 BENCHMARK_F(AudioRenderBenchmarkTest, Pause)(benchmark::State &state)
201 {
202 int32_t ret = render_->Start(render_);
203 EXPECT_EQ(ret, HDF_SUCCESS);
204
205 for (auto _ : state) {
206 ret = render_->Pause(render_);
207 }
208 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
209 }
210
211 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, Pause)->
212 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
213
BENCHMARK_F(AudioRenderBenchmarkTest,Resume)214 BENCHMARK_F(AudioRenderBenchmarkTest, Resume)(benchmark::State &state)
215 {
216 int32_t ret = render_->Start(render_);
217 EXPECT_EQ(ret, HDF_SUCCESS);
218
219 ret = render_->Pause(render_);
220 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
221
222 for (auto _ : state) {
223 ret = render_->Resume(render_);
224 }
225 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
226
227 ret = render_->Stop(render_);
228 ASSERT_EQ(ret, HDF_SUCCESS);
229 }
230
231 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, Resume)->
232 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
233
BENCHMARK_F(AudioRenderBenchmarkTest,Flush)234 BENCHMARK_F(AudioRenderBenchmarkTest, Flush)(benchmark::State &state)
235 {
236 int32_t ret;
237 for (auto _ : state) {
238 ret = render_->Flush(render_);
239 }
240 EXPECT_NE(ret, HDF_SUCCESS);
241 }
242
243 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, Flush)->
244 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
245
BENCHMARK_F(AudioRenderBenchmarkTest,TurnStandbyMode)246 BENCHMARK_F(AudioRenderBenchmarkTest, TurnStandbyMode)(benchmark::State &state)
247 {
248 int32_t ret;
249 for (auto _ : state) {
250 ret = render_->Start(render_);
251 ret = render_->TurnStandbyMode(render_);
252 }
253 EXPECT_EQ(ret, HDF_SUCCESS);
254 }
255
256 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, TurnStandbyMode)->
257 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
258
BENCHMARK_F(AudioRenderBenchmarkTest,AudioDevDump)259 BENCHMARK_F(AudioRenderBenchmarkTest, AudioDevDump)(benchmark::State &state)
260 {
261 int32_t ret;
262 int32_t range = 4;
263 char pathBuf[] = "/data/RenderDump.log";
264
265 FILE *file = fopen(pathBuf, "wb+");
266 ASSERT_NE(nullptr, file);
267 int fd = fileno(file);
268 if (fd == -1) {
269 fclose(file);
270 ASSERT_NE(fd, -1);
271 }
272
273 for (auto _ : state) {
274 ret = render_->AudioDevDump(render_, range, fd);
275 }
276 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
277 fclose(file);
278 }
279
280 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, AudioDevDump)->
281 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
282
BENCHMARK_F(AudioRenderBenchmarkTest,GetFrameSize)283 BENCHMARK_F(AudioRenderBenchmarkTest, GetFrameSize)(benchmark::State &state)
284 {
285 int32_t ret;
286 uint64_t frameSize = 0;
287
288 for (auto _ : state) {
289 ret = render_->GetFrameSize(render_, &frameSize);
290 }
291 EXPECT_EQ(ret, HDF_SUCCESS);
292 }
293
294 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetFrameSize)->
295 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
296
BENCHMARK_F(AudioRenderBenchmarkTest,GetFrameCount)297 BENCHMARK_F(AudioRenderBenchmarkTest, GetFrameCount)(benchmark::State &state)
298 {
299 int32_t ret;
300 uint64_t frameCount = 0;
301
302 for (auto _ : state) {
303 ret = render_->GetFrameCount(render_, &frameCount);
304 }
305 EXPECT_EQ(ret, HDF_SUCCESS);
306 }
307
308 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetFrameCount)->
309 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
310
BENCHMARK_F(AudioRenderBenchmarkTest,SetSampleAttributes)311 BENCHMARK_F(AudioRenderBenchmarkTest, SetSampleAttributes)(benchmark::State &state)
312 {
313 int32_t ret;
314 struct AudioSampleAttributes attrs = attrsRender_;
315 for (auto _ : state) {
316 ret = render_->SetSampleAttributes(render_, &attrs);
317 }
318 EXPECT_EQ(ret, HDF_SUCCESS);
319 }
320
321 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetSampleAttributes)->
322 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
323
BENCHMARK_F(AudioRenderBenchmarkTest,GetSampleAttributes)324 BENCHMARK_F(AudioRenderBenchmarkTest, GetSampleAttributes)(benchmark::State &state)
325 {
326 int32_t ret;
327 struct AudioSampleAttributes attrs = {};
328
329 for (auto _ : state) {
330 ret = render_->GetSampleAttributes(render_, &attrs);
331 }
332 EXPECT_EQ(ret, HDF_SUCCESS);
333 }
334
335 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetSampleAttributes)->
336 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
337
BENCHMARK_F(AudioRenderBenchmarkTest,GetCurrentChannelId)338 BENCHMARK_F(AudioRenderBenchmarkTest, GetCurrentChannelId)(benchmark::State &state)
339 {
340 int32_t ret;
341 uint32_t channelId = 0;
342
343 for (auto _ : state) {
344 ret = render_->GetCurrentChannelId(render_, &channelId);
345 }
346 EXPECT_EQ(ret, HDF_SUCCESS);
347 }
348
349 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetCurrentChannelId)->
350 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
351
BENCHMARK_F(AudioRenderBenchmarkTest,SelectScene)352 BENCHMARK_F(AudioRenderBenchmarkTest, SelectScene)(benchmark::State &state)
353 {
354 int32_t ret;
355 struct AudioSceneDescriptor scene;
356 scene.scene.id = AUDIO_IN_MEDIA;
357 scene.desc.pins = PIN_OUT_SPEAKER;
358 scene.desc.desc = const_cast<char*>("primary");
359
360 for (auto _ : state) {
361 ret = render_->SelectScene(render_, &scene);
362 }
363 EXPECT_EQ(ret, HDF_SUCCESS);
364 }
365
366 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SelectScene)->
367 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
368
BENCHMARK_F(AudioRenderBenchmarkTest,GetLatency)369 BENCHMARK_F(AudioRenderBenchmarkTest, GetLatency)(benchmark::State &state)
370 {
371 int32_t ret;
372 uint32_t ms = 0;
373
374 for (auto _ : state) {
375 ret = render_->GetLatency(render_, &ms);
376 }
377 EXPECT_EQ(ret, HDF_SUCCESS);
378 }
379
380 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetLatency)->
381 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
382
BENCHMARK_F(AudioRenderBenchmarkTest,GetRenderPosition)383 BENCHMARK_F(AudioRenderBenchmarkTest, GetRenderPosition)(benchmark::State &state)
384 {
385 int32_t ret;
386 uint64_t frames = 0;
387 struct AudioTimeStamp time;
388
389 for (auto _ : state) {
390 ret = render_->GetRenderPosition(render_, &frames, &time);
391 }
392 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
393 }
394
395 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetRenderPosition)->
396 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
397
BENCHMARK_F(AudioRenderBenchmarkTest,SetExtraParams)398 BENCHMARK_F(AudioRenderBenchmarkTest, SetExtraParams)(benchmark::State &state)
399 {
400 int32_t ret;
401 char keyValueList[AUDIO_RENDER_BUF_TEST] =
402 "attr-route=1;attr-format=32;attr-channels=2;attr-frame-count=82;attr-sampling-rate=48000";
403
404 for (auto _ : state) {
405 ret = render_->SetExtraParams(render_, keyValueList);
406 }
407 EXPECT_EQ(ret, HDF_SUCCESS);
408 }
409
410 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetExtraParams)->
411 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
412
BENCHMARK_F(AudioRenderBenchmarkTest,GetExtraParams)413 BENCHMARK_F(AudioRenderBenchmarkTest, GetExtraParams)(benchmark::State &state)
414 {
415 int32_t ret;
416 char keyValueList[AUDIO_RENDER_BUF_TEST] = {};
417 uint32_t keyValueListLen = 0;
418
419 for (auto _ : state) {
420 ret = render_->GetExtraParams(render_, keyValueList, keyValueListLen);
421 }
422 EXPECT_NE(ret, HDF_SUCCESS);
423 }
424
425 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetExtraParams)->
426 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
427
BENCHMARK_F(AudioRenderBenchmarkTest,SetGain)428 BENCHMARK_F(AudioRenderBenchmarkTest, SetGain)(benchmark::State &state)
429 {
430 int32_t ret;
431 float gain = 1.0;
432
433 for (auto _ : state) {
434 ret = render_->SetGain(render_, gain);
435 }
436 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
437 }
438
439 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetGain)->
440 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
441
BENCHMARK_F(AudioRenderBenchmarkTest,GetGain)442 BENCHMARK_F(AudioRenderBenchmarkTest, GetGain)(benchmark::State &state)
443 {
444 int32_t ret;
445 float gain;
446
447 for (auto _ : state) {
448 ret = render_->GetGain(render_, &gain);
449 }
450 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
451 }
452
453 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetGain)->
454 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
455
BENCHMARK_F(AudioRenderBenchmarkTest,GetGainThreshold)456 BENCHMARK_F(AudioRenderBenchmarkTest, GetGainThreshold)(benchmark::State &state)
457 {
458 int32_t ret;
459 float min = 0.0;
460 float max = 1.0;
461
462 for (auto _ : state) {
463 ret = render_->GetGainThreshold(render_, &min, &max);
464 }
465 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
466 EXPECT_GE(min, MIN_GAINTHRESHOLD);
467 EXPECT_LE(max, MAX_GAINTHRESHOLD);
468 }
469
470 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetGainThreshold)->
471 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
472
BENCHMARK_F(AudioRenderBenchmarkTest,GetMmapPosition)473 BENCHMARK_F(AudioRenderBenchmarkTest, GetMmapPosition)(benchmark::State &state)
474 {
475 int32_t ret;
476 uint64_t frames = 0;
477 struct AudioTimeStamp time;
478 time.tvNSec = 0;
479 time.tvSec = 0;
480
481 for (auto _ : state) {
482 ret = render_->GetMmapPosition(render_, &frames, &time);
483 }
484 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
485 }
486
487 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetMmapPosition)->
488 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
489
BENCHMARK_F(AudioRenderBenchmarkTest,SetMute)490 BENCHMARK_F(AudioRenderBenchmarkTest, SetMute)(benchmark::State &state)
491 {
492 int32_t ret;
493 bool mute = false;
494
495 for (auto _ : state) {
496 ret = render_->SetMute(render_, mute);
497 }
498 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
499 }
500
501 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetMute)->
502 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
503
BENCHMARK_F(AudioRenderBenchmarkTest,GetMute)504 BENCHMARK_F(AudioRenderBenchmarkTest, GetMute)(benchmark::State &state)
505 {
506 int32_t ret;
507 bool isMute = false;
508
509 for (auto _ : state) {
510 ret = render_->GetMute(render_, &isMute);
511 }
512 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
513 }
514
515 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetMute)->
516 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
517
BENCHMARK_F(AudioRenderBenchmarkTest,SetVolume)518 BENCHMARK_F(AudioRenderBenchmarkTest, SetVolume)(benchmark::State &state)
519 {
520 int32_t ret;
521 float volume = 0.2;
522
523 for (auto _ : state) {
524 ret = render_->SetVolume(render_, volume);
525 }
526 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_FAILURE);
527 }
528
529 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetVolume)->
530 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
531
BENCHMARK_F(AudioRenderBenchmarkTest,GetVolume)532 BENCHMARK_F(AudioRenderBenchmarkTest, GetVolume)(benchmark::State &state)
533 {
534 int32_t ret;
535 float val = 0.0;
536
537 for (auto _ : state) {
538 ret = render_->GetVolume(render_, &val);
539 }
540 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
541 }
542
543 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetVolume)->
544 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
545
BENCHMARK_F(AudioRenderBenchmarkTest,RenderFrame)546 BENCHMARK_F(AudioRenderBenchmarkTest, RenderFrame)(benchmark::State &state)
547 {
548 int32_t ret;
549 uint32_t frameLen = (uint64_t)GetRenderBufferSize();
550 uint64_t requestBytes = frameLen;
551 EXPECT_EQ(HDF_SUCCESS, render_->Start(render_));
552
553 int8_t *frame = (int8_t *)calloc(1, frameLen);
554 ASSERT_NE(nullptr, frame);
555
556 for (auto _ : state) {
557 ret = render_->RenderFrame(render_, frame, frameLen, &requestBytes);
558 }
559 EXPECT_EQ(ret, HDF_SUCCESS);
560 EXPECT_EQ(HDF_SUCCESS, render_->Stop(render_));
561
562 if (frame != nullptr) {
563 free(frame);
564 frame = nullptr;
565 }
566 }
567
568 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, RenderFrame)->
569 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
570
BENCHMARK_F(AudioRenderBenchmarkTest,SetChannelMode)571 BENCHMARK_F(AudioRenderBenchmarkTest, SetChannelMode)(benchmark::State &state)
572 {
573 int32_t ret;
574 AudioChannelMode mode = AUDIO_CHANNEL_NORMAL;
575
576 for (auto _ : state) {
577 ret = render_->SetChannelMode(render_, mode);
578 }
579 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
580 }
581
582 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetChannelMode)->
583 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
584
BENCHMARK_F(AudioRenderBenchmarkTest,GetChannelMode)585 BENCHMARK_F(AudioRenderBenchmarkTest, GetChannelMode)(benchmark::State &state)
586 {
587 int32_t ret;
588 AudioChannelMode mode = AUDIO_CHANNEL_NORMAL;
589
590 for (auto _ : state) {
591 ret = render_->GetChannelMode(render_, &mode);
592 }
593 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
594 }
595
596 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetChannelMode)->
597 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
598
BENCHMARK_F(AudioRenderBenchmarkTest,SetRenderSpeed)599 BENCHMARK_F(AudioRenderBenchmarkTest, SetRenderSpeed)(benchmark::State &state)
600 {
601 int32_t ret;
602 float speed = 2.0;
603
604 for (auto _ : state) {
605 ret = render_->SetRenderSpeed(render_, speed);
606 }
607 EXPECT_NE(ret, HDF_SUCCESS);
608 }
609
610 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetRenderSpeed)->
611 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
612
BENCHMARK_F(AudioRenderBenchmarkTest,GetRenderSpeed)613 BENCHMARK_F(AudioRenderBenchmarkTest, GetRenderSpeed)(benchmark::State &state)
614 {
615 int32_t ret;
616 float speed = 0;
617
618 for (auto _ : state) {
619 ret = render_->GetRenderSpeed(render_, &speed);
620 }
621 EXPECT_EQ(HDF_ERR_NOT_SUPPORT, ret);
622 }
623 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetRenderSpeed)->
624 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
625
BENCHMARK_F(AudioRenderBenchmarkTest,ReqMmapBuffer)626 BENCHMARK_F(AudioRenderBenchmarkTest, ReqMmapBuffer)(benchmark::State &state)
627 {
628 int32_t ret;
629 int32_t reqSize = MMAP_SUGGEST_BUFFER_SIZE;
630 struct AudioMmapBufferDescriptor desc;
631 for (auto _ : state) {
632 ret = render_->ReqMmapBuffer(render_, reqSize, &desc);
633 }
634 ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
635 }
636 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, ReqMmapBuffer)->
637 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
638
BENCHMARK_F(AudioRenderBenchmarkTest,CheckSceneCapability)639 BENCHMARK_F(AudioRenderBenchmarkTest, CheckSceneCapability)(benchmark::State &state)
640 {
641 int32_t ret = -1;
642 bool supported = false;
643 struct AudioSceneDescriptor scenes = {};
644 scenes.scene.id = 0;
645 scenes.desc.pins = PIN_OUT_SPEAKER;
646 scenes.desc.desc = strdup("mic");
647 for (auto _ : state) {
648 ret = render_->CheckSceneCapability(render_, &scenes, &supported);
649 }
650 EXPECT_EQ(HDF_SUCCESS, ret);
651 free(scenes.desc.desc);
652 }
653 BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, CheckSceneCapability)->
654 Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
655 }
656