1 /*
2 * Copyright (c) 2020 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file expected in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <fstream>
16 #include "performance_hdi_test.h"
17 namespace {
18 const int CYCLE_TIMES = 1000; // 1000:Cycle 1000 times
19 const int TIME_TRANSFORMATION_US = 1000000; // 1000000:1000000 microseconds
20 std::ofstream g_writeIntoFile;
21 }
22
23 using namespace OHOS;
24 using namespace std;
25 using namespace testing::ext;
26 using namespace OHOS::Camera;
calTime(struct timeval start,struct timeval end)27 float PerformanceHdiTest::calTime(struct timeval start, struct timeval end)
28 {
29 float time_use = 0;
30 time_use = (end.tv_sec - start.tv_sec) * TIME_TRANSFORMATION_US + (end.tv_usec - start.tv_usec);
31 return time_use;
32 // return time us
33 }
SetUpTestCase(void)34 void PerformanceHdiTest::SetUpTestCase(void) {}
TearDownTestCase(void)35 void PerformanceHdiTest::TearDownTestCase(void) {}
SetUp(void)36 void PerformanceHdiTest::SetUp(void)
37 {
38 Test_ = std::make_shared<OHOS::Camera::Test>();
39 Test_->Init();
40 }
TearDown(void)41 void PerformanceHdiTest::TearDown(void)
42 {
43 Test_->Close();
44 }
45
46 /**
47 * @tc.name: HDI_GetCameraIds's time consuming.
48 * @tc.desc: the average time for 1000 times.
49 * @tc.size: MediumTest
50 * @tc.type: Function
51 */
52 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0010, TestSize.Level3)
53 {
54 std::cout << "==========[test log] Performance: HDI_GetCameraIds's time consuming."<< std::endl;
55 struct timeval start;
56 struct timeval end;
57 float time_use;
58 float totle_time_use = 0;
59 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
60 for (int i= 0; i < CYCLE_TIMES; i++) {
61 std::cout << "Running " << i << " time" << std::endl;
62 gettimeofday(&start, NULL);
63 Test_->rc = Test_->service->GetCameraIds(Test_->cameraIds);
64 gettimeofday(&end, NULL);
65 time_use = calTime(start, end);
66 totle_time_use = totle_time_use + time_use;
67 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
68 }
69 float avrg_time = totle_time_use / CYCLE_TIMES;
70 std::cout << "==========[test log] Performance: HDI_GetCameraIds's average time consuming: ";
71 std::cout << avrg_time << "us." << std::endl;
72 g_writeIntoFile << "==========[test log] Performance: HDI_GetCameraIds's average time consuming: ";
73 g_writeIntoFile << avrg_time << "us." << std::endl;
74 }
75
76 /**
77 * @tc.name: GetCameraAbility
78 * @tc.desc: the average time for 1000 times.
79 * @tc.size: MediumTest
80 * @tc.type: Function
81 */
82 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0020, TestSize.Level0)
83 {
84 std::cout << "==========[test log] Performance: GetCameraAbility's average time consuming." << std::endl;
85 struct timeval start;
86 struct timeval end;
87 float time_use;
88 float totle_time_use = 0;
89 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
90 if (Test_->cameraDevice == nullptr) {
91 Test_->rc = Test_->service->GetCameraIds(Test_->cameraIds);
92 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
93 for (int i= 0; i < CYCLE_TIMES; i++) {
94 std::cout << "Running " << i << " time" << std::endl;
95 gettimeofday(&start, NULL);
96 Test_->rc = Test_->service->GetCameraAbility(Test_->cameraIds.front(), Test_->ability);
97 gettimeofday(&end, NULL);
98 time_use = calTime(start, end);
99 totle_time_use = totle_time_use + time_use;
100 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
101 }
102 float avrg_time = totle_time_use / CYCLE_TIMES;
103 std::cout << "==========[test log] Performance: GetCameraAbility's average time consuming: ";
104 std::cout << avrg_time << "us." << std::endl;
105 g_writeIntoFile << "==========[test log] Performance: GetCameraAbility's average time consuming: ";
106 g_writeIntoFile << avrg_time << "us." << std::endl;
107 }
108 }
109
110 /**
111 * @tc.name: HDI_OpenCamera's time consuming.
112 * @tc.desc: the average time for 1000 times.
113 * @tc.size: MediumTest
114 * @tc.type: Function
115 */
116 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0030, TestSize.Level3)
117 {
118 std::cout << "==========[test log] Performance: HDI_OpenCamera's time consuming."<< std::endl;
119 Test_->service->GetCameraIds(Test_->cameraIds);
120 std::string cameraId = Test_->cameraIds.front();
121 Test_->CreateDeviceCallback();
122 struct timeval start;
123 struct timeval end;
124 float time_use;
125 float totle_time_use = 0;
126 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
127 for (int i= 0; i < CYCLE_TIMES; i++) {
128 std::cout << "Running " << i << " time" << std::endl;
129 gettimeofday(&start, NULL);
130 Test_->rc = Test_->service->OpenCamera(cameraId, Test_->deviceCallback, Test_->cameraDevice);
131 gettimeofday(&end, NULL);
132 time_use = calTime(start, end);
133 totle_time_use = totle_time_use + time_use;
134 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
135 }
136 float avrg_time = totle_time_use / CYCLE_TIMES;
137 std::cout << "==========[test log] Performance: HDI_OpenCamera's average time consuming: ";
138 std::cout << avrg_time << "us." << std::endl;
139 g_writeIntoFile << "==========[test log] Performance: HDI_OpenCamera's average time consuming: ";
140 g_writeIntoFile << avrg_time << "us." << std::endl;
141 g_writeIntoFile.close();
142 }
143
144 /**
145 * @tc.name: HDI_SetFlashlight's time consuming.
146 * @tc.desc: the average time for 1000 times.
147 * @tc.size: MediumTest
148 * @tc.type: Function
149 */
150 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0040, TestSize.Level3)
151 {
152 std::cout << "==========[test log] Performance: HDI_SetFlashlight's time consuming." << std::endl;
153 // Open camera
154 Test_->Open();
155 // Cycle to turn on and off the flashlight
156 struct timeval start;
157 struct timeval end;
158 float time_use;
159 float totle_time_use = 0;
160 for (int i = 0; i < CYCLE_TIMES / 2; i++) {
161 bool status;
162 std::cout << "Running " << i << " time" << std::endl;
163 // Turn on the flashlight
164 status = true;
165 gettimeofday(&start, NULL);
166 Test_->rc = Test_->service->SetFlashlight(Test_->cameraIds.front(), status);
167 gettimeofday(&end, NULL);
168 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
169 time_use = calTime(start, end);
170 totle_time_use = totle_time_use + time_use;
171 // Turn off the flashlight
172 status = false;
173 gettimeofday(&start, NULL);
174 Test_->rc = Test_->service->SetFlashlight(Test_->cameraIds.front(), status);
175 gettimeofday(&end, NULL);
176 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
177 time_use = calTime(start, end);
178 totle_time_use = totle_time_use + time_use;
179 }
180 float avrg_time = totle_time_use / CYCLE_TIMES;
181 std::cout << "==========[test log] Performance: HDI_SetFlashlight's average time consuming: ";
182 std::cout << avrg_time << "us. " << std::endl;
183 g_writeIntoFile << "==========[test log] Performance: HDI_SetFlashlight's average time consuming: ";
184 g_writeIntoFile << avrg_time << "us. " << std::endl;
185 g_writeIntoFile.close();
186 }
187
188 /**
189 * @tc.name: GetStreamOperator's time consuming.
190 * @tc.desc: the average time for 1000 times.
191 * @tc.size: MediumTest
192 * @tc.type: Function
193 */
194 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0050, TestSize.Level3)
195 {
196 std::cout << "==========[test log] Performance: GetStreamOperator success, 1000 times." << std::endl;
197 // Get the configured cameraId
198 Test_->service->GetCameraIds(Test_->cameraIds);
199 std::cout << "cameraIds.front() = " << Test_->cameraIds.front() << std::endl;
200 // Open camera
201 Test_->Open();
202 // Call the GetStreamOperator function of the device to get the streamOperator
203 Test_->CreateStreamOperatorCallback();
204 struct timeval start;
205 struct timeval end;
206 float time_use;
207 float totle_time_use = 0;
208 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
209 for (int i = 0; i < CYCLE_TIMES; i++) {
210 std::cout << "Running " << i << " time" << std::endl;
211 gettimeofday(&start, NULL);
212 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator);
213 gettimeofday(&end, NULL);
214 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
215 time_use = calTime(start, end);
216 totle_time_use = totle_time_use + time_use;
217 }
218 float avrg_time = totle_time_use / CYCLE_TIMES;
219 std::cout << "==========[test log] Performance: HDI_cameraDevice->GetStreamOperator's average time: ";
220 std::cout << avrg_time << "us. " << std::endl;
221 g_writeIntoFile << "==========[test log] Performance: HDI_cameraDevice->GetStreamOperator's average time: ";
222 g_writeIntoFile << avrg_time << "us. " << std::endl;
223 g_writeIntoFile.close();
224 }
225
226 /**
227 * @tc.name: HDI_UpdateSettings's time consuming.
228 * @tc.desc: the average time for 1000 times.
229 * @tc.size: MediumTest
230 * @tc.type: Function
231 */
232 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0060, TestSize.Level3)
233 {
234 std::cout << "==========[test log] Check HDI_UpdateSettings's time consuming." << std::endl;
235 Test_->Open();
236 // Issue 3A parameters
237 std::shared_ptr<Camera::CameraSetting> meta = std::make_shared<Camera::CameraSetting>(100, 2000);
238 std::vector<uint8_t> awbMode = {
239 OHOS_CAMERA_AWB_MODE_OFF,
240 OHOS_CAMERA_AWB_MODE_TWILIGHT,
241 OHOS_CAMERA_AWB_MODE_AUTO,
242 OHOS_CAMERA_AWB_MODE_WARM_FLUORESCENT,
243 OHOS_CAMERA_AWB_MODE_DAYLIGHT,
244 OHOS_CAMERA_AWB_MODE_CLOUDY_DAYLIGHT,
245 OHOS_CAMERA_AWB_MODE_INCANDESCENT,
246 OHOS_CAMERA_AWB_MODE_FLUORESCENT,
247 OHOS_CAMERA_AWB_MODE_SHADE
248 };
249 struct timeval start;
250 struct timeval end;
251 float time_use;
252 float totle_time_use = 0;
253 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
254 for (int round = 0; round < CYCLE_TIMES; round ++) {
255 int i = rand() % 9;
256 std::cout << "round = "<< round << ", i = " << i << std::endl;
257 meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode.at(i), 1);
258 gettimeofday(&start, NULL);
259 Test_->rc = Test_->cameraDevice->UpdateSettings(meta);
260 gettimeofday(&end, NULL);
261 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
262 std::cout << "rc = "<< Test_->rc << std::endl;
263 time_use = calTime(start, end);
264 totle_time_use = totle_time_use + time_use;
265 }
266 float avrg_time = totle_time_use / CYCLE_TIMES;
267 std::cout << "==========[test log] Performance: HDI_UpdateSettings's turn on average time : ";
268 std::cout << avrg_time << "us. " << std::endl;
269 g_writeIntoFile << "==========[test log] Performance: HDI_UpdateSettings's turn on average time : ";
270 g_writeIntoFile << avrg_time << "us. " << std::endl;
271 g_writeIntoFile.close();
272 }
273
274 /**
275 * @tc.name: SetResultMode's time consuming.
276 * @tc.desc: the average time for 1000 times.
277 * @tc.size: MediumTest
278 * @tc.type: Function
279 */
280 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0070, TestSize.Level3)
281 {
282 std::cout << "==========[test log]Check Performance: HDI_cameraDevice->SetResultMode's average time" << std::endl;
283 struct timeval start;
284 struct timeval end;
285 float time_use;
286 float totle_time_use = 0;
287 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
288 Test_->Open();
289 EXPECT_EQ(true, Test_->cameraDevice != nullptr);
290 std::vector<Camera::MetaType> enableTypes;
291 Test_->rc = Test_->cameraDevice->GetEnabledResults(enableTypes);
292 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
293 for (int i = 0; i < CYCLE_TIMES; i++) {
294 std::cout << "Running " << i << " time" << std::endl;
295 gettimeofday(&start, NULL);
296 Test_->rc = Test_->cameraDevice->SetResultMode(Camera::PER_FRAME);
297 gettimeofday(&end, NULL);
298 time_use = calTime(start, end);
299 totle_time_use = totle_time_use + time_use;
300 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
301 }
302 float avrg_time = totle_time_use / CYCLE_TIMES;
303 std::cout << "==========[test log] Performance: HDI_cameraDevice->SetResultMode's average time: ";
304 std::cout << avrg_time << "us. " << std::endl;
305 g_writeIntoFile << "==========[test log] Performance: HDI_cameraDevice->SetResultMode's average time: ";
306 g_writeIntoFile << avrg_time << "us. " << std::endl;
307 g_writeIntoFile.close();
308 }
309
310 /**
311 * @tc.name: GetEnabledResults
312 * @tc.desc: the average time for 1000 times.
313 * @tc.size: MediumTest
314 * @tc.type: Function
315 */
316 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0080, TestSize.Level3)
317 {
318 std::cout << "==========[test log]Performance: HDI_cameraDevice->GetEnabledResults's average time." << std::endl;
319 struct timeval start;
320 struct timeval end;
321 float time_use;
322 float totle_time_use = 0;
323 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
324 Test_->Open();
325 std::vector<Camera::MetaType> results;
326 for (int i = 0; i < CYCLE_TIMES; i++) {
327 std::cout << "Running " << i << " time" << std::endl;
328 gettimeofday(&start, NULL);
329 Test_->rc = Test_->cameraDevice->GetEnabledResults(results);
330 gettimeofday(&end, NULL);
331 time_use = calTime(start, end);
332 totle_time_use = totle_time_use + time_use;
333 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
334 }
335 float avrg_time = totle_time_use / CYCLE_TIMES;
336 std::cout << "==========[test log] Performance: HDI_cameraDevice->GetEnabledResults's average time: ";
337 std::cout << avrg_time << "us. " << std::endl;
338 g_writeIntoFile << "==========[test log] Performance: HDI_cameraDevice->GetEnabledResults's average time: ";
339 g_writeIntoFile << avrg_time << "us. " << std::endl;
340 g_writeIntoFile.close();
341 }
342
343 /**
344 * @tc.name: EnableResult
345 * @tc.desc: the average time for 1000 times.
346 * @tc.size: MediumTest
347 * @tc.type: Function
348 */
349 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0090, TestSize.Level3)
350 {
351 std::cout << "==========[test log]Performance: HDI_cameraDevice->EnableResult's average time." << std::endl;
352 struct timeval start;
353 struct timeval end;
354 float time_use;
355 float totle_time_use = 0;
356 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
357 Test_->Open();
358 // Get the parameter tag currently supported by the device
359 std::cout << "==========[test log]Check hdi_device: 1. Get the tags..." << std::endl;
360 std::vector<Camera::MetaType> results_original;
361 results_original.push_back(OHOS_SENSOR_EXPOSURE_TIME);
362 results_original.push_back(OHOS_SENSOR_COLOR_CORRECTION_GAINS);
363 Test_->rc = Test_->cameraDevice->GetEnabledResults(results_original);
364 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
365 // Add this tag
366 std::vector<Camera::MetaType> enable_tag;
367 enable_tag.push_back(results_original[1]);
368 for (int i = 0; i < CYCLE_TIMES; i++) {
369 std::cout << "Running " << i << " time" << std::endl;
370 gettimeofday(&start, NULL);
371 Test_->rc = Test_->cameraDevice->EnableResult(enable_tag);
372 gettimeofday(&end, NULL);
373 time_use = calTime(start, end);
374 totle_time_use = totle_time_use + time_use;
375 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
376 }
377 float avrg_time = totle_time_use / CYCLE_TIMES;
378 std::cout << "==========[test log] Performance: HDI_cameraDevice->EnableResult's average time: ";
379 std::cout << avrg_time << "us. " << std::endl;
380 g_writeIntoFile << "==========[test log] Performance: HDI_cameraDevice->EnableResult's average time: ";
381 g_writeIntoFile << avrg_time << "us. " << std::endl;
382 g_writeIntoFile.close();
383 }
384
385 /**
386 * @tc.name: DisableResult
387 * @tc.desc: the average time for 1000 times.
388 * @tc.size: MediumTest
389 * @tc.type: Function
390 */
391 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0100, TestSize.Level3)
392 {
393 std::cout << "==========[test log]Performance: HDI_cameraDevice->DisableResult's average time." << std::endl;
394 struct timeval start;
395 struct timeval end;
396 float time_use;
397 float totle_time_use = 0;
398 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
399 Test_->Open();
400 // Get the parameter tag currently supported by the device
401 std::cout << "==========[test log]Check hdi_device: 1. Get the tags..." << std::endl;
402 std::vector<Camera::MetaType> results_original;
403 results_original.push_back(OHOS_SENSOR_EXPOSURE_TIME);
404 results_original.push_back(OHOS_SENSOR_COLOR_CORRECTION_GAINS);
405 Test_->rc = Test_->cameraDevice->GetEnabledResults(results_original);
406 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
407 // Disable this tag
408 std::vector<Camera::MetaType> disable_tag;
409 disable_tag.push_back(results_original[1]);
410 for (int i = 0; i < CYCLE_TIMES; i++) {
411 std::cout << "Running " << i << " time" << std::endl;
412 gettimeofday(&start, NULL);
413 Test_->rc = Test_->cameraDevice->DisableResult(disable_tag);
414 gettimeofday(&end, NULL);
415 time_use = calTime(start, end);
416 totle_time_use = totle_time_use + time_use;
417 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
418 }
419 float avrg_time = totle_time_use / CYCLE_TIMES;
420 std::cout << "==========[test log] Performance: HDI_cameraDevice->DisableResult's average time: ";
421 std::cout << avrg_time << "us. " << std::endl;
422 g_writeIntoFile << "==========[test log] Performance: HDI_cameraDevice->DisableResult's average time: ";
423 g_writeIntoFile << avrg_time << "us. " << std::endl;
424 g_writeIntoFile.close();
425 }
426
427 /**
428 * @tc.name: IsStreamsSupported
429 * @tc.desc: the average time for 1000 times.
430 * @tc.size: MediumTest
431 * @tc.type: Function
432 */
433 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0120, TestSize.Level0)
434 {
435 std::cout << "==========[test log]Performance: HDI_IsStreamsSupported's average time." << std::endl;
436 struct timeval start;
437 struct timeval end;
438 float time_use;
439 float totle_time_use = 0;
440 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
441 // Open camera
442 Test_->Open();
443 EXPECT_EQ(false, Test_->cameraDevice == nullptr);
444 // Get streamOperator
445 Test_->CreateStreamOperatorCallback();
446 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator);
447 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
448 // Configure mode and modeSetting
449 Camera::OperationMode mode = Camera::NORMAL;
450 std::shared_ptr<CameraMetadata> modeSetting =
451 std::make_shared<CameraMetadata>(2, 128);
452 int64_t colorGains[4] = {0};
453 modeSetting->addEntry(OHOS_SENSOR_COLOR_CORRECTION_GAINS, &colorGains, 4);
454 int64_t expoTime = 0;
455 modeSetting->addEntry(OHOS_SENSOR_EXPOSURE_TIME, &expoTime, 1);
456 // Configure stream information
457 Test_->streamInfo = std::make_shared<Camera::StreamInfo>();
458 Test_->streamInfo->streamId_ = 1001; // 1001:streamId
459 Test_->streamInfo->dataspace_ = 8;
460 Test_->streamInfo->intent_ = Camera::PREVIEW;
461 Test_->streamInfo->width_ = 640; // 640:Stream width
462 Test_->streamInfo->height_ = 480; // 480:Stream height
463 Test_->StreamInfoFormat();
464 Test_->streamInfo->tunneledMode_ = 5;
465 std::shared_ptr<OHOS::Camera::Test::StreamConsumer> consumer =
466 std::make_shared<OHOS::Camera::Test::StreamConsumer>();
467 #ifdef CAMERA_BUILT_ON_OHOS_LITE
__anon32a5173b0202(OHOS::SurfaceBuffer* buffer) 468 Test_->streamInfo->bufferQueue_ = consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) {
469 Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize());
470 });
471 #else
__anon32a5173b0302(void* addr, uint32_t size) 472 Test_->streamInfo->bufferQueue_ = consumer->CreateProducer([this](void* addr, uint32_t size) {
473 Test_->SaveYUV("preview", addr, size);
474 });
475 #endif
476 Test_->streamInfo->bufferQueue_->SetQueueSize(8);
477 Test_->consumerMap_[Test_->streamInfo->intent_] = consumer;
478 Camera::StreamSupportType pType;
479 for (int i = 0; i < CYCLE_TIMES; i++) {
480 std::cout << "Running " << i << " time" << std::endl;
481 gettimeofday(&start, NULL);
482 std::vector<std::shared_ptr<OHOS::Camera::StreamInfo>> stre;
483 stre.push_back(Test_->streamInfo);
484 Test_->rc = Test_->streamOperator->IsStreamsSupported(NORMAL, modeSetting, stre, pType);
485 gettimeofday(&end, NULL);
486 time_use = calTime(start, end);
487 totle_time_use = totle_time_use + time_use;
488 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
489 }
490 float avrg_time = totle_time_use / CYCLE_TIMES;
491 std::cout << "==========[test log] Performance: HDI_IsStreamsSupported's average time: ";
492 std::cout << avrg_time << "us. " << std::endl;
493 g_writeIntoFile << "HDI_IsStreamsSupported's average time: " << avrg_time << "us. " << std::endl;
494 g_writeIntoFile.close();
495 }
496
497 /**
498 * @tc.name: HDI_CreateStreams's time consuming.
499 * @tc.desc: the average time for 1000 times.
500 * @tc.size: MediumTest
501 * @tc.type: Function
502 */
503 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0130, TestSize.Level3)
504 {
505 std::cout << "==========[test log] Performance: HDI_CreateStreams's time consuming." << std::endl;
506 struct timeval start;
507 struct timeval end;
508 float time_use;
509 float totle_time_use = 0;
510 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
511 Test_->Open();
512 for (int i = 0; i < CYCLE_TIMES; i ++) {
513 std::cout << "Running " << i << " time" << std::endl;
514 // Create and get streamOperator information
515 Test_->CreateStreamOperatorCallback();
516 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator);
517 EXPECT_EQ(false, Test_->rc != Camera::NO_ERROR || Test_->streamOperator == nullptr);
518 // Create data flow
519 Test_->streamInfo = std::make_shared<Camera::StreamInfo>();
520 Test_->streamInfo->streamId_ = 1001;
521 Test_->streamInfo->width_ = 1920;
522 Test_->streamInfo->height_ = 1080;
523 Test_->StreamInfoFormat();
524 Test_->streamInfo->dataspace_ = 10;
525 Test_->streamInfo->intent_ = Camera::PREVIEW;
526 Test_->streamInfo->tunneledMode_ = 5;
527 std::shared_ptr<OHOS::Camera::Test::StreamConsumer> preview_consumer =
528 std::make_shared<OHOS::Camera::Test::StreamConsumer>();
529 #ifdef CAMERA_BUILT_ON_OHOS_LITE
__anon32a5173b0402(OHOS::SurfaceBuffer* buffer) 530 Test_->streamInfo->bufferQueue_ = preview_consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) {
531 Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize());
532 });
533 #else
__anon32a5173b0502(void* addr, uint32_t size) 534 Test_->streamInfo->bufferQueue_ = preview_consumer->CreateProducer([this](void* addr, uint32_t size) {
535 Test_->SaveYUV("preview", addr, size);
536 });
537 #endif
538 Test_->streamInfo->bufferQueue_->SetQueueSize(8);
539 Test_->consumerMap_[Camera::PREVIEW] = preview_consumer;
540 std::vector<std::shared_ptr<Camera::StreamInfo>>().swap(Test_->streamInfos);
541 Test_->streamInfos.push_back(Test_->streamInfo);
542 gettimeofday(&start, NULL);
543 Test_->rc = Test_->streamOperator->CreateStreams(Test_->streamInfos);
544 gettimeofday(&end, NULL);
545 std::cout << "streamOperator->CreateStreams's rc " << Test_->rc << std::endl;
546 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
547 time_use = calTime(start, end);
548 totle_time_use = totle_time_use + time_use;
549 // Release stream
550 Test_->rc = Test_->streamOperator->ReleaseStreams({1001});
551 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
552 }
553 float avrg_time = totle_time_use / CYCLE_TIMES;
554 std::cout << "==========[test log] Performance: HDI_CreateStreams's average time consuming: ";
555 std::cout << avrg_time << "us. " << std::endl;
556 g_writeIntoFile << "==========[test log] Performance: HDI_CreateStreams's average time consuming: ";
557 g_writeIntoFile << avrg_time << "us. " << std::endl;
558 g_writeIntoFile.close();
559 }
560
561 /**
562 * @tc.name: HDI_ReleaseStreams's time consuming.
563 * @tc.desc: the average time for 1000 times.
564 * @tc.size: MediumTest
565 * @tc.type: Function
566 */
567 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0160, TestSize.Level3)
568 {
569 std::cout << "==========[test log] Performance: HDI_ReleaseStreams's time consuming."<< std::endl;
570 struct timeval start;
571 struct timeval end;
572 float time_use;
573 float totle_time_use = 0;
574 Test_->Open();
575 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
576 for (int i = 0; i < CYCLE_TIMES; i ++) {
577 std::cout << "CYCLE_TIMES =" << i << std::endl;
578 // Start stream
579 Test_->intents = {Camera::PREVIEW};
580 Test_->StartStream(Test_->intents);
581 // Release stream
582 gettimeofday(&start, NULL);
583 Test_->rc = Test_->streamOperator->ReleaseStreams({Test_->streamId_preview});
584 gettimeofday(&end, NULL);
585 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
586 time_use = calTime(start, end);
587 totle_time_use = totle_time_use + time_use;
588 }
589 float avrg_time = totle_time_use / CYCLE_TIMES;
590 std::cout << "==========[test log] Performance: HDI_ReleaseStreams's average time consuming: ";
591 std::cout << avrg_time << "us. " << std::endl;
592 g_writeIntoFile << "==========[test log] Performance: HDI_ReleaseStreams's average time consuming: ";
593 g_writeIntoFile << avrg_time << "us. " << std::endl;
594 g_writeIntoFile.close();
595 }
596
597 /**
598 * @tc.name: CommitStreams's time consuming.
599 * @tc.desc: the average time for 1000 times.
600 * @tc.size: MediumTest
601 * @tc.type: Function
602 */
603 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0170, TestSize.Level3)
604 {
605 std::cout << "==========[test log] Performance: CommitStreams's time consuming." << std::endl;
606
607 struct timeval start;
608 struct timeval end;
609 float time_use;
610 float totle_time_use = 0;
611 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
612 Test_->Open();
613 for (int i = 0; i < CYCLE_TIMES; i ++) {
614 std::cout << "Running " << i << " time" << std::endl;
615 // Create and get streamOperator information
616 Test_->CreateStreamOperatorCallback();
617 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator);
618 EXPECT_EQ(false, Test_->rc != Camera::NO_ERROR || Test_->streamOperator == nullptr);
619 // Create data flow
620 Test_->streamInfo = std::make_shared<Camera::StreamInfo>();
621 Test_->streamInfo->streamId_ = 1001;
622 Test_->streamInfo->width_ = 1920;
623 Test_->streamInfo->height_ = 1080;
624 Test_->StreamInfoFormat();
625 Test_->streamInfo->dataspace_ = 10;
626 Test_->streamInfo->intent_ = Camera::PREVIEW;
627 Test_->streamInfo->tunneledMode_ = 5;
628 std::shared_ptr<OHOS::Camera::Test::StreamConsumer> preview_consumer =
629 std::make_shared<OHOS::Camera::Test::StreamConsumer>();
630 #ifdef CAMERA_BUILT_ON_OHOS_LITE
__anon32a5173b0602(OHOS::SurfaceBuffer* buffer) 631 Test_->streamInfo->bufferQueue_ = preview_consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) {
632 Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize());
633 });
634 #else
__anon32a5173b0702(void* addr, uint32_t size) 635 Test_->streamInfo->bufferQueue_ = preview_consumer->CreateProducer([this](void* addr, uint32_t size) {
636 Test_->SaveYUV("preview", addr, size);
637 });
638 #endif
639 Test_->streamInfo->bufferQueue_->SetQueueSize(8);
640 Test_->consumerMap_[Camera::PREVIEW] = preview_consumer;
641 std::vector<std::shared_ptr<Camera::StreamInfo>>().swap(Test_->streamInfos);
642 Test_->streamInfos.push_back(Test_->streamInfo);
643 Test_->rc = Test_->streamOperator->CreateStreams(Test_->streamInfos);
644 std::cout << "streamOperator->CreateStreams's rc " << Test_->rc << std::endl;
645 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
646 // Flow distribution
647 gettimeofday(&start, NULL);
648 Test_->rc = Test_->streamOperator->CommitStreams(Camera::NORMAL, Test_->ability);
649 gettimeofday(&end, NULL);
650 std::cout << "streamOperator->CommitStreams's rc " << Test_->rc << std::endl;
651 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
652 time_use = calTime(start, end);
653 totle_time_use = totle_time_use + time_use;
654 // Release stream
655 Test_->rc = Test_->streamOperator->ReleaseStreams({1001});
656 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
657 }
658 float avrg_time = totle_time_use / CYCLE_TIMES;
659 std::cout << "==========[test log] Performance: CommitStreams's average time consuming: ";
660 std::cout << avrg_time << "us. " << std::endl;
661 g_writeIntoFile << "==========[test log] Performance: CommitStreams's average time consuming: ";
662 g_writeIntoFile << avrg_time << "us. " << std::endl;
663 g_writeIntoFile.close();
664 }
665
666 /**
667 * @tc.name: GetStreamAttributes
668 * @tc.desc: the average time for 1000 times.
669 * @tc.size: MediumTest
670 * @tc.type: Function
671 */
672 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0180, TestSize.Level3)
673 {
674 std::cout << "==========[test log]Check Performance: HDI_GetStreamAttributes's average time." << std::endl;
675 struct timeval start;
676 struct timeval end;
677 float time_use;
678 float totle_time_use = 0;
679 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
680 Test_->Open();
681 // Start stream
682 Test_->intents = {Camera::PREVIEW};
683 Test_->StartStream(Test_->intents);
684 std::vector<std::shared_ptr<Camera::StreamAttribute>> attributes;
685 for (int i = 0; i < CYCLE_TIMES; i++) {
686 std::cout << "Running " << i << " time" << std::endl;
687 gettimeofday(&start, NULL);
688 Test_->rc = Test_->streamOperator->GetStreamAttributes(attributes);
689 gettimeofday(&end, NULL);
690 time_use = calTime(start, end);
691 totle_time_use = totle_time_use + time_use;
692 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
693 }
694 float avrg_time = totle_time_use / CYCLE_TIMES;
695 std::cout << "==========[test log] Performance: HDI_GetStreamAttributes's average time: ";
696 std::cout << avrg_time << "us. " << std::endl;
697 g_writeIntoFile << "==========[test log] Performance: HDI_GetStreamAttributes's average time: ";
698 g_writeIntoFile << avrg_time << "us. " << std::endl;
699 g_writeIntoFile.close();
700 // Release stream
701 Test_->rc = Test_->streamOperator->ReleaseStreams({Test_->streamId_preview});
702 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
703 std::cout << "streamOperator->ReleaseStreams's rc " << Test_->rc << std::endl;
704 }
705
706 /**
707 * @tc.name: HDI_Capture's time consuming.
708 * @tc.desc: the average time for 1000 times.
709 * @tc.size: MediumTest
710 * @tc.type: Function
711 */
712 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0190, TestSize.Level3)
713 {
714 std::cout << "==========[test log] Performance: HDI_Capture's average time consuming." << std::endl;
715 struct timeval start;
716 struct timeval end;
717 float time_use;
718 float totle_time_use = 0;
719 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
720 // Open camera
721 Test_->Open();
722 // Start stream
723 Test_->intents = {Camera::PREVIEW};
724 Test_->StartStream(Test_->intents);
725 // Get preview
726 int captureId = 2001;
727 Test_->captureInfo = std::make_shared<Camera::CaptureInfo>();
728 Test_->captureInfo->streamIds_ = {Test_->streamId_preview};
729 Test_->captureInfo->captureSetting_ = Test_->ability;
730 Test_->captureInfo->enableShutterCallback_ = true;
731 for (int i = 0; i < CYCLE_TIMES; i++) {
732 std::cout << "CYCLE_TIMES =" << i << std::endl;
733 gettimeofday(&start, NULL);
734 Test_->rc = Test_->streamOperator->Capture(captureId, Test_->captureInfo, true);
735 if (Test_->rc == Camera::NO_ERROR) {
736 std::cout << "==========[test log]check Capture: Capture success, " << captureId << std::endl;
737 } else {
738 std::cout << "==========[test log]check Capture: Capture fail, rc = " << Test_->rc << std::endl;
739 }
740 gettimeofday(&end, NULL);
741 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
742 time_use = calTime(start, end);
743 totle_time_use = totle_time_use + time_use;
744 sleep(1);
745 Test_->rc = Test_->streamOperator->CancelCapture(captureId++);
746 if (Test_->rc == Camera::NO_ERROR) {
747 std::cout << "==========[test log]check Capture: CancelCapture success," << captureId << std::endl;
748 } else {
749 std::cout << "==========[test log]check Capture: CancelCapture fail, rc = " << Test_->rc << std::endl;
750 std::cout << "captureId = " << captureId << std::endl;
751 }
752 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
753 }
754 float avrg_time = totle_time_use / CYCLE_TIMES;
755 std::cout << "==========[test log] Performance: HDI_Capture's average time consuming: ";
756 std::cout << avrg_time << "us. " << std::endl;
757 g_writeIntoFile << "==========[test log] Performance: HDI_Capture's average time consuming: ";
758 g_writeIntoFile << avrg_time << "us. " << std::endl;
759 g_writeIntoFile.close();
760 // post-processing
761 Test_->streamIds.push_back(Test_->streamId_preview);
762 Test_->rc = Test_->streamOperator->ReleaseStreams(Test_->streamIds);
763 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
764 }
765
766 /**
767 * @tc.name: HDI_CancelCapture's time consuming.
768 * @tc.desc: the average time for 1000 times.
769 * @tc.size: MediumTest
770 * @tc.type: Function
771 */
772 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0200, TestSize.Level3)
773 {
774 std::cout << "==========[test log] Performance: HDI_CancelCapture's average time consuming." << std::endl;
775 struct timeval start;
776 struct timeval end;
777 float time_use;
778 float totle_time_use = 0;
779 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
780 // Open camera
781 Test_->Open();
782 // Start stream
783 Test_->intents = {Camera::PREVIEW};
784 Test_->StartStream(Test_->intents);
785 // Get preview
786 int captureId = 2001;
787 Test_->captureInfo = std::make_shared<Camera::CaptureInfo>();
788 Test_->captureInfo->streamIds_ = {Test_->streamId_preview};
789 Test_->captureInfo->captureSetting_ = Test_->ability;
790 Test_->captureInfo->enableShutterCallback_ = true;
791 for (int i = 0; i < CYCLE_TIMES; i++) {
792 std::cout << "CYCLE_TIMES =" << i << std::endl;
793 Test_->rc = Test_->streamOperator->Capture(captureId, Test_->captureInfo, true);
794 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
795 sleep(1);
796 gettimeofday(&start, NULL);
797 Test_->rc = Test_->streamOperator->CancelCapture(captureId);
798 gettimeofday(&end, NULL);
799 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
800 time_use = calTime(start, end);
801 totle_time_use = totle_time_use + time_use;
802 captureId++;
803 }
804 float avrg_time = totle_time_use / CYCLE_TIMES;
805 std::cout << "==========[test log] Performance: HDI_CancelCapture's average time consuming: ";
806 std::cout << avrg_time << "us. " << std::endl;
807 g_writeIntoFile << "==========[test log] Performance: HDI_CancelCapture's average time consuming: ";
808 g_writeIntoFile << avrg_time << "us. " << std::endl;
809 g_writeIntoFile.close();
810 // post-processing
811 Test_->streamIds.push_back(Test_->streamId_preview);
812 Test_->rc = Test_->streamOperator->ReleaseStreams(Test_->streamIds);
813 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
814 }
815
816 /**
817 * @tc.name: AttachBufferQueue
818 * @tc.desc: the average time for 1000 times.
819 * @tc.size: MediumTest
820 * @tc.type: Function
821 */
822 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0210, TestSize.Level3)
823 {
824 std::cout << "==========[test log] Performance: HDI_AttachBufferQueue's average time consuming." << std::endl;
825 struct timeval start;
826 struct timeval end;
827 float time_use;
828 float totle_time_use = 0;
829 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
830 // Open camera
831 Test_->Open();
832 Test_->CreateStreamOperatorCallback();
833 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator);
834 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
835 for (int i = 0; i < CYCLE_TIMES; i++) {
836 std::cout << "Running " << i << " time" << std::endl;
837 // Create data flow
838 Test_->streamInfo = std::make_shared<Camera::StreamInfo>();
839 Test_->streamInfo->streamId_ = Test_->streamId_preview;
840 Test_->streamInfo->width_ = 640;
841 Test_->streamInfo->height_ = 480;
842 Test_->StreamInfoFormat();
843 Test_->streamInfo->intent_ = Camera::PREVIEW;
844 Test_->streamInfo->dataspace_ = 8;
845 Test_->streamInfo->tunneledMode_ = 5;
846 std::vector<std::shared_ptr<Camera::StreamInfo>>().swap(Test_->streamInfos);
847 Test_->streamInfos.push_back(Test_->streamInfo);
848 Test_->rc = Test_->streamOperator->CreateStreams(Test_->streamInfos);
849 std::cout << "==========[test log]Check hdi: streamOperator->CreateStreams's rc " << Test_->rc << std::endl;
850 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
851 // Flow distribution
852 Test_->rc = Test_->streamOperator->CommitStreams(Camera::NORMAL, Test_->ability);
853 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
854 std::cout << "==========[test log]Check hdi: streamOperator->CommitStreams's rc " << Test_->rc << std::endl;
855 std::shared_ptr<OHOS::Camera::Test::StreamConsumer> consumer =
856 std::make_shared<OHOS::Camera::Test::StreamConsumer>();
857 #ifdef CAMERA_BUILT_ON_OHOS_LITE
__anon32a5173b0802(OHOS::SurfaceBuffer* buffer) 858 std::shared_ptr<OHOS::Surface> producer = consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) {
859 Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize());
860 });
861 #else
__anon32a5173b0902(void* addr, uint32_t size) 862 OHOS::sptr<OHOS::IBufferProducer> producer = consumer->CreateProducer([this](void* addr, uint32_t size) {
863 Test_->SaveYUV("preview", addr, size);
864 });
865 #endif
866 gettimeofday(&start, NULL);
867 Test_->rc = Test_->streamOperator->AttachBufferQueue(Test_->streamInfo->streamId_, producer);
868 std::cout << "==========[test log]Check hdi: streamOperator->AttachBufferQueue's rc " << Test_->rc << std::endl;
869 gettimeofday(&end, NULL);
870 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
871 time_use = calTime(start, end);
872 totle_time_use = totle_time_use + time_use;
873 Test_->rc = Test_->streamOperator->DetachBufferQueue(Test_->streamInfo->streamId_);
874 std::cout << "==========[test log]Check hdi: streamOperator->DetachBufferQueue's rc " << Test_->rc << std::endl;
875 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
876 // Release stream
877 Test_->streamIds.push_back(Test_->streamId_preview);
878 Test_->rc = Test_->streamOperator->ReleaseStreams(Test_->streamIds);
879 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
880 }
881 float avrg_time = totle_time_use / CYCLE_TIMES;
882 std::cout << "==========[test log] Performance: HDI_AttachBufferQueue's average time consuming: ";
883 std::cout << avrg_time << "us. " << std::endl;
884 g_writeIntoFile << "==========[test log] Performance: HDI_AttachBufferQueue's average time consuming: ";
885 g_writeIntoFile << avrg_time << "us. " << std::endl;
886 g_writeIntoFile.close();
887 }
888
889 /**
890 * @tc.name: DetachBufferQueue
891 * @tc.desc: the average time for 1000 times.
892 * @tc.size: MediumTest
893 * @tc.type: Function
894 */
895 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0220, TestSize.Level3)
896 {
897 std::cout << "==========[test log] Performance: HDI_DetachBufferQueue's average time consuming." << std::endl;
898 struct timeval start;
899 struct timeval end;
900 float time_use;
901 float totle_time_use = 0;
902 Test_->Open();
903 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
904 for (int i = 0; i < CYCLE_TIMES; i++) {
905 std::cout << "Running " << i << " time" << std::endl;
906 Test_->CreateStreamOperatorCallback();
907 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator);
908 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
909 // Create data flow
910 Test_->streamInfo = std::make_shared<Camera::StreamInfo>();
911 Test_->streamInfo->intent_ = Camera::PREVIEW;
912 Test_->streamInfo->streamId_ = Test_->streamId_preview;
913 Test_->streamInfo->width_ = 640;
914 Test_->streamInfo->height_ = 480;
915 Test_->StreamInfoFormat();
916 Test_->streamInfo->dataspace_ = 8;
917 Test_->streamInfo->tunneledMode_ = 5;
918 std::vector<std::shared_ptr<Camera::StreamInfo>>().swap(Test_->streamInfos);
919 Test_->streamInfos.push_back(Test_->streamInfo);
920 Test_->rc = Test_->streamOperator->CreateStreams(Test_->streamInfos);
921 std::cout << "==========[test log]Check hdi: streamOperator->CreateStreams's rc " << Test_->rc << std::endl;
922 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
923 // Flow distribution
924 Test_->rc = Test_->streamOperator->CommitStreams(Camera::NORMAL, Test_->ability);
925 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
926 std::cout << "==========[test log]Check hdi: streamOperator->CommitStreams's rc " << Test_->rc << std::endl;
927 std::shared_ptr<OHOS::Camera::Test::StreamConsumer> consumer =
928 std::make_shared<OHOS::Camera::Test::StreamConsumer>();
929 #ifdef CAMERA_BUILT_ON_OHOS_LITE
__anon32a5173b0a02(OHOS::SurfaceBuffer* buffer) 930 std::shared_ptr<OHOS::Surface> producer = consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) {
931 Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize());
932 });
933 #else
__anon32a5173b0b02(void* addr, uint32_t size) 934 OHOS::sptr<OHOS::IBufferProducer> producer = consumer->CreateProducer([this](void* addr, uint32_t size) {
935 Test_->SaveYUV("preview", addr, size);
936 });
937 #endif
938 Test_->rc = Test_->streamOperator->AttachBufferQueue(Test_->streamInfo->streamId_, producer);
939 std::cout << "==========[test log]Check hdi: streamOperator->AttachBufferQueue's rc ";
940 std::cout << Test_->rc << std::endl;
941 gettimeofday(&start, NULL);
942 Test_->rc = Test_->streamOperator->DetachBufferQueue(Test_->streamInfo->streamId_);
943 std::cout << "==========[test log]Check hdi: streamOperator->DetachBufferQueue's rc ";
944 std::cout << Test_->rc << std::endl;
945 gettimeofday(&end, NULL);
946 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
947 time_use = calTime(start, end);
948 totle_time_use = totle_time_use + time_use;
949 // Release stream
950 Test_->streamIds.push_back(Test_->streamId_preview);
951 Test_->rc = Test_->streamOperator->ReleaseStreams(Test_->streamIds);
952 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
953 }
954 float avrg_time = totle_time_use / CYCLE_TIMES;
955 std::cout << "==========[test log] Performance: HDI_DetachBufferQueue's average time consuming: ";
956 std::cout << avrg_time << "us. " << std::endl;
957 g_writeIntoFile << "==========[test log] Performance: HDI_DetachBufferQueue's average time consuming: ";
958 g_writeIntoFile << avrg_time << "us. " << std::endl;
959 g_writeIntoFile.close();
960 }
961
962 /**
963 * @tc.name: ChangeToOfflineStream
964 * @tc.desc: the average time for 1000 times.
965 * @tc.size: MediumTest
966 * @tc.type: Function
967 */
968 HWTEST_F(PerformanceHdiTest, Camera_Performance_Hdi_0230, TestSize.Level0)
969 {
970 std::cout << "==========[test log] Performance: HDI_ChangeToOfflineStream's average time consuming." << std::endl;
971 struct timeval start;
972 struct timeval end;
973 float time_use;
974 float totle_time_use = 0;
975 Test_->Open();
976 g_writeIntoFile.open("TimeConsuming.txt", ios::app);
977 for (int i = 0; i < CYCLE_TIMES; i++) {
978 std::cout << "Running " << i << " time" << std::endl;
979 // 1、Configure two stream information
980 Test_->intents = {Camera::PREVIEW, Camera::STILL_CAPTURE};
981 Test_->StartStream(Test_->intents);
982 // 2、Capture preview stream
983 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
984 // 3、Capture camera stream, continuous shooting
985 Test_->StartCapture(Test_->streamId_capture, Test_->captureId_capture, false, true);
986 sleep(1);
987 // 4、Convert to offline stream
988 Test_->CreateOfflineStreamOperatorCallback();
989 gettimeofday(&start, NULL);
990 std::vector<int> offlineIds;
991 offlineIds.push_back(Test_->streamId_capture);
992 Test_->rc = Test_->streamOperator->ChangeToOfflineStream(
993 offlineIds, Test_->offlineStreamOperatorCallback, Test_->offlineStreamOperator);
994 gettimeofday(&end, NULL);
995 ASSERT_EQ(Test_->rc, Camera::NO_ERROR);
996 time_use = calTime(start, end);
997 totle_time_use = totle_time_use + time_use;
998 std::cout << "==========[test log] ChangeToOfflineStream rc = " << Test_->rc << std::endl;
999 EXPECT_EQ(true, Test_->offlineStreamOperator != nullptr);
1000 if (Test_->rc == Camera::NO_ERROR) {
1001 std::cout << "==========[test log] offline StreamOperator != nullptr" << std::endl;
1002 } else {
1003 std::cout << "==========[test log] offline StreamOperator == nullptr" << std::endl;
1004 }
1005 // 5、Post-processing of the original stream
1006 Test_->captureIds = {Test_->captureId_preview, Test_->captureId_capture};
1007 Test_->streamIds.push_back(Test_->streamId_preview);
1008 Test_->streamIds.push_back(Test_->streamId_capture);
1009 Test_->StopStream(Test_->captureIds, Test_->streamIds);
1010 // 6、Post-processing of offline streams
1011 Test_->cameraDevice->Close();
1012 std::cout << "==========[test log] Pretend to wait 5s for callback..." << std::endl;
1013 sleep(1);
1014 Test_->StopOfflineStream(Test_->captureId_capture);
1015 }
1016 float avrg_time = totle_time_use / CYCLE_TIMES;
1017 std::cout << "==========[test log] Performance: HDI_ChangeToOfflineStream's average time consuming: ";
1018 std::cout << avrg_time << "us. " << std::endl;
1019 g_writeIntoFile << "==========[test log] Performance: HDI_ChangeToOfflineStream's average time consuming: ";
1020 g_writeIntoFile << avrg_time << "us. " << std::endl;
1021 g_writeIntoFile.close();
1022 }