* Copyright (c) 2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <benchmark/benchmark.h>
#include <climits>
#include <gtest/gtest.h>
#include "hdf_base.h"
#include "osal_mem.h"
#include "v6_1/audio_types.h"
#include "v6_1/iaudio_manager.h"
#include "v6_1/iaudio_render.h"
using namespace std;
using namespace testing::ext;
namespace {
const float MAX_GAINTHRESHOLD = 15.0;
const float MIN_GAINTHRESHOLD = 0.0;
const int BUFFER_LENTH = 1024 * 16;
const int DEEP_BUFFER_RENDER_PERIOD_SIZE = 4 * 1024;
const int MOVE_LEFT_NUM = 8;
const int32_t AUDIO_RENDER_BUF_TEST = 1024;
const int32_t AUDIO_RENDER_CHANNELCOUNT = 2;
const int32_t AUDIO_SAMPLE_RATE_48K = 48000;
const int32_t MAX_AUDIO_ADAPTER_DESC = 5;
const uint64_t DEFAULT_BUFFER_SIZE = 16384;
const int32_t ITERATION_FREQUENCY = 100;
const int32_t REPETITION_FREQUENCY = 3;
const int32_t RANGE_VALUE = 4;
const float GAIN_VALUE = 1.0;
const float SPEED_VALUE = 2.0;
const float VOLUNE_VALUE = 0.2;
class AudioRenderBenchmarkTest : public benchmark::Fixture {
public:
struct IAudioManager *manager_ = nullptr;
struct AudioAdapterDescriptor descs_[MAX_AUDIO_ADAPTER_DESC];
struct AudioAdapterDescriptor *desc_;
struct IAudioAdapter *adapter_ = nullptr;
struct IAudioRender *render_ = nullptr;
struct AudioDeviceDescriptor devDescRender_ = {};
struct AudioSampleAttributes attrsRender_ = {};
uint32_t renderId_ = 0;
char *devDescriptorName_ = nullptr;
uint32_t size_ = MAX_AUDIO_ADAPTER_DESC;
virtual void SetUp(const ::benchmark::State &state);
virtual void TearDown(const ::benchmark::State &state);
uint64_t GetRenderBufferSize();
void InitRenderAttrs(struct AudioSampleAttributes &attrs);
void InitRenderDevDesc(struct AudioDeviceDescriptor &devDesc);
void FreeAdapterElements(struct AudioAdapterDescriptor *dataBlock, bool freeSelf);
void ReleaseAllAdapterDescs(struct AudioAdapterDescriptor *descs, uint32_t descsLen);
};
uint64_t AudioRenderBenchmarkTest::GetRenderBufferSize()
{
int32_t ret = HDF_SUCCESS;
uint64_t frameSize = 0;
uint64_t frameCount = 0;
uint64_t bufferSize = 0;
if (render_ == nullptr) {
return DEFAULT_BUFFER_SIZE;
}
ret = render_->GetFrameSize(render_, &frameSize);
if (ret != HDF_SUCCESS) {
return DEFAULT_BUFFER_SIZE;
}
ret = render_->GetFrameCount(render_, &frameCount);
if (ret != HDF_SUCCESS) {
return DEFAULT_BUFFER_SIZE;
}
bufferSize = frameCount * frameSize;
if (bufferSize == 0) {
bufferSize = DEFAULT_BUFFER_SIZE;
}
return bufferSize;
}
void AudioRenderBenchmarkTest::InitRenderAttrs(struct AudioSampleAttributes &attrs)
{
attrs.channelCount = AUDIO_RENDER_CHANNELCOUNT;
attrs.sampleRate = AUDIO_SAMPLE_RATE_48K;
attrs.interleaved = 0;
attrs.type = AUDIO_IN_MEDIA;
attrs.period = DEEP_BUFFER_RENDER_PERIOD_SIZE;
attrs.frameSize = AUDIO_FORMAT_TYPE_PCM_16_BIT * AUDIO_RENDER_CHANNELCOUNT / MOVE_LEFT_NUM;
attrs.isBigEndian = false;
attrs.isSignedData = true;
attrs.startThreshold = DEEP_BUFFER_RENDER_PERIOD_SIZE / (attrs.format * attrs.channelCount / MOVE_LEFT_NUM);
attrs.stopThreshold = INT_MAX;
attrs.silenceThreshold = BUFFER_LENTH;
}
void AudioRenderBenchmarkTest::InitRenderDevDesc(struct AudioDeviceDescriptor &devDesc)
{
devDesc.pins = PIN_OUT_SPEAKER;
devDescriptorName_ = strdup("cardname");
devDesc.desc = devDescriptorName_;
ASSERT_NE(desc_, nullptr);
ASSERT_NE(desc_->ports, nullptr);
for (uint32_t index = 0; index < desc_->portsLen; index++) {
if (desc_->ports[index].dir == PORT_OUT) {
devDesc.portId = desc_->ports[index].portId;
return;
}
}
}
void AudioRenderBenchmarkTest::FreeAdapterElements(struct AudioAdapterDescriptor *dataBlock, bool freeSelf)
{
if (dataBlock == nullptr) {
return;
}
OsalMemFree(dataBlock->adapterName);
OsalMemFree(dataBlock->ports);
if (freeSelf) {
OsalMemFree(dataBlock);
}
}
void AudioRenderBenchmarkTest::ReleaseAllAdapterDescs(struct AudioAdapterDescriptor *descs, uint32_t descsLen)
{
if (descs == nullptr || descsLen == 0) {
return;
}
for (uint32_t i = 0; i < descsLen; i++) {
FreeAdapterElements(&descs[i], false);
}
}
void AudioRenderBenchmarkTest::SetUp(const ::benchmark::State &state)
{
manager_ = IAudioManagerGet(false);
ASSERT_NE(manager_, nullptr);
ASSERT_EQ(HDF_SUCCESS, manager_->GetAllAdapters(manager_, descs_, &size_));
ASSERT_NE(descs_, nullptr);
EXPECT_GE(MAX_AUDIO_ADAPTER_DESC, size_);
desc_ = &descs_[0];
ASSERT_EQ(HDF_SUCCESS, manager_->LoadAdapter(manager_, desc_, &adapter_));
ASSERT_NE(adapter_, nullptr);
InitRenderDevDesc(devDescRender_);
InitRenderAttrs(attrsRender_);
attrsRender_.format = AUDIO_FORMAT_TYPE_PCM_16_BIT;
int32_t ret = adapter_->CreateRender(adapter_, &devDescRender_, &attrsRender_, &render_, &renderId_);
if (ret != HDF_SUCCESS) {
attrsRender_.format = AUDIO_FORMAT_TYPE_PCM_32_BIT;
ASSERT_EQ(HDF_SUCCESS, adapter_->CreateRender(adapter_, &devDescRender_, &attrsRender_, &render_, &renderId_));
}
ASSERT_NE(render_, nullptr);
}
void AudioRenderBenchmarkTest::TearDown(const ::benchmark::State &state)
{
ASSERT_NE(devDescriptorName_, nullptr);
free(devDescriptorName_);
if (adapter_ != nullptr) {
adapter_->DestroyRender(adapter_, renderId_);
render_ = nullptr;
}
if (manager_ != nullptr) {
manager_->UnloadAdapter(manager_, desc_->adapterName);
adapter_ = nullptr;
ReleaseAllAdapterDescs(descs_, size_);
IAudioManagerRelease(manager_, false);
}
}
BENCHMARK_F(AudioRenderBenchmarkTest, StartAndStop)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
for (auto _ : state) {
ret = render_->Start(render_);
EXPECT_EQ(ret, HDF_SUCCESS);
ret = render_->Stop(render_);
EXPECT_EQ(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, StartAndStop)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, Pause)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret = render_->Start(render_);
EXPECT_EQ(ret, HDF_SUCCESS);
for (auto _ : state) {
ret = render_->Pause(render_);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
}
ret = render_->Stop(render_);
ASSERT_EQ(ret, HDF_SUCCESS);
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, Pause)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, Resume)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret = render_->Start(render_);
EXPECT_EQ(ret, HDF_SUCCESS);
ret = render_->Pause(render_);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
for (auto _ : state) {
ret = render_->Resume(render_);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
ret = render_->Stop(render_);
ASSERT_EQ(ret, HDF_SUCCESS);
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, Resume)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, Flush)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
for (auto _ : state) {
ret = render_->Flush(render_);
EXPECT_NE(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, Flush)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, TurnStandbyMode)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
for (auto _ : state) {
ret = render_->Start(render_);
EXPECT_EQ(ret, HDF_SUCCESS);
ret = render_->TurnStandbyMode(render_);
EXPECT_EQ(ret, HDF_ERR_NOT_SUPPORT);
render_->Stop(render_);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, TurnStandbyMode)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, AudioDevDump)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
int32_t range = RANGE_VALUE;
char pathBuf[] = "/data/RenderDump.log";
FILE *file = fopen(pathBuf, "wb+");
ASSERT_NE(nullptr, file);
int fd = fileno(file);
if (fd == -1) {
fclose(file);
ASSERT_NE(fd, -1);
}
for (auto _ : state) {
ret = render_->AudioDevDump(render_, range, fd);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
fclose(file);
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, AudioDevDump)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetFrameSize)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
uint64_t frameSize = 0;
for (auto _ : state) {
ret = render_->GetFrameSize(render_, &frameSize);
EXPECT_EQ(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetFrameSize)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetFrameCount)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
uint64_t frameCount = 0;
for (auto _ : state) {
ret = render_->GetFrameCount(render_, &frameCount);
EXPECT_EQ(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetFrameCount)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, SetSampleAttributes)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
struct AudioSampleAttributes attrs = attrsRender_;
for (auto _ : state) {
ret = render_->SetSampleAttributes(render_, &attrs);
EXPECT_EQ(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetSampleAttributes)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetSampleAttributes)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
struct AudioSampleAttributes attrs = {};
for (auto _ : state) {
ret = render_->GetSampleAttributes(render_, &attrs);
EXPECT_EQ(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetSampleAttributes)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetCurrentChannelId)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
uint32_t channelId = 0;
for (auto _ : state) {
ret = render_->GetCurrentChannelId(render_, &channelId);
EXPECT_EQ(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetCurrentChannelId)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, SelectScene)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
struct AudioSceneDescriptor scene;
scene.scene.id = AUDIO_IN_MEDIA;
scene.desc.pins = PIN_OUT_SPEAKER;
scene.desc.desc = const_cast<char*>("primary");
for (auto _ : state) {
ret = render_->SelectScene(render_, &scene);
EXPECT_EQ(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SelectScene)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetLatency)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
uint32_t ms = 0;
for (auto _ : state) {
ret = render_->GetLatency(render_, &ms);
EXPECT_EQ(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetLatency)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetRenderPosition)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
uint64_t frames = 0;
struct AudioTimeStamp time;
for (auto _ : state) {
ret = render_->GetRenderPosition(render_, &frames, &time);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetRenderPosition)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, SetExtraParams)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
char keyValueList[AUDIO_RENDER_BUF_TEST] =
"attr-route=1;attr-format=32;attr-channels=2;attr-frame-count=82;attr-sampling-rate=48000";
for (auto _ : state) {
ret = render_->SetExtraParams(render_, keyValueList);
EXPECT_EQ(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetExtraParams)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetExtraParams)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
char keyValueList[AUDIO_RENDER_BUF_TEST] = {};
uint32_t keyValueListLen = 0;
for (auto _ : state) {
ret = render_->GetExtraParams(render_, keyValueList, keyValueListLen);
EXPECT_NE(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetExtraParams)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, SetGain)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
float gain = GAIN_VALUE;
for (auto _ : state) {
ret = render_->SetGain(render_, gain);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetGain)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetGain)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
float gain;
for (auto _ : state) {
ret = render_->GetGain(render_, &gain);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetGain)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetGainThreshold)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
float min = 0.0;
float max = GAIN_VALUE;
for (auto _ : state) {
ret = render_->GetGainThreshold(render_, &min, &max);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
EXPECT_GE(min, MIN_GAINTHRESHOLD);
EXPECT_LE(max, MAX_GAINTHRESHOLD);
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetGainThreshold)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetMmapPosition)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
uint64_t frames = 0;
struct AudioTimeStamp time;
time.tvNSec = 0;
time.tvSec = 0;
for (auto _ : state) {
ret = render_->GetMmapPosition(render_, &frames, &time);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetMmapPosition)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, SetMute)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
bool mute = false;
for (auto _ : state) {
ret = render_->SetMute(render_, mute);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetMute)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetMute)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
bool isMute = false;
for (auto _ : state) {
ret = render_->GetMute(render_, &isMute);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetMute)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, SetVolume)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
float volume = VOLUNE_VALUE;
for (auto _ : state) {
ret = render_->SetVolume(render_, volume);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetVolume)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetVolume)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
float val = 0.0;
for (auto _ : state) {
ret = render_->GetVolume(render_, &val);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetVolume)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, RenderFrame)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
uint32_t frameLen = (uint64_t)GetRenderBufferSize();
uint64_t requestBytes = frameLen;
EXPECT_EQ(HDF_SUCCESS, render_->Start(render_));
int8_t *frame = (int8_t *)calloc(1, frameLen);
ASSERT_NE(nullptr, frame);
for (auto _ : state) {
ret = render_->RenderFrame(render_, frame, frameLen, &requestBytes);
EXPECT_EQ(ret, HDF_SUCCESS);
}
EXPECT_EQ(HDF_SUCCESS, render_->Stop(render_));
if (frame != nullptr) {
free(frame);
frame = nullptr;
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, RenderFrame)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, SetChannelMode)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
AudioChannelMode mode = AUDIO_CHANNEL_NORMAL;
for (auto _ : state) {
ret = render_->SetChannelMode(render_, mode);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetChannelMode)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, SetRenderSpeed)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
float speed = SPEED_VALUE;
for (auto _ : state) {
ret = render_->SetRenderSpeed(render_, speed);
EXPECT_NE(ret, HDF_SUCCESS);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, SetRenderSpeed)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetRenderSpeed)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
float speed = 0.0;
ASSERT_EQ(HDF_SUCCESS, render_->Start(render_));
for (auto _ : state) {
ret = render_->GetRenderSpeed(render_, &speed);
EXPECT_NE(ret, HDF_SUCCESS);
}
ASSERT_EQ(HDF_SUCCESS, render_->Stop(render_));
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetRenderSpeed)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetChannelMode)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
enum AudioChannelMode channelMode = AUDIO_CHANNEL_NORMAL;
for (auto _ : state) {
ret = render_->GetChannelMode(render_, &channelMode);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetChannelMode)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, RegCallback)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
int8_t cookie = 0;
struct IAudioCallback *audioCallback = nullptr;
for (auto _ : state) {
ret = render_->RegCallback(render_, audioCallback, cookie);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, RegCallback)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, DrainBuffer)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
enum AudioDrainNotifyType type = AUDIO_DRAIN_NORMAL_MODE;
for (auto _ : state) {
ret = render_->DrainBuffer(render_, &type);
EXPECT_EQ(ret, HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, DrainBuffer)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, IsSupportsDrain)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
bool support = false;
for (auto _ : state) {
ret = render_->IsSupportsDrain(render_, &support);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, IsSupportsDrain)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, CheckSceneCapability)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
struct AudioSceneDescriptor scene;
bool supported = false;
scene.scene.id = AUDIO_IN_MEDIA;
scene.desc = devDescRender_;
for (auto _ : state) {
ret = render_->CheckSceneCapability(render_, &scene, &supported);
EXPECT_EQ(ret, HDF_ERR_NOT_SUPPORT);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, CheckSceneCapability)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, AddAndRemoveAudioEffect)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
uint64_t effectId = 0;
for (auto _ : state) {
ret = render_->AddAudioEffect(render_, effectId);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
ret = render_->RemoveAudioEffect(render_, effectId);
ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, AddAndRemoveAudioEffect)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, GetFrameBufferSize)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
uint64_t bufferSize = BUFFER_LENTH;
for (auto _ : state) {
ret = render_->GetFrameBufferSize(render_, &bufferSize);
ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, GetFrameBufferSize)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
BENCHMARK_F(AudioRenderBenchmarkTest, IsSupportsPauseAndResume)(benchmark::State &state)
{
ASSERT_NE(render_, nullptr);
int32_t ret;
bool supportPause = false;
bool supportResume = false;
for (auto _ : state) {
ret = render_->IsSupportsPauseAndResume(render_, &supportPause, &supportResume);
ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
}
}
BENCHMARK_REGISTER_F(AudioRenderBenchmarkTest, IsSupportsPauseAndResume)->
Iterations(ITERATION_FREQUENCY)->Repetitions(REPETITION_FREQUENCY)->ReportAggregatesOnly();
}