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