1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2020 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file expected in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci#include <fstream> 16094332d3Sopenharmony_ci#include "performance_hdi_test.h" 17094332d3Sopenharmony_cinamespace { 18094332d3Sopenharmony_ci const int CYCLE_TIMES = 1000; // 1000:Cycle 1000 times 19094332d3Sopenharmony_ci const int TIME_TRANSFORMATION_US = 1000000; // 1000000:1000000 microseconds 20094332d3Sopenharmony_ci std::ofstream g_writeIntoFile; 21094332d3Sopenharmony_ci} 22094332d3Sopenharmony_ci 23094332d3Sopenharmony_ciusing namespace OHOS; 24094332d3Sopenharmony_ciusing namespace std; 25094332d3Sopenharmony_ciusing namespace testing::ext; 26094332d3Sopenharmony_ciusing namespace OHOS::Camera; 27094332d3Sopenharmony_cifloat PerformanceHdiTest::calTime(struct timeval start, struct timeval end) 28094332d3Sopenharmony_ci{ 29094332d3Sopenharmony_ci float time_use = 0; 30094332d3Sopenharmony_ci time_use = (end.tv_sec - start.tv_sec) * TIME_TRANSFORMATION_US + (end.tv_usec - start.tv_usec); 31094332d3Sopenharmony_ci return time_use; 32094332d3Sopenharmony_ci // return time us 33094332d3Sopenharmony_ci} 34094332d3Sopenharmony_civoid PerformanceHdiTest::SetUpTestCase(void) {} 35094332d3Sopenharmony_civoid PerformanceHdiTest::TearDownTestCase(void) {} 36094332d3Sopenharmony_civoid PerformanceHdiTest::SetUp(void) 37094332d3Sopenharmony_ci{ 38094332d3Sopenharmony_ci Test_ = std::make_shared<OHOS::Camera::Test>(); 39094332d3Sopenharmony_ci Test_->Init(); 40094332d3Sopenharmony_ci} 41094332d3Sopenharmony_civoid PerformanceHdiTest::TearDown(void) 42094332d3Sopenharmony_ci{ 43094332d3Sopenharmony_ci Test_->Close(); 44094332d3Sopenharmony_ci} 45094332d3Sopenharmony_ci 46094332d3Sopenharmony_ci/** 47094332d3Sopenharmony_ci * @tc.name: HDI_GetCameraIds's time consuming. 48094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 49094332d3Sopenharmony_ci * @tc.size: MediumTest 50094332d3Sopenharmony_ci * @tc.type: Function 51094332d3Sopenharmony_ci */ 52094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0010, TestSize.Level3) 53094332d3Sopenharmony_ci{ 54094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_GetCameraIds's time consuming."<< std::endl; 55094332d3Sopenharmony_ci struct timeval start; 56094332d3Sopenharmony_ci struct timeval end; 57094332d3Sopenharmony_ci float time_use; 58094332d3Sopenharmony_ci float totle_time_use = 0; 59094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 60094332d3Sopenharmony_ci for (int i= 0; i < CYCLE_TIMES; i++) { 61094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 62094332d3Sopenharmony_ci gettimeofday(&start, NULL); 63094332d3Sopenharmony_ci Test_->rc = Test_->service->GetCameraIds(Test_->cameraIds); 64094332d3Sopenharmony_ci gettimeofday(&end, NULL); 65094332d3Sopenharmony_ci time_use = calTime(start, end); 66094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 67094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 68094332d3Sopenharmony_ci } 69094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 70094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_GetCameraIds's average time consuming: "; 71094332d3Sopenharmony_ci std::cout << avrg_time << "us." << std::endl; 72094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_GetCameraIds's average time consuming: "; 73094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us." << std::endl; 74094332d3Sopenharmony_ci} 75094332d3Sopenharmony_ci 76094332d3Sopenharmony_ci/** 77094332d3Sopenharmony_ci * @tc.name: GetCameraAbility 78094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 79094332d3Sopenharmony_ci * @tc.size: MediumTest 80094332d3Sopenharmony_ci * @tc.type: Function 81094332d3Sopenharmony_ci */ 82094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0020, TestSize.Level0) 83094332d3Sopenharmony_ci{ 84094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: GetCameraAbility's average time consuming." << std::endl; 85094332d3Sopenharmony_ci struct timeval start; 86094332d3Sopenharmony_ci struct timeval end; 87094332d3Sopenharmony_ci float time_use; 88094332d3Sopenharmony_ci float totle_time_use = 0; 89094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 90094332d3Sopenharmony_ci if (Test_->cameraDevice == nullptr) { 91094332d3Sopenharmony_ci Test_->rc = Test_->service->GetCameraIds(Test_->cameraIds); 92094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 93094332d3Sopenharmony_ci for (int i= 0; i < CYCLE_TIMES; i++) { 94094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 95094332d3Sopenharmony_ci gettimeofday(&start, NULL); 96094332d3Sopenharmony_ci Test_->rc = Test_->service->GetCameraAbility(Test_->cameraIds.front(), Test_->ability); 97094332d3Sopenharmony_ci gettimeofday(&end, NULL); 98094332d3Sopenharmony_ci time_use = calTime(start, end); 99094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 100094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 101094332d3Sopenharmony_ci } 102094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 103094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: GetCameraAbility's average time consuming: "; 104094332d3Sopenharmony_ci std::cout << avrg_time << "us." << std::endl; 105094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: GetCameraAbility's average time consuming: "; 106094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us." << std::endl; 107094332d3Sopenharmony_ci } 108094332d3Sopenharmony_ci} 109094332d3Sopenharmony_ci 110094332d3Sopenharmony_ci/** 111094332d3Sopenharmony_ci * @tc.name: HDI_OpenCamera's time consuming. 112094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 113094332d3Sopenharmony_ci * @tc.size: MediumTest 114094332d3Sopenharmony_ci * @tc.type: Function 115094332d3Sopenharmony_ci */ 116094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0030, TestSize.Level3) 117094332d3Sopenharmony_ci{ 118094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_OpenCamera's time consuming."<< std::endl; 119094332d3Sopenharmony_ci Test_->service->GetCameraIds(Test_->cameraIds); 120094332d3Sopenharmony_ci std::string cameraId = Test_->cameraIds.front(); 121094332d3Sopenharmony_ci Test_->CreateDeviceCallback(); 122094332d3Sopenharmony_ci struct timeval start; 123094332d3Sopenharmony_ci struct timeval end; 124094332d3Sopenharmony_ci float time_use; 125094332d3Sopenharmony_ci float totle_time_use = 0; 126094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 127094332d3Sopenharmony_ci for (int i= 0; i < CYCLE_TIMES; i++) { 128094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 129094332d3Sopenharmony_ci gettimeofday(&start, NULL); 130094332d3Sopenharmony_ci Test_->rc = Test_->service->OpenCamera(cameraId, Test_->deviceCallback, Test_->cameraDevice); 131094332d3Sopenharmony_ci gettimeofday(&end, NULL); 132094332d3Sopenharmony_ci time_use = calTime(start, end); 133094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 134094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 135094332d3Sopenharmony_ci } 136094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 137094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_OpenCamera's average time consuming: "; 138094332d3Sopenharmony_ci std::cout << avrg_time << "us." << std::endl; 139094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_OpenCamera's average time consuming: "; 140094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us." << std::endl; 141094332d3Sopenharmony_ci g_writeIntoFile.close(); 142094332d3Sopenharmony_ci} 143094332d3Sopenharmony_ci 144094332d3Sopenharmony_ci/** 145094332d3Sopenharmony_ci * @tc.name: HDI_SetFlashlight's time consuming. 146094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 147094332d3Sopenharmony_ci * @tc.size: MediumTest 148094332d3Sopenharmony_ci * @tc.type: Function 149094332d3Sopenharmony_ci */ 150094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0040, TestSize.Level3) 151094332d3Sopenharmony_ci{ 152094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_SetFlashlight's time consuming." << std::endl; 153094332d3Sopenharmony_ci // Open camera 154094332d3Sopenharmony_ci Test_->Open(); 155094332d3Sopenharmony_ci // Cycle to turn on and off the flashlight 156094332d3Sopenharmony_ci struct timeval start; 157094332d3Sopenharmony_ci struct timeval end; 158094332d3Sopenharmony_ci float time_use; 159094332d3Sopenharmony_ci float totle_time_use = 0; 160094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES / 2; i++) { 161094332d3Sopenharmony_ci bool status; 162094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 163094332d3Sopenharmony_ci // Turn on the flashlight 164094332d3Sopenharmony_ci status = true; 165094332d3Sopenharmony_ci gettimeofday(&start, NULL); 166094332d3Sopenharmony_ci Test_->rc = Test_->service->SetFlashlight(Test_->cameraIds.front(), status); 167094332d3Sopenharmony_ci gettimeofday(&end, NULL); 168094332d3Sopenharmony_ci time_use = calTime(start, end); 169094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 170094332d3Sopenharmony_ci // Turn off the flashlight 171094332d3Sopenharmony_ci status = false; 172094332d3Sopenharmony_ci gettimeofday(&start, NULL); 173094332d3Sopenharmony_ci Test_->rc = Test_->service->SetFlashlight(Test_->cameraIds.front(), status); 174094332d3Sopenharmony_ci gettimeofday(&end, NULL); 175094332d3Sopenharmony_ci time_use = calTime(start, end); 176094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 177094332d3Sopenharmony_ci } 178094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 179094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_SetFlashlight's average time consuming: "; 180094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 181094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_SetFlashlight's average time consuming: "; 182094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 183094332d3Sopenharmony_ci g_writeIntoFile.close(); 184094332d3Sopenharmony_ci} 185094332d3Sopenharmony_ci 186094332d3Sopenharmony_ci/** 187094332d3Sopenharmony_ci * @tc.name: GetStreamOperator's time consuming. 188094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 189094332d3Sopenharmony_ci * @tc.size: MediumTest 190094332d3Sopenharmony_ci * @tc.type: Function 191094332d3Sopenharmony_ci */ 192094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0050, TestSize.Level3) 193094332d3Sopenharmony_ci{ 194094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: GetStreamOperator success, 1000 times." << std::endl; 195094332d3Sopenharmony_ci // Get the configured cameraId 196094332d3Sopenharmony_ci Test_->service->GetCameraIds(Test_->cameraIds); 197094332d3Sopenharmony_ci std::cout << "cameraIds.front() = " << Test_->cameraIds.front() << std::endl; 198094332d3Sopenharmony_ci // Open camera 199094332d3Sopenharmony_ci Test_->Open(); 200094332d3Sopenharmony_ci // Call the GetStreamOperator function of the device to get the streamOperator 201094332d3Sopenharmony_ci Test_->CreateStreamOperatorCallback(); 202094332d3Sopenharmony_ci struct timeval start; 203094332d3Sopenharmony_ci struct timeval end; 204094332d3Sopenharmony_ci float time_use; 205094332d3Sopenharmony_ci float totle_time_use = 0; 206094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 207094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 208094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 209094332d3Sopenharmony_ci gettimeofday(&start, NULL); 210094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 211094332d3Sopenharmony_ci gettimeofday(&end, NULL); 212094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 213094332d3Sopenharmony_ci time_use = calTime(start, end); 214094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 215094332d3Sopenharmony_ci } 216094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 217094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_cameraDevice->GetStreamOperator's average time: "; 218094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 219094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_cameraDevice->GetStreamOperator's average time: "; 220094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 221094332d3Sopenharmony_ci g_writeIntoFile.close(); 222094332d3Sopenharmony_ci} 223094332d3Sopenharmony_ci 224094332d3Sopenharmony_ci/** 225094332d3Sopenharmony_ci * @tc.name: HDI_UpdateSettings's time consuming. 226094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 227094332d3Sopenharmony_ci * @tc.size: MediumTest 228094332d3Sopenharmony_ci * @tc.type: Function 229094332d3Sopenharmony_ci */ 230094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0060, TestSize.Level3) 231094332d3Sopenharmony_ci{ 232094332d3Sopenharmony_ci std::cout << "==========[test log] Check HDI_UpdateSettings's time consuming." << std::endl; 233094332d3Sopenharmony_ci Test_->Open(); 234094332d3Sopenharmony_ci // Issue 3A parameters 235094332d3Sopenharmony_ci std::shared_ptr<Camera::CameraSetting> meta = std::make_shared<Camera::CameraSetting>(100, 2000); 236094332d3Sopenharmony_ci std::vector<uint8_t> awbMode = { 237094332d3Sopenharmony_ci OHOS_CAMERA_AWB_MODE_OFF, 238094332d3Sopenharmony_ci OHOS_CAMERA_AWB_MODE_TWILIGHT, 239094332d3Sopenharmony_ci OHOS_CAMERA_AWB_MODE_AUTO, 240094332d3Sopenharmony_ci OHOS_CAMERA_AWB_MODE_WARM_FLUORESCENT, 241094332d3Sopenharmony_ci OHOS_CAMERA_AWB_MODE_DAYLIGHT, 242094332d3Sopenharmony_ci OHOS_CAMERA_AWB_MODE_CLOUDY_DAYLIGHT, 243094332d3Sopenharmony_ci OHOS_CAMERA_AWB_MODE_INCANDESCENT, 244094332d3Sopenharmony_ci OHOS_CAMERA_AWB_MODE_FLUORESCENT, 245094332d3Sopenharmony_ci OHOS_CAMERA_AWB_MODE_SHADE 246094332d3Sopenharmony_ci }; 247094332d3Sopenharmony_ci struct timeval start; 248094332d3Sopenharmony_ci struct timeval end; 249094332d3Sopenharmony_ci float time_use; 250094332d3Sopenharmony_ci float totle_time_use = 0; 251094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 252094332d3Sopenharmony_ci for (int round = 0; round < CYCLE_TIMES; round ++) { 253094332d3Sopenharmony_ci int i = rand() % 9; 254094332d3Sopenharmony_ci std::cout << "round = "<< round << ", i = " << i << std::endl; 255094332d3Sopenharmony_ci meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode.at(i), 1); 256094332d3Sopenharmony_ci gettimeofday(&start, NULL); 257094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->UpdateSettings(meta); 258094332d3Sopenharmony_ci gettimeofday(&end, NULL); 259094332d3Sopenharmony_ci std::cout << "rc = "<< Test_->rc << std::endl; 260094332d3Sopenharmony_ci time_use = calTime(start, end); 261094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 262094332d3Sopenharmony_ci } 263094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 264094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_UpdateSettings's turn on average time : "; 265094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 266094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_UpdateSettings's turn on average time : "; 267094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 268094332d3Sopenharmony_ci g_writeIntoFile.close(); 269094332d3Sopenharmony_ci} 270094332d3Sopenharmony_ci 271094332d3Sopenharmony_ci/** 272094332d3Sopenharmony_ci * @tc.name: SetResultMode's time consuming. 273094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 274094332d3Sopenharmony_ci * @tc.size: MediumTest 275094332d3Sopenharmony_ci * @tc.type: Function 276094332d3Sopenharmony_ci */ 277094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0070, TestSize.Level3) 278094332d3Sopenharmony_ci{ 279094332d3Sopenharmony_ci std::cout << "==========[test log]Check Performance: HDI_cameraDevice->SetResultMode's average time" << std::endl; 280094332d3Sopenharmony_ci struct timeval start; 281094332d3Sopenharmony_ci struct timeval end; 282094332d3Sopenharmony_ci float time_use; 283094332d3Sopenharmony_ci float totle_time_use = 0; 284094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 285094332d3Sopenharmony_ci Test_->Open(); 286094332d3Sopenharmony_ci EXPECT_EQ(true, Test_->cameraDevice != nullptr); 287094332d3Sopenharmony_ci std::vector<Camera::MetaType> enableTypes; 288094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->GetEnabledResults(enableTypes); 289094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 290094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 291094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 292094332d3Sopenharmony_ci gettimeofday(&start, NULL); 293094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->SetResultMode(Camera::PER_FRAME); 294094332d3Sopenharmony_ci gettimeofday(&end, NULL); 295094332d3Sopenharmony_ci time_use = calTime(start, end); 296094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 297094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 298094332d3Sopenharmony_ci } 299094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 300094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_cameraDevice->SetResultMode's average time: "; 301094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 302094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_cameraDevice->SetResultMode's average time: "; 303094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 304094332d3Sopenharmony_ci g_writeIntoFile.close(); 305094332d3Sopenharmony_ci} 306094332d3Sopenharmony_ci 307094332d3Sopenharmony_ci/** 308094332d3Sopenharmony_ci * @tc.name: GetEnabledResults 309094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 310094332d3Sopenharmony_ci * @tc.size: MediumTest 311094332d3Sopenharmony_ci * @tc.type: Function 312094332d3Sopenharmony_ci */ 313094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0080, TestSize.Level3) 314094332d3Sopenharmony_ci{ 315094332d3Sopenharmony_ci std::cout << "==========[test log]Performance: HDI_cameraDevice->GetEnabledResults's average time." << std::endl; 316094332d3Sopenharmony_ci struct timeval start; 317094332d3Sopenharmony_ci struct timeval end; 318094332d3Sopenharmony_ci float time_use; 319094332d3Sopenharmony_ci float totle_time_use = 0; 320094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 321094332d3Sopenharmony_ci Test_->Open(); 322094332d3Sopenharmony_ci std::vector<Camera::MetaType> results; 323094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 324094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 325094332d3Sopenharmony_ci gettimeofday(&start, NULL); 326094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->GetEnabledResults(results); 327094332d3Sopenharmony_ci gettimeofday(&end, NULL); 328094332d3Sopenharmony_ci time_use = calTime(start, end); 329094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 330094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 331094332d3Sopenharmony_ci } 332094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 333094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_cameraDevice->GetEnabledResults's average time: "; 334094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 335094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_cameraDevice->GetEnabledResults's average time: "; 336094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 337094332d3Sopenharmony_ci g_writeIntoFile.close(); 338094332d3Sopenharmony_ci} 339094332d3Sopenharmony_ci 340094332d3Sopenharmony_ci/** 341094332d3Sopenharmony_ci * @tc.name: EnableResult 342094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 343094332d3Sopenharmony_ci * @tc.size: MediumTest 344094332d3Sopenharmony_ci * @tc.type: Function 345094332d3Sopenharmony_ci */ 346094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0090, TestSize.Level3) 347094332d3Sopenharmony_ci{ 348094332d3Sopenharmony_ci std::cout << "==========[test log]Performance: HDI_cameraDevice->EnableResult's average time." << std::endl; 349094332d3Sopenharmony_ci struct timeval start; 350094332d3Sopenharmony_ci struct timeval end; 351094332d3Sopenharmony_ci float time_use; 352094332d3Sopenharmony_ci float totle_time_use = 0; 353094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 354094332d3Sopenharmony_ci Test_->Open(); 355094332d3Sopenharmony_ci // Get the parameter tag currently supported by the device 356094332d3Sopenharmony_ci std::cout << "==========[test log]Check hdi_device: 1. Get the tags..." << std::endl; 357094332d3Sopenharmony_ci std::vector<Camera::MetaType> results_original; 358094332d3Sopenharmony_ci results_original.push_back(OHOS_SENSOR_EXPOSURE_TIME); 359094332d3Sopenharmony_ci results_original.push_back(OHOS_SENSOR_COLOR_CORRECTION_GAINS); 360094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->GetEnabledResults(results_original); 361094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 362094332d3Sopenharmony_ci // Add this tag 363094332d3Sopenharmony_ci std::vector<Camera::MetaType> enable_tag; 364094332d3Sopenharmony_ci enable_tag.push_back(results_original[1]); 365094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 366094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 367094332d3Sopenharmony_ci gettimeofday(&start, NULL); 368094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->EnableResult(enable_tag); 369094332d3Sopenharmony_ci gettimeofday(&end, NULL); 370094332d3Sopenharmony_ci time_use = calTime(start, end); 371094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 372094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 373094332d3Sopenharmony_ci } 374094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 375094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_cameraDevice->EnableResult's average time: "; 376094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 377094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_cameraDevice->EnableResult's average time: "; 378094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 379094332d3Sopenharmony_ci g_writeIntoFile.close(); 380094332d3Sopenharmony_ci} 381094332d3Sopenharmony_ci 382094332d3Sopenharmony_ci/** 383094332d3Sopenharmony_ci * @tc.name: DisableResult 384094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 385094332d3Sopenharmony_ci * @tc.size: MediumTest 386094332d3Sopenharmony_ci * @tc.type: Function 387094332d3Sopenharmony_ci */ 388094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0100, TestSize.Level3) 389094332d3Sopenharmony_ci{ 390094332d3Sopenharmony_ci std::cout << "==========[test log]Performance: HDI_cameraDevice->DisableResult's average time." << std::endl; 391094332d3Sopenharmony_ci struct timeval start; 392094332d3Sopenharmony_ci struct timeval end; 393094332d3Sopenharmony_ci float time_use; 394094332d3Sopenharmony_ci float totle_time_use = 0; 395094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 396094332d3Sopenharmony_ci Test_->Open(); 397094332d3Sopenharmony_ci // Get the parameter tag currently supported by the device 398094332d3Sopenharmony_ci std::cout << "==========[test log]Check hdi_device: 1. Get the tags..." << std::endl; 399094332d3Sopenharmony_ci std::vector<Camera::MetaType> results_original; 400094332d3Sopenharmony_ci results_original.push_back(OHOS_SENSOR_EXPOSURE_TIME); 401094332d3Sopenharmony_ci results_original.push_back(OHOS_SENSOR_COLOR_CORRECTION_GAINS); 402094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->GetEnabledResults(results_original); 403094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 404094332d3Sopenharmony_ci // Disable this tag 405094332d3Sopenharmony_ci std::vector<Camera::MetaType> disable_tag; 406094332d3Sopenharmony_ci disable_tag.push_back(results_original[1]); 407094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 408094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 409094332d3Sopenharmony_ci gettimeofday(&start, NULL); 410094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->DisableResult(disable_tag); 411094332d3Sopenharmony_ci gettimeofday(&end, NULL); 412094332d3Sopenharmony_ci time_use = calTime(start, end); 413094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 414094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 415094332d3Sopenharmony_ci } 416094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 417094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_cameraDevice->DisableResult's average time: "; 418094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 419094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_cameraDevice->DisableResult's average time: "; 420094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 421094332d3Sopenharmony_ci g_writeIntoFile.close(); 422094332d3Sopenharmony_ci} 423094332d3Sopenharmony_ci 424094332d3Sopenharmony_ci/** 425094332d3Sopenharmony_ci * @tc.name: IsStreamsSupported 426094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 427094332d3Sopenharmony_ci * @tc.size: MediumTest 428094332d3Sopenharmony_ci * @tc.type: Function 429094332d3Sopenharmony_ci */ 430094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0120, TestSize.Level0) 431094332d3Sopenharmony_ci{ 432094332d3Sopenharmony_ci std::cout << "==========[test log]Performance: HDI_IsStreamsSupported's average time." << std::endl; 433094332d3Sopenharmony_ci struct timeval start; 434094332d3Sopenharmony_ci struct timeval end; 435094332d3Sopenharmony_ci float time_use; 436094332d3Sopenharmony_ci float totle_time_use = 0; 437094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 438094332d3Sopenharmony_ci // Open camera 439094332d3Sopenharmony_ci Test_->Open(); 440094332d3Sopenharmony_ci EXPECT_EQ(false, Test_->cameraDevice == nullptr); 441094332d3Sopenharmony_ci // Get streamOperator 442094332d3Sopenharmony_ci Test_->CreateStreamOperatorCallback(); 443094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 444094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 445094332d3Sopenharmony_ci // Configure mode and modeSetting 446094332d3Sopenharmony_ci Camera::OperationMode mode = Camera::NORMAL; 447094332d3Sopenharmony_ci std::shared_ptr<CameraMetadata> modeSetting = 448094332d3Sopenharmony_ci std::make_shared<CameraMetadata>(2, 128); 449094332d3Sopenharmony_ci int64_t colorGains[4] = {0}; 450094332d3Sopenharmony_ci modeSetting->addEntry(OHOS_SENSOR_COLOR_CORRECTION_GAINS, &colorGains, 4); 451094332d3Sopenharmony_ci int64_t expoTime = 0; 452094332d3Sopenharmony_ci modeSetting->addEntry(OHOS_SENSOR_EXPOSURE_TIME, &expoTime, 1); 453094332d3Sopenharmony_ci // Configure stream information 454094332d3Sopenharmony_ci Test_->streamInfo = std::make_shared<Camera::StreamInfo>(); 455094332d3Sopenharmony_ci Test_->streamInfo->streamId_ = 1001; // 1001:streamId 456094332d3Sopenharmony_ci Test_->streamInfo->dataspace_ = 8; 457094332d3Sopenharmony_ci Test_->streamInfo->intent_ = Camera::PREVIEW; 458094332d3Sopenharmony_ci Test_->streamInfo->width_ = 640; // 640:Stream width 459094332d3Sopenharmony_ci Test_->streamInfo->height_ = 480; // 480:Stream height 460094332d3Sopenharmony_ci Test_->StreamInfoFormat(); 461094332d3Sopenharmony_ci Test_->streamInfo->tunneledMode_ = 5; 462094332d3Sopenharmony_ci std::shared_ptr<OHOS::Camera::Test::StreamConsumer> consumer = 463094332d3Sopenharmony_ci std::make_shared<OHOS::Camera::Test::StreamConsumer>(); 464094332d3Sopenharmony_ci#ifdef CAMERA_BUILT_ON_OHOS_LITE 465094332d3Sopenharmony_ci Test_->streamInfo->bufferQueue_ = consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) { 466094332d3Sopenharmony_ci Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize()); 467094332d3Sopenharmony_ci }); 468094332d3Sopenharmony_ci#else 469094332d3Sopenharmony_ci Test_->streamInfo->bufferQueue_ = consumer->CreateProducer([this](void* addr, uint32_t size) { 470094332d3Sopenharmony_ci Test_->SaveYUV("preview", addr, size); 471094332d3Sopenharmony_ci }); 472094332d3Sopenharmony_ci#endif 473094332d3Sopenharmony_ci Test_->streamInfo->bufferQueue_->SetQueueSize(8); 474094332d3Sopenharmony_ci Test_->consumerMap_[Test_->streamInfo->intent_] = consumer; 475094332d3Sopenharmony_ci Camera::StreamSupportType pType; 476094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 477094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 478094332d3Sopenharmony_ci gettimeofday(&start, NULL); 479094332d3Sopenharmony_ci std::vector<std::shared_ptr<OHOS::Camera::StreamInfo>> stre; 480094332d3Sopenharmony_ci stre.push_back(Test_->streamInfo); 481094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->IsStreamsSupported(NORMAL, modeSetting, stre, pType); 482094332d3Sopenharmony_ci gettimeofday(&end, NULL); 483094332d3Sopenharmony_ci time_use = calTime(start, end); 484094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 485094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 486094332d3Sopenharmony_ci } 487094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 488094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_IsStreamsSupported's average time: "; 489094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 490094332d3Sopenharmony_ci g_writeIntoFile << "HDI_IsStreamsSupported's average time: " << avrg_time << "us. " << std::endl; 491094332d3Sopenharmony_ci g_writeIntoFile.close(); 492094332d3Sopenharmony_ci} 493094332d3Sopenharmony_ci 494094332d3Sopenharmony_ci/** 495094332d3Sopenharmony_ci * @tc.name: HDI_CreateStreams's time consuming. 496094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 497094332d3Sopenharmony_ci * @tc.size: MediumTest 498094332d3Sopenharmony_ci * @tc.type: Function 499094332d3Sopenharmony_ci */ 500094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0130, TestSize.Level3) 501094332d3Sopenharmony_ci{ 502094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_CreateStreams's time consuming." << std::endl; 503094332d3Sopenharmony_ci struct timeval start; 504094332d3Sopenharmony_ci struct timeval end; 505094332d3Sopenharmony_ci float time_use; 506094332d3Sopenharmony_ci float totle_time_use = 0; 507094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 508094332d3Sopenharmony_ci Test_->Open(); 509094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i ++) { 510094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 511094332d3Sopenharmony_ci // Create and get streamOperator information 512094332d3Sopenharmony_ci Test_->CreateStreamOperatorCallback(); 513094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 514094332d3Sopenharmony_ci EXPECT_EQ(false, Test_->rc != Camera::NO_ERROR || Test_->streamOperator == nullptr); 515094332d3Sopenharmony_ci // Create data flow 516094332d3Sopenharmony_ci Test_->streamInfo = std::make_shared<Camera::StreamInfo>(); 517094332d3Sopenharmony_ci Test_->streamInfo->streamId_ = 1001; 518094332d3Sopenharmony_ci Test_->streamInfo->width_ = 1920; 519094332d3Sopenharmony_ci Test_->streamInfo->height_ = 1080; 520094332d3Sopenharmony_ci Test_->StreamInfoFormat(); 521094332d3Sopenharmony_ci Test_->streamInfo->dataspace_ = 10; 522094332d3Sopenharmony_ci Test_->streamInfo->intent_ = Camera::PREVIEW; 523094332d3Sopenharmony_ci Test_->streamInfo->tunneledMode_ = 5; 524094332d3Sopenharmony_ci std::shared_ptr<OHOS::Camera::Test::StreamConsumer> preview_consumer = 525094332d3Sopenharmony_ci std::make_shared<OHOS::Camera::Test::StreamConsumer>(); 526094332d3Sopenharmony_ci#ifdef CAMERA_BUILT_ON_OHOS_LITE 527094332d3Sopenharmony_ci Test_->streamInfo->bufferQueue_ = preview_consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) { 528094332d3Sopenharmony_ci Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize()); 529094332d3Sopenharmony_ci }); 530094332d3Sopenharmony_ci#else 531094332d3Sopenharmony_ci Test_->streamInfo->bufferQueue_ = preview_consumer->CreateProducer([this](void* addr, uint32_t size) { 532094332d3Sopenharmony_ci Test_->SaveYUV("preview", addr, size); 533094332d3Sopenharmony_ci }); 534094332d3Sopenharmony_ci#endif 535094332d3Sopenharmony_ci Test_->streamInfo->bufferQueue_->SetQueueSize(8); 536094332d3Sopenharmony_ci Test_->consumerMap_[Camera::PREVIEW] = preview_consumer; 537094332d3Sopenharmony_ci std::vector<std::shared_ptr<Camera::StreamInfo>>().swap(Test_->streamInfos); 538094332d3Sopenharmony_ci Test_->streamInfos.push_back(Test_->streamInfo); 539094332d3Sopenharmony_ci gettimeofday(&start, NULL); 540094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->CreateStreams(Test_->streamInfos); 541094332d3Sopenharmony_ci gettimeofday(&end, NULL); 542094332d3Sopenharmony_ci std::cout << "streamOperator->CreateStreams's rc " << Test_->rc << std::endl; 543094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 544094332d3Sopenharmony_ci time_use = calTime(start, end); 545094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 546094332d3Sopenharmony_ci // Release stream 547094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->ReleaseStreams({1001}); 548094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 549094332d3Sopenharmony_ci } 550094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 551094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_CreateStreams's average time consuming: "; 552094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 553094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_CreateStreams's average time consuming: "; 554094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 555094332d3Sopenharmony_ci g_writeIntoFile.close(); 556094332d3Sopenharmony_ci} 557094332d3Sopenharmony_ci 558094332d3Sopenharmony_ci/** 559094332d3Sopenharmony_ci * @tc.name: HDI_ReleaseStreams's time consuming. 560094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 561094332d3Sopenharmony_ci * @tc.size: MediumTest 562094332d3Sopenharmony_ci * @tc.type: Function 563094332d3Sopenharmony_ci */ 564094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0160, TestSize.Level3) 565094332d3Sopenharmony_ci{ 566094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_ReleaseStreams's time consuming."<< std::endl; 567094332d3Sopenharmony_ci struct timeval start; 568094332d3Sopenharmony_ci struct timeval end; 569094332d3Sopenharmony_ci float time_use; 570094332d3Sopenharmony_ci float totle_time_use = 0; 571094332d3Sopenharmony_ci Test_->Open(); 572094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 573094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i ++) { 574094332d3Sopenharmony_ci std::cout << "CYCLE_TIMES =" << i << std::endl; 575094332d3Sopenharmony_ci // Start stream 576094332d3Sopenharmony_ci Test_->intents = {Camera::PREVIEW}; 577094332d3Sopenharmony_ci Test_->StartStream(Test_->intents); 578094332d3Sopenharmony_ci // Release stream 579094332d3Sopenharmony_ci gettimeofday(&start, NULL); 580094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->ReleaseStreams({Test_->streamId_preview}); 581094332d3Sopenharmony_ci gettimeofday(&end, NULL); 582094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 583094332d3Sopenharmony_ci time_use = calTime(start, end); 584094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 585094332d3Sopenharmony_ci } 586094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 587094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_ReleaseStreams's average time consuming: "; 588094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 589094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_ReleaseStreams's average time consuming: "; 590094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 591094332d3Sopenharmony_ci g_writeIntoFile.close(); 592094332d3Sopenharmony_ci} 593094332d3Sopenharmony_ci 594094332d3Sopenharmony_ci/** 595094332d3Sopenharmony_ci * @tc.name: CommitStreams's time consuming. 596094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 597094332d3Sopenharmony_ci * @tc.size: MediumTest 598094332d3Sopenharmony_ci * @tc.type: Function 599094332d3Sopenharmony_ci */ 600094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0170, TestSize.Level3) 601094332d3Sopenharmony_ci{ 602094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: CommitStreams's time consuming." << std::endl; 603094332d3Sopenharmony_ci 604094332d3Sopenharmony_ci struct timeval start; 605094332d3Sopenharmony_ci struct timeval end; 606094332d3Sopenharmony_ci float time_use; 607094332d3Sopenharmony_ci float totle_time_use = 0; 608094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 609094332d3Sopenharmony_ci Test_->Open(); 610094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i ++) { 611094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 612094332d3Sopenharmony_ci // Create and get streamOperator information 613094332d3Sopenharmony_ci Test_->CreateStreamOperatorCallback(); 614094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 615094332d3Sopenharmony_ci EXPECT_EQ(false, Test_->rc != Camera::NO_ERROR || Test_->streamOperator == nullptr); 616094332d3Sopenharmony_ci // Create data flow 617094332d3Sopenharmony_ci Test_->streamInfo = std::make_shared<Camera::StreamInfo>(); 618094332d3Sopenharmony_ci Test_->streamInfo->streamId_ = 1001; 619094332d3Sopenharmony_ci Test_->streamInfo->width_ = 1920; 620094332d3Sopenharmony_ci Test_->streamInfo->height_ = 1080; 621094332d3Sopenharmony_ci Test_->StreamInfoFormat(); 622094332d3Sopenharmony_ci Test_->streamInfo->dataspace_ = 10; 623094332d3Sopenharmony_ci Test_->streamInfo->intent_ = Camera::PREVIEW; 624094332d3Sopenharmony_ci Test_->streamInfo->tunneledMode_ = 5; 625094332d3Sopenharmony_ci std::shared_ptr<OHOS::Camera::Test::StreamConsumer> preview_consumer = 626094332d3Sopenharmony_ci std::make_shared<OHOS::Camera::Test::StreamConsumer>(); 627094332d3Sopenharmony_ci#ifdef CAMERA_BUILT_ON_OHOS_LITE 628094332d3Sopenharmony_ci Test_->streamInfo->bufferQueue_ = preview_consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) { 629094332d3Sopenharmony_ci Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize()); 630094332d3Sopenharmony_ci }); 631094332d3Sopenharmony_ci#else 632094332d3Sopenharmony_ci Test_->streamInfo->bufferQueue_ = preview_consumer->CreateProducer([this](void* addr, uint32_t size) { 633094332d3Sopenharmony_ci Test_->SaveYUV("preview", addr, size); 634094332d3Sopenharmony_ci }); 635094332d3Sopenharmony_ci#endif 636094332d3Sopenharmony_ci Test_->streamInfo->bufferQueue_->SetQueueSize(8); 637094332d3Sopenharmony_ci Test_->consumerMap_[Camera::PREVIEW] = preview_consumer; 638094332d3Sopenharmony_ci std::vector<std::shared_ptr<Camera::StreamInfo>>().swap(Test_->streamInfos); 639094332d3Sopenharmony_ci Test_->streamInfos.push_back(Test_->streamInfo); 640094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->CreateStreams(Test_->streamInfos); 641094332d3Sopenharmony_ci std::cout << "streamOperator->CreateStreams's rc " << Test_->rc << std::endl; 642094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 643094332d3Sopenharmony_ci // Flow distribution 644094332d3Sopenharmony_ci gettimeofday(&start, NULL); 645094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->CommitStreams(Camera::NORMAL, Test_->ability); 646094332d3Sopenharmony_ci gettimeofday(&end, NULL); 647094332d3Sopenharmony_ci std::cout << "streamOperator->CommitStreams's rc " << Test_->rc << std::endl; 648094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 649094332d3Sopenharmony_ci time_use = calTime(start, end); 650094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 651094332d3Sopenharmony_ci // Release stream 652094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->ReleaseStreams({1001}); 653094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 654094332d3Sopenharmony_ci } 655094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 656094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: CommitStreams's average time consuming: "; 657094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 658094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: CommitStreams's average time consuming: "; 659094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 660094332d3Sopenharmony_ci g_writeIntoFile.close(); 661094332d3Sopenharmony_ci} 662094332d3Sopenharmony_ci 663094332d3Sopenharmony_ci/** 664094332d3Sopenharmony_ci * @tc.name: GetStreamAttributes 665094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 666094332d3Sopenharmony_ci * @tc.size: MediumTest 667094332d3Sopenharmony_ci * @tc.type: Function 668094332d3Sopenharmony_ci */ 669094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0180, TestSize.Level3) 670094332d3Sopenharmony_ci{ 671094332d3Sopenharmony_ci std::cout << "==========[test log]Check Performance: HDI_GetStreamAttributes's average time." << std::endl; 672094332d3Sopenharmony_ci struct timeval start; 673094332d3Sopenharmony_ci struct timeval end; 674094332d3Sopenharmony_ci float time_use; 675094332d3Sopenharmony_ci float totle_time_use = 0; 676094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 677094332d3Sopenharmony_ci Test_->Open(); 678094332d3Sopenharmony_ci // Start stream 679094332d3Sopenharmony_ci Test_->intents = {Camera::PREVIEW}; 680094332d3Sopenharmony_ci Test_->StartStream(Test_->intents); 681094332d3Sopenharmony_ci std::vector<std::shared_ptr<Camera::StreamAttribute>> attributes; 682094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 683094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 684094332d3Sopenharmony_ci gettimeofday(&start, NULL); 685094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->GetStreamAttributes(attributes); 686094332d3Sopenharmony_ci gettimeofday(&end, NULL); 687094332d3Sopenharmony_ci time_use = calTime(start, end); 688094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 689094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 690094332d3Sopenharmony_ci } 691094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 692094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_GetStreamAttributes's average time: "; 693094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 694094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_GetStreamAttributes's average time: "; 695094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 696094332d3Sopenharmony_ci g_writeIntoFile.close(); 697094332d3Sopenharmony_ci // Release stream 698094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->ReleaseStreams({Test_->streamId_preview}); 699094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 700094332d3Sopenharmony_ci std::cout << "streamOperator->ReleaseStreams's rc " << Test_->rc << std::endl; 701094332d3Sopenharmony_ci} 702094332d3Sopenharmony_ci 703094332d3Sopenharmony_ci/** 704094332d3Sopenharmony_ci * @tc.name: HDI_Capture's time consuming. 705094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 706094332d3Sopenharmony_ci * @tc.size: MediumTest 707094332d3Sopenharmony_ci * @tc.type: Function 708094332d3Sopenharmony_ci */ 709094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0190, TestSize.Level3) 710094332d3Sopenharmony_ci{ 711094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_Capture's average time consuming." << std::endl; 712094332d3Sopenharmony_ci struct timeval start; 713094332d3Sopenharmony_ci struct timeval end; 714094332d3Sopenharmony_ci float time_use; 715094332d3Sopenharmony_ci float totle_time_use = 0; 716094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 717094332d3Sopenharmony_ci // Open camera 718094332d3Sopenharmony_ci Test_->Open(); 719094332d3Sopenharmony_ci // Start stream 720094332d3Sopenharmony_ci Test_->intents = {Camera::PREVIEW}; 721094332d3Sopenharmony_ci Test_->StartStream(Test_->intents); 722094332d3Sopenharmony_ci // Get preview 723094332d3Sopenharmony_ci int captureId = 2001; 724094332d3Sopenharmony_ci Test_->captureInfo = std::make_shared<Camera::CaptureInfo>(); 725094332d3Sopenharmony_ci Test_->captureInfo->streamIds_ = {Test_->streamId_preview}; 726094332d3Sopenharmony_ci Test_->captureInfo->captureSetting_ = Test_->ability; 727094332d3Sopenharmony_ci Test_->captureInfo->enableShutterCallback_ = true; 728094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 729094332d3Sopenharmony_ci std::cout << "CYCLE_TIMES =" << i << std::endl; 730094332d3Sopenharmony_ci gettimeofday(&start, NULL); 731094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->Capture(captureId, Test_->captureInfo, true); 732094332d3Sopenharmony_ci if (Test_->rc == Camera::NO_ERROR) { 733094332d3Sopenharmony_ci std::cout << "==========[test log]check Capture: Capture success, " << captureId << std::endl; 734094332d3Sopenharmony_ci } else { 735094332d3Sopenharmony_ci std::cout << "==========[test log]check Capture: Capture fail, rc = " << Test_->rc << std::endl; 736094332d3Sopenharmony_ci } 737094332d3Sopenharmony_ci gettimeofday(&end, NULL); 738094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 739094332d3Sopenharmony_ci time_use = calTime(start, end); 740094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 741094332d3Sopenharmony_ci sleep(1); 742094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->CancelCapture(captureId++); 743094332d3Sopenharmony_ci if (Test_->rc == Camera::NO_ERROR) { 744094332d3Sopenharmony_ci std::cout << "==========[test log]check Capture: CancelCapture success," << captureId << std::endl; 745094332d3Sopenharmony_ci } else { 746094332d3Sopenharmony_ci std::cout << "==========[test log]check Capture: CancelCapture fail, rc = " << Test_->rc << std::endl; 747094332d3Sopenharmony_ci std::cout << "captureId = " << captureId << std::endl; 748094332d3Sopenharmony_ci } 749094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 750094332d3Sopenharmony_ci } 751094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 752094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_Capture's average time consuming: "; 753094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 754094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_Capture's average time consuming: "; 755094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 756094332d3Sopenharmony_ci g_writeIntoFile.close(); 757094332d3Sopenharmony_ci // post-processing 758094332d3Sopenharmony_ci Test_->streamIds.push_back(Test_->streamId_preview); 759094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->ReleaseStreams(Test_->streamIds); 760094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 761094332d3Sopenharmony_ci} 762094332d3Sopenharmony_ci 763094332d3Sopenharmony_ci/** 764094332d3Sopenharmony_ci * @tc.name: HDI_CancelCapture's time consuming. 765094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 766094332d3Sopenharmony_ci * @tc.size: MediumTest 767094332d3Sopenharmony_ci * @tc.type: Function 768094332d3Sopenharmony_ci */ 769094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0200, TestSize.Level3) 770094332d3Sopenharmony_ci{ 771094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_CancelCapture's average time consuming." << std::endl; 772094332d3Sopenharmony_ci struct timeval start; 773094332d3Sopenharmony_ci struct timeval end; 774094332d3Sopenharmony_ci float time_use; 775094332d3Sopenharmony_ci float totle_time_use = 0; 776094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 777094332d3Sopenharmony_ci // Open camera 778094332d3Sopenharmony_ci Test_->Open(); 779094332d3Sopenharmony_ci // Start stream 780094332d3Sopenharmony_ci Test_->intents = {Camera::PREVIEW}; 781094332d3Sopenharmony_ci Test_->StartStream(Test_->intents); 782094332d3Sopenharmony_ci // Get preview 783094332d3Sopenharmony_ci int captureId = 2001; 784094332d3Sopenharmony_ci Test_->captureInfo = std::make_shared<Camera::CaptureInfo>(); 785094332d3Sopenharmony_ci Test_->captureInfo->streamIds_ = {Test_->streamId_preview}; 786094332d3Sopenharmony_ci Test_->captureInfo->captureSetting_ = Test_->ability; 787094332d3Sopenharmony_ci Test_->captureInfo->enableShutterCallback_ = true; 788094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 789094332d3Sopenharmony_ci std::cout << "CYCLE_TIMES =" << i << std::endl; 790094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->Capture(captureId, Test_->captureInfo, true); 791094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 792094332d3Sopenharmony_ci sleep(1); 793094332d3Sopenharmony_ci gettimeofday(&start, NULL); 794094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->CancelCapture(captureId); 795094332d3Sopenharmony_ci gettimeofday(&end, NULL); 796094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 797094332d3Sopenharmony_ci time_use = calTime(start, end); 798094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 799094332d3Sopenharmony_ci captureId++; 800094332d3Sopenharmony_ci } 801094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 802094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_CancelCapture's average time consuming: "; 803094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 804094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_CancelCapture's average time consuming: "; 805094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 806094332d3Sopenharmony_ci g_writeIntoFile.close(); 807094332d3Sopenharmony_ci // post-processing 808094332d3Sopenharmony_ci Test_->streamIds.push_back(Test_->streamId_preview); 809094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->ReleaseStreams(Test_->streamIds); 810094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 811094332d3Sopenharmony_ci} 812094332d3Sopenharmony_ci 813094332d3Sopenharmony_ci/** 814094332d3Sopenharmony_ci * @tc.name: AttachBufferQueue 815094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 816094332d3Sopenharmony_ci * @tc.size: MediumTest 817094332d3Sopenharmony_ci * @tc.type: Function 818094332d3Sopenharmony_ci */ 819094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0210, TestSize.Level3) 820094332d3Sopenharmony_ci{ 821094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_AttachBufferQueue's average time consuming." << std::endl; 822094332d3Sopenharmony_ci struct timeval start; 823094332d3Sopenharmony_ci struct timeval end; 824094332d3Sopenharmony_ci float time_use; 825094332d3Sopenharmony_ci float totle_time_use = 0; 826094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 827094332d3Sopenharmony_ci // Open camera 828094332d3Sopenharmony_ci Test_->Open(); 829094332d3Sopenharmony_ci Test_->CreateStreamOperatorCallback(); 830094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 831094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 832094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 833094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 834094332d3Sopenharmony_ci // Create data flow 835094332d3Sopenharmony_ci Test_->streamInfo = std::make_shared<Camera::StreamInfo>(); 836094332d3Sopenharmony_ci Test_->streamInfo->streamId_ = Test_->streamId_preview; 837094332d3Sopenharmony_ci Test_->streamInfo->width_ = 640; 838094332d3Sopenharmony_ci Test_->streamInfo->height_ = 480; 839094332d3Sopenharmony_ci Test_->StreamInfoFormat(); 840094332d3Sopenharmony_ci Test_->streamInfo->intent_ = Camera::PREVIEW; 841094332d3Sopenharmony_ci Test_->streamInfo->dataspace_ = 8; 842094332d3Sopenharmony_ci Test_->streamInfo->tunneledMode_ = 5; 843094332d3Sopenharmony_ci std::vector<std::shared_ptr<Camera::StreamInfo>>().swap(Test_->streamInfos); 844094332d3Sopenharmony_ci Test_->streamInfos.push_back(Test_->streamInfo); 845094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->CreateStreams(Test_->streamInfos); 846094332d3Sopenharmony_ci std::cout << "==========[test log]Check hdi: streamOperator->CreateStreams's rc " << Test_->rc << std::endl; 847094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 848094332d3Sopenharmony_ci // Flow distribution 849094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->CommitStreams(Camera::NORMAL, Test_->ability); 850094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 851094332d3Sopenharmony_ci std::cout << "==========[test log]Check hdi: streamOperator->CommitStreams's rc " << Test_->rc << std::endl; 852094332d3Sopenharmony_ci std::shared_ptr<OHOS::Camera::Test::StreamConsumer> consumer = 853094332d3Sopenharmony_ci std::make_shared<OHOS::Camera::Test::StreamConsumer>(); 854094332d3Sopenharmony_ci#ifdef CAMERA_BUILT_ON_OHOS_LITE 855094332d3Sopenharmony_ci std::shared_ptr<OHOS::Surface> producer = consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) { 856094332d3Sopenharmony_ci Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize()); 857094332d3Sopenharmony_ci }); 858094332d3Sopenharmony_ci#else 859094332d3Sopenharmony_ci OHOS::sptr<OHOS::IBufferProducer> producer = consumer->CreateProducer([this](void* addr, uint32_t size) { 860094332d3Sopenharmony_ci Test_->SaveYUV("preview", addr, size); 861094332d3Sopenharmony_ci }); 862094332d3Sopenharmony_ci#endif 863094332d3Sopenharmony_ci gettimeofday(&start, NULL); 864094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->AttachBufferQueue(Test_->streamInfo->streamId_, producer); 865094332d3Sopenharmony_ci std::cout << "==========[test log]Check hdi: streamOperator->AttachBufferQueue's rc " << Test_->rc << std::endl; 866094332d3Sopenharmony_ci gettimeofday(&end, NULL); 867094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 868094332d3Sopenharmony_ci time_use = calTime(start, end); 869094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 870094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->DetachBufferQueue(Test_->streamInfo->streamId_); 871094332d3Sopenharmony_ci std::cout << "==========[test log]Check hdi: streamOperator->DetachBufferQueue's rc " << Test_->rc << std::endl; 872094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 873094332d3Sopenharmony_ci // Release stream 874094332d3Sopenharmony_ci Test_->streamIds.push_back(Test_->streamId_preview); 875094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->ReleaseStreams(Test_->streamIds); 876094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 877094332d3Sopenharmony_ci } 878094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 879094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_AttachBufferQueue's average time consuming: "; 880094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 881094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_AttachBufferQueue's average time consuming: "; 882094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 883094332d3Sopenharmony_ci g_writeIntoFile.close(); 884094332d3Sopenharmony_ci} 885094332d3Sopenharmony_ci 886094332d3Sopenharmony_ci/** 887094332d3Sopenharmony_ci * @tc.name: DetachBufferQueue 888094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 889094332d3Sopenharmony_ci * @tc.size: MediumTest 890094332d3Sopenharmony_ci * @tc.type: Function 891094332d3Sopenharmony_ci */ 892094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0220, TestSize.Level3) 893094332d3Sopenharmony_ci{ 894094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_DetachBufferQueue's average time consuming." << std::endl; 895094332d3Sopenharmony_ci struct timeval start; 896094332d3Sopenharmony_ci struct timeval end; 897094332d3Sopenharmony_ci float time_use; 898094332d3Sopenharmony_ci float totle_time_use = 0; 899094332d3Sopenharmony_ci Test_->Open(); 900094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 901094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 902094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 903094332d3Sopenharmony_ci Test_->CreateStreamOperatorCallback(); 904094332d3Sopenharmony_ci Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 905094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 906094332d3Sopenharmony_ci // Create data flow 907094332d3Sopenharmony_ci Test_->streamInfo = std::make_shared<Camera::StreamInfo>(); 908094332d3Sopenharmony_ci Test_->streamInfo->intent_ = Camera::PREVIEW; 909094332d3Sopenharmony_ci Test_->streamInfo->streamId_ = Test_->streamId_preview; 910094332d3Sopenharmony_ci Test_->streamInfo->width_ = 640; 911094332d3Sopenharmony_ci Test_->streamInfo->height_ = 480; 912094332d3Sopenharmony_ci Test_->StreamInfoFormat(); 913094332d3Sopenharmony_ci Test_->streamInfo->dataspace_ = 8; 914094332d3Sopenharmony_ci Test_->streamInfo->tunneledMode_ = 5; 915094332d3Sopenharmony_ci std::vector<std::shared_ptr<Camera::StreamInfo>>().swap(Test_->streamInfos); 916094332d3Sopenharmony_ci Test_->streamInfos.push_back(Test_->streamInfo); 917094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->CreateStreams(Test_->streamInfos); 918094332d3Sopenharmony_ci std::cout << "==========[test log]Check hdi: streamOperator->CreateStreams's rc " << Test_->rc << std::endl; 919094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 920094332d3Sopenharmony_ci // Flow distribution 921094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->CommitStreams(Camera::NORMAL, Test_->ability); 922094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 923094332d3Sopenharmony_ci std::cout << "==========[test log]Check hdi: streamOperator->CommitStreams's rc " << Test_->rc << std::endl; 924094332d3Sopenharmony_ci std::shared_ptr<OHOS::Camera::Test::StreamConsumer> consumer = 925094332d3Sopenharmony_ci std::make_shared<OHOS::Camera::Test::StreamConsumer>(); 926094332d3Sopenharmony_ci#ifdef CAMERA_BUILT_ON_OHOS_LITE 927094332d3Sopenharmony_ci std::shared_ptr<OHOS::Surface> producer = consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) { 928094332d3Sopenharmony_ci Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize()); 929094332d3Sopenharmony_ci }); 930094332d3Sopenharmony_ci#else 931094332d3Sopenharmony_ci OHOS::sptr<OHOS::IBufferProducer> producer = consumer->CreateProducer([this](void* addr, uint32_t size) { 932094332d3Sopenharmony_ci Test_->SaveYUV("preview", addr, size); 933094332d3Sopenharmony_ci }); 934094332d3Sopenharmony_ci#endif 935094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->AttachBufferQueue(Test_->streamInfo->streamId_, producer); 936094332d3Sopenharmony_ci std::cout << "==========[test log]Check hdi: streamOperator->AttachBufferQueue's rc "; 937094332d3Sopenharmony_ci std::cout << Test_->rc << std::endl; 938094332d3Sopenharmony_ci gettimeofday(&start, NULL); 939094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->DetachBufferQueue(Test_->streamInfo->streamId_); 940094332d3Sopenharmony_ci std::cout << "==========[test log]Check hdi: streamOperator->DetachBufferQueue's rc "; 941094332d3Sopenharmony_ci std::cout << Test_->rc << std::endl; 942094332d3Sopenharmony_ci gettimeofday(&end, NULL); 943094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 944094332d3Sopenharmony_ci time_use = calTime(start, end); 945094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 946094332d3Sopenharmony_ci // Release stream 947094332d3Sopenharmony_ci Test_->streamIds.push_back(Test_->streamId_preview); 948094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->ReleaseStreams(Test_->streamIds); 949094332d3Sopenharmony_ci EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 950094332d3Sopenharmony_ci } 951094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 952094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_DetachBufferQueue's average time consuming: "; 953094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 954094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_DetachBufferQueue's average time consuming: "; 955094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 956094332d3Sopenharmony_ci g_writeIntoFile.close(); 957094332d3Sopenharmony_ci} 958094332d3Sopenharmony_ci 959094332d3Sopenharmony_ci/** 960094332d3Sopenharmony_ci * @tc.name: ChangeToOfflineStream 961094332d3Sopenharmony_ci * @tc.desc: the average time for 1000 times. 962094332d3Sopenharmony_ci * @tc.size: MediumTest 963094332d3Sopenharmony_ci * @tc.type: Function 964094332d3Sopenharmony_ci */ 965094332d3Sopenharmony_ciHWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0230, TestSize.Level0) 966094332d3Sopenharmony_ci{ 967094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_ChangeToOfflineStream's average time consuming." << std::endl; 968094332d3Sopenharmony_ci struct timeval start; 969094332d3Sopenharmony_ci struct timeval end; 970094332d3Sopenharmony_ci float time_use; 971094332d3Sopenharmony_ci float totle_time_use = 0; 972094332d3Sopenharmony_ci Test_->Open(); 973094332d3Sopenharmony_ci g_writeIntoFile.open("TimeConsuming.txt", ios::app); 974094332d3Sopenharmony_ci for (int i = 0; i < CYCLE_TIMES; i++) { 975094332d3Sopenharmony_ci std::cout << "Running " << i << " time" << std::endl; 976094332d3Sopenharmony_ci // 1、Configure two stream information 977094332d3Sopenharmony_ci Test_->intents = {Camera::PREVIEW, Camera::STILL_CAPTURE}; 978094332d3Sopenharmony_ci Test_->StartStream(Test_->intents); 979094332d3Sopenharmony_ci // 2、Capture preview stream 980094332d3Sopenharmony_ci Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true); 981094332d3Sopenharmony_ci // 3、Capture camera stream, continuous shooting 982094332d3Sopenharmony_ci Test_->StartCapture(Test_->streamId_capture, Test_->captureId_capture, false, true); 983094332d3Sopenharmony_ci sleep(1); 984094332d3Sopenharmony_ci // 4、Convert to offline stream 985094332d3Sopenharmony_ci Test_->CreateOfflineStreamOperatorCallback(); 986094332d3Sopenharmony_ci gettimeofday(&start, NULL); 987094332d3Sopenharmony_ci std::vector<int> offlineIds; 988094332d3Sopenharmony_ci offlineIds.push_back(Test_->streamId_capture); 989094332d3Sopenharmony_ci Test_->rc = Test_->streamOperator->ChangeToOfflineStream( 990094332d3Sopenharmony_ci offlineIds, Test_->offlineStreamOperatorCallback, Test_->offlineStreamOperator); 991094332d3Sopenharmony_ci gettimeofday(&end, NULL); 992094332d3Sopenharmony_ci ASSERT_EQ(Test_->rc, Camera::NO_ERROR); 993094332d3Sopenharmony_ci time_use = calTime(start, end); 994094332d3Sopenharmony_ci totle_time_use = totle_time_use + time_use; 995094332d3Sopenharmony_ci std::cout << "==========[test log] ChangeToOfflineStream rc = " << Test_->rc << std::endl; 996094332d3Sopenharmony_ci EXPECT_EQ(true, Test_->offlineStreamOperator != nullptr); 997094332d3Sopenharmony_ci if (Test_->rc == Camera::NO_ERROR) { 998094332d3Sopenharmony_ci std::cout << "==========[test log] offline StreamOperator != nullptr" << std::endl; 999094332d3Sopenharmony_ci } else { 1000094332d3Sopenharmony_ci std::cout << "==========[test log] offline StreamOperator == nullptr" << std::endl; 1001094332d3Sopenharmony_ci } 1002094332d3Sopenharmony_ci // 5、Post-processing of the original stream 1003094332d3Sopenharmony_ci Test_->captureIds = {Test_->captureId_preview, Test_->captureId_capture}; 1004094332d3Sopenharmony_ci Test_->streamIds.push_back(Test_->streamId_preview); 1005094332d3Sopenharmony_ci Test_->streamIds.push_back(Test_->streamId_capture); 1006094332d3Sopenharmony_ci Test_->StopStream(Test_->captureIds, Test_->streamIds); 1007094332d3Sopenharmony_ci // 6、Post-processing of offline streams 1008094332d3Sopenharmony_ci Test_->cameraDevice->Close(); 1009094332d3Sopenharmony_ci std::cout << "==========[test log] Pretend to wait 5s for callback..." << std::endl; 1010094332d3Sopenharmony_ci sleep(1); 1011094332d3Sopenharmony_ci Test_->StopOfflineStream(Test_->captureId_capture); 1012094332d3Sopenharmony_ci } 1013094332d3Sopenharmony_ci float avrg_time = totle_time_use / CYCLE_TIMES; 1014094332d3Sopenharmony_ci std::cout << "==========[test log] Performance: HDI_ChangeToOfflineStream's average time consuming: "; 1015094332d3Sopenharmony_ci std::cout << avrg_time << "us. " << std::endl; 1016094332d3Sopenharmony_ci g_writeIntoFile << "==========[test log] Performance: HDI_ChangeToOfflineStream's average time consuming: "; 1017094332d3Sopenharmony_ci g_writeIntoFile << avrg_time << "us. " << std::endl; 1018094332d3Sopenharmony_ci g_writeIntoFile.close(); 1019094332d3Sopenharmony_ci}