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}