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