• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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