19762338dSopenharmony_ci/*
29762338dSopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
39762338dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
49762338dSopenharmony_ci * you may not use this file except in compliance with the License.
59762338dSopenharmony_ci * You may obtain a copy of the License at
69762338dSopenharmony_ci *
79762338dSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
89762338dSopenharmony_ci *
99762338dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
109762338dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
119762338dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
129762338dSopenharmony_ci * See the License for the specific language governing permissions and
139762338dSopenharmony_ci * limitations under the License.
149762338dSopenharmony_ci */
159762338dSopenharmony_ci#include <gtest/gtest.h>
169762338dSopenharmony_ci#include <benchmark/benchmark.h>
179762338dSopenharmony_ci#include "v3_0/codec_callback_service.h"
189762338dSopenharmony_ci#include "v3_0/icodec_callback.h"
199762338dSopenharmony_ci#include "v3_0/icodec_component_manager.h"
209762338dSopenharmony_ciusing namespace std;
219762338dSopenharmony_ciusing namespace testing::ext;
229762338dSopenharmony_ciusing OHOS::sptr;
239762338dSopenharmony_ciusing namespace OHOS::HDI::Codec::V3_0;
249762338dSopenharmony_ciconstexpr int64_t APP_DATA = 3;
259762338dSopenharmony_cinamespace {
269762338dSopenharmony_ciclass CodecBenchmarkManagerTest : public benchmark::Fixture {
279762338dSopenharmony_cipublic:
289762338dSopenharmony_ci    void SetUp(const ::benchmark::State &state)
299762338dSopenharmony_ci    {
309762338dSopenharmony_ci        manager_ = ICodecComponentManager::Get();
319762338dSopenharmony_ci        callback_ = new CodecCallbackService();
329762338dSopenharmony_ci    }
339762338dSopenharmony_ci    void TearDown(const ::benchmark::State &state)
349762338dSopenharmony_ci    {
359762338dSopenharmony_ci        manager_ = nullptr;
369762338dSopenharmony_ci        callback_ = nullptr;
379762338dSopenharmony_ci    }
389762338dSopenharmony_ci
399762338dSopenharmony_cipublic:
409762338dSopenharmony_ci    sptr<ICodecComponentManager> manager_;
419762338dSopenharmony_ci    sptr<ICodecCallback> callback_;
429762338dSopenharmony_ci};
439762338dSopenharmony_ci
449762338dSopenharmony_ciBENCHMARK_F(CodecBenchmarkManagerTest, GetComponentNum)(benchmark::State &state)
459762338dSopenharmony_ci{
469762338dSopenharmony_ci    ASSERT_TRUE(manager_ != nullptr);
479762338dSopenharmony_ci    int32_t count = 0;
489762338dSopenharmony_ci    int32_t ret;
499762338dSopenharmony_ci    for (auto _ : state) {
509762338dSopenharmony_ci        ret = manager_->GetComponentNum(count);
519762338dSopenharmony_ci    }
529762338dSopenharmony_ci    ASSERT_EQ(ret, HDF_SUCCESS);
539762338dSopenharmony_ci    EXPECT_TRUE(count >= 0);
549762338dSopenharmony_ci}
559762338dSopenharmony_ci
569762338dSopenharmony_ciBENCHMARK_REGISTER_F(CodecBenchmarkManagerTest, GetComponentNum)->
579762338dSopenharmony_ci    Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
589762338dSopenharmony_ci
599762338dSopenharmony_ciBENCHMARK_F(CodecBenchmarkManagerTest, GetComponentCapabilityList)(benchmark::State &state)
609762338dSopenharmony_ci{
619762338dSopenharmony_ci    ASSERT_TRUE(manager_ != nullptr);
629762338dSopenharmony_ci    int32_t count = 0;
639762338dSopenharmony_ci    auto ret = manager_->GetComponentNum(count);
649762338dSopenharmony_ci    ASSERT_EQ(ret, HDF_SUCCESS);
659762338dSopenharmony_ci    ASSERT_TRUE(count > 0);
669762338dSopenharmony_ci
679762338dSopenharmony_ci    std::vector<CodecCompCapability> capList;
689762338dSopenharmony_ci    for (auto _ : state) {
699762338dSopenharmony_ci        ret = manager_->GetComponentCapabilityList(capList, count);
709762338dSopenharmony_ci    }
719762338dSopenharmony_ci    ASSERT_EQ(ret, HDF_SUCCESS);
729762338dSopenharmony_ci}
739762338dSopenharmony_ci
749762338dSopenharmony_ciBENCHMARK_REGISTER_F(CodecBenchmarkManagerTest, GetComponentCapabilityList)->
759762338dSopenharmony_ci    Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
769762338dSopenharmony_ci
779762338dSopenharmony_ciBENCHMARK_F(CodecBenchmarkManagerTest, CreateComponent)(benchmark::State &state)
789762338dSopenharmony_ci{
799762338dSopenharmony_ci    ASSERT_TRUE(callback_ != nullptr);
809762338dSopenharmony_ci    ASSERT_TRUE(manager_ != nullptr);
819762338dSopenharmony_ci    sptr<ICodecComponent> component;
829762338dSopenharmony_ci    uint32_t componentId = 0;
839762338dSopenharmony_ci    int32_t ret;
849762338dSopenharmony_ci    for (auto _ : state) {
859762338dSopenharmony_ci        ret = manager_->CreateComponent(component, componentId, "", APP_DATA, callback_);
869762338dSopenharmony_ci    }
879762338dSopenharmony_ci    EXPECT_NE(ret, HDF_SUCCESS);
889762338dSopenharmony_ci    ASSERT_EQ(component, nullptr);
899762338dSopenharmony_ci}
909762338dSopenharmony_ci
919762338dSopenharmony_ciBENCHMARK_REGISTER_F(CodecBenchmarkManagerTest, CreateComponent)->
929762338dSopenharmony_ci    Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
939762338dSopenharmony_ci
949762338dSopenharmony_ciBENCHMARK_F(CodecBenchmarkManagerTest, DestoryComponent)(benchmark::State &state)
959762338dSopenharmony_ci{
969762338dSopenharmony_ci    ASSERT_TRUE(manager_ != nullptr);
979762338dSopenharmony_ci    std::string compName("");
989762338dSopenharmony_ci    int32_t count = 0;
999762338dSopenharmony_ci    auto ret = manager_->GetComponentNum(count);
1009762338dSopenharmony_ci    ASSERT_EQ(ret, HDF_SUCCESS);
1019762338dSopenharmony_ci    ASSERT_TRUE(count > 0);
1029762338dSopenharmony_ci
1039762338dSopenharmony_ci    std::vector<CodecCompCapability> capList;
1049762338dSopenharmony_ci    ret = manager_->GetComponentCapabilityList(capList, count);
1059762338dSopenharmony_ci    ASSERT_EQ(ret, HDF_SUCCESS);
1069762338dSopenharmony_ci
1079762338dSopenharmony_ci    compName = capList[0].compName;
1089762338dSopenharmony_ci    ASSERT_FALSE(compName.empty());
1099762338dSopenharmony_ci    sptr<ICodecComponent> component;
1109762338dSopenharmony_ci    uint32_t componentId = 0;
1119762338dSopenharmony_ci    ret = manager_->CreateComponent(component, componentId, compName, APP_DATA, callback_);
1129762338dSopenharmony_ci    ASSERT_EQ(ret, HDF_SUCCESS);
1139762338dSopenharmony_ci    for (auto _ : state) {
1149762338dSopenharmony_ci        if (componentId != 0) {
1159762338dSopenharmony_ci            manager_->DestroyComponent(componentId);
1169762338dSopenharmony_ci        }
1179762338dSopenharmony_ci    }
1189762338dSopenharmony_ci}
1199762338dSopenharmony_ci
1209762338dSopenharmony_ciBENCHMARK_REGISTER_F(CodecBenchmarkManagerTest, DestoryComponent)->
1219762338dSopenharmony_ci    Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
1229762338dSopenharmony_ci}  // namespace
123