• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except 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 
16 #include <string>
17 #include <vector>
18 #include <mutex>
19 #include "../unittest/hdi_composer_ut.h"
20 #include <chrono>
21 #include <cinttypes>
22 #include <algorithm>
23 #include <condition_variable>
24 #include <benchmark/benchmark.h>
25 #include "gtest/gtest.h"
26 #include "v1_0/include/idisplay_composer_interface.h"
27 #include "v1_0/display_composer_type.h"
28 #include "v1_0/display_buffer_type.h"
29 #include "display_test.h"
30 #include "display_test_utils.h"
31 #include "hdi_composition_check.h"
32 #include "hdi_test_device.h"
33 #include "hdi_test_device_common.h"
34 #include "hdi_test_display.h"
35 #include "hdi_test_render_utils.h"
36 
37 using namespace OHOS::HDI::Display::Buffer::V1_0;
38 using namespace OHOS::HDI::Display::Composer::V1_0;
39 using namespace OHOS::HDI::Display::TEST;
40 using namespace testing::ext;
41 
42 namespace {
43 static sptr<IDisplayComposerInterface> g_composerDevice = nullptr;
44 static std::shared_ptr<IDisplayBuffer> g_gralloc = nullptr;
45 static std::vector<uint32_t> g_displayIds;
46 
47 class DisplayBenchmarkTest : public benchmark::Fixture {
48 public:
49     void SetUp(const ::benchmark::State &state);
50     void TearDown(const ::benchmark::State &state);
51 };
52 
SetUp(const::benchmark::State & state)53 void DisplayBenchmarkTest::SetUp(const ::benchmark::State &state)
54 {
55 }
56 
TearDown(const::benchmark::State & state)57 void DisplayBenchmarkTest::TearDown(const ::benchmark::State &state)
58 {
59     HdiTestDevice::GetInstance().Clear();
60 }
61 
GetFirstDisplay()62 static inline std::shared_ptr<HdiTestDisplay> GetFirstDisplay()
63 {
64     return HdiTestDevice::GetInstance().GetFirstDisplay();
65 }
66 
CheckComposition(std::vector<LayerSettings> & layers,BufferHandle * clientBuffer,uint32_t checkType=HdiCompositionCheck::CHECK_VERTEX)67 static int32_t CheckComposition(std::vector<LayerSettings> &layers, BufferHandle* clientBuffer,
68     uint32_t checkType = HdiCompositionCheck::CHECK_VERTEX)
69 {
70     DISPLAY_TEST_CHK_RETURN((clientBuffer == nullptr), DISPLAY_NULL_PTR, DISPLAY_TEST_LOGE("client buffer is nullptr"));
71     return HdiCompositionCheck::GetInstance().Check(layers, *clientBuffer, checkType);
72 }
73 
CreateTestLayer(LayerSettings setting,uint32_t zorder)74 static std::shared_ptr<HdiTestLayer> CreateTestLayer(LayerSettings setting, uint32_t zorder)
75 {
76     int ret;
77     HdiTestDevice::GetInstance();
78     DISPLAY_TEST_LOGE("color 0x%x", setting.color);
79     std::shared_ptr<HdiTestDisplay> display = HdiTestDevice::GetInstance().GetFirstDisplay();
80     DISPLAY_TEST_CHK_RETURN((display == nullptr), nullptr, DISPLAY_TEST_LOGE("can not get display"));
81 
82     std::shared_ptr<HdiTestLayer> layer = display->CreateHdiTestLayer(setting.bufferSize.w, setting.bufferSize.h);
83     DISPLAY_TEST_CHK_RETURN((layer == nullptr), nullptr, DISPLAY_TEST_LOGE("can not create hdi test layer"));
84 
85     layer->SetLayerPosition(setting.displayRect);
86 
87     layer->SetCompType(setting.compositionType);
88 
89     if ((setting.alpha >= 0) && (setting.alpha <= 0xff)) { // alpha rang 0x00 ~ 0xff
90         LayerAlpha alpha = { 0 };
91         alpha.gAlpha = setting.alpha;
92         alpha.enGlobalAlpha = true;
93         layer->SetAlpha(alpha);
94     }
95     HdiGrallocBuffer* handle = layer->GetFrontBuffer();
96     DISPLAY_TEST_CHK_RETURN((handle == nullptr), nullptr, DISPLAY_TEST_LOGE("can not get front buffer"));
97     ClearColor(*(handle->Get()), setting.color);
98     ret = layer->SwapFrontToBackQ();
99     DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), nullptr, DISPLAY_TEST_LOGE("SwapFrontToBackQ failed"));
100     layer->SetZorder(zorder);
101     layer->SetBlendType(setting.blendType);
102     layer->SetTransform(setting.rotate);
103     return layer;
104 }
105 
PrepareAndPrensent()106 static int PrepareAndPrensent()
107 {
108     int ret;
109     DISPLAY_TEST_LOGE();
110     std::shared_ptr<HdiTestDisplay> display = HdiTestDevice::GetInstance().GetFirstDisplay();
111     DISPLAY_TEST_CHK_RETURN((display == nullptr), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("can not get display"));
112 
113     ret = display->PrepareDisplayLayers();
114     DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE,
115         DISPLAY_TEST_LOGE("PrepareDisplayLayers failed"));
116 
117     ret = display->Commit();
118     DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("Commit failed"));
119     return DISPLAY_SUCCESS;
120 }
121 
AdjustLayerSettings(std::vector<LayerSettings> & settings,uint32_t w,uint32_t h)122 static void AdjustLayerSettings(std::vector<LayerSettings> &settings, uint32_t w, uint32_t h)
123 {
124     DISPLAY_TEST_LOGE();
125     for (uint32_t i = 0; i < settings.size(); i++) {
126         LayerSettings& setting = settings[i];
127         DISPLAY_TEST_LOGE(" ratio w: %f  ratio h: %f", setting.rectRatio.w, setting.rectRatio.h);
128         if ((setting.rectRatio.w > 0.0f) && (setting.rectRatio.h > 0.0f)) {
129             setting.displayRect.h = static_cast<uint32_t>(setting.rectRatio.h * h);
130             setting.displayRect.w = static_cast<uint32_t>(setting.rectRatio.w * w);
131             setting.displayRect.x = static_cast<uint32_t>(setting.rectRatio.x * w);
132             setting.displayRect.y = static_cast<uint32_t>(setting.rectRatio.y * h);
133             DISPLAY_TEST_LOGE("display rect adust form %f %f %f %f to %{public}d %{public}d %{public}d %{public}d ",
134                 setting.rectRatio.x, setting.rectRatio.y, setting.rectRatio.w,
135                 setting.rectRatio.h,setting.displayRect.x,setting.displayRect.y,
136                 setting.displayRect.w, setting.displayRect.h);
137         }
138 
139         if ((setting.bufferRatio.h > 0.0f) || (setting.bufferRatio.w > 0.0f)) {
140             setting.bufferSize.h = static_cast<uint32_t>(setting.bufferRatio.h * h);
141             setting.bufferSize.w = static_cast<uint32_t>(setting.bufferRatio.w * w);
142             DISPLAY_TEST_LOGE("buffer size adjust for %f %f to %{public}d %{public}d",
143                 setting.bufferRatio.w, setting.bufferRatio.h, setting.bufferSize.w, setting.bufferSize.h);
144         }
145 
146         if ((setting.bufferSize.w == 0) || (setting.bufferSize.h == 0)) {
147             DISPLAY_TEST_LOGE("buffer size adjust for %{public}d %{public}d to %{public}d %{public}d",
148                 setting.bufferSize.w, setting.bufferSize.h, setting.displayRect.w, setting.displayRect.h);
149 
150             setting.bufferSize.w = setting.displayRect.w;
151             setting.bufferSize.h = setting.displayRect.h;
152         }
153     }
154 }
155 
CreateLayers(std::vector<LayerSettings> & settings)156 static std::vector<std::shared_ptr<HdiTestLayer>> CreateLayers(std::vector<LayerSettings> &settings)
157 {
158     DISPLAY_TEST_LOGE("settings %{public}zd", settings.size());
159     std::vector<std::shared_ptr<HdiTestLayer>> layers;
160     DisplayModeInfo mode = GetFirstDisplay()->GetCurrentMode();
161     AdjustLayerSettings(settings, mode.width, mode.height);
162     for (uint32_t i = 0; i < settings.size(); i++) {
163         LayerSettings setting = settings[i];
164 
165         auto layer = CreateTestLayer(setting, i);
166         layers.push_back(layer);
167     }
168     return layers;
169 }
170 
PresentAndCheck(std::vector<LayerSettings> & layerSettings,uint32_t checkType=HdiCompositionCheck::CHECK_VERTEX)171 static inline void PresentAndCheck(std::vector<LayerSettings> &layerSettings,
172     uint32_t checkType = HdiCompositionCheck::CHECK_VERTEX)
173 {
174     int ret = PrepareAndPrensent();
175     ASSERT_TRUE((ret == DISPLAY_SUCCESS));
176     if ((GetFirstDisplay()->SnapShot()) != nullptr) {
177         HdiTestDevice::GetInstance().GetGrallocInterface()->InvalidateCache(*(GetFirstDisplay()->SnapShot()));
178         ret = CheckComposition(layerSettings, GetFirstDisplay()->SnapShot(), checkType);
179         ASSERT_TRUE((ret == DISPLAY_SUCCESS));
180     }
181 }
182 
183 /**
184   * @tc.name: SetClientBufferCacheCountTest
185   * @tc.desc: Benchmarktest for interface SetClientBufferCacheCount.
186   */
BENCHMARK_F(DisplayBenchmarkTest,SetClientBufferCacheCountTest)187 BENCHMARK_F(DisplayBenchmarkTest, SetClientBufferCacheCountTest)(benchmark::State &state)
188 {
189     int32_t ret;
190     const uint32_t CACHE_COUNT = 5;
191     for (auto _ : state) {
192         ret = g_composerDevice->SetClientBufferCacheCount(g_displayIds[0], CACHE_COUNT);
193     }
194     EXPECT_EQ(DISPLAY_SUCCESS, ret);
195 }
196 
197 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetClientBufferCacheCountTest)->
198     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
199 
200 /**
201   * @tc.name: GetDisplayCapabilityTest
202   * @tc.desc: Benchmarktest for interface GetDisplayCapability.
203   */
BENCHMARK_F(DisplayBenchmarkTest,GetDisplayCapabilityTest)204 BENCHMARK_F(DisplayBenchmarkTest, GetDisplayCapabilityTest)(benchmark::State &state)
205 {
206     int32_t ret;
207     DisplayCapability info;
208     for (auto _ : state) {
209         ret = g_composerDevice->GetDisplayCapability(g_displayIds[0], info);
210     }
211     EXPECT_EQ(DISPLAY_SUCCESS, ret);
212 }
213 
214 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplayCapabilityTest)->
215     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
216 
217 /**
218   * @tc.name: GetDisplaySupportedModesTest
219   * @tc.desc: Benchmarktest for interface GetDisplaySupportedModes.
220   */
BENCHMARK_F(DisplayBenchmarkTest,GetDisplaySupportedModesTest)221 BENCHMARK_F(DisplayBenchmarkTest, GetDisplaySupportedModesTest)(benchmark::State &state)
222 {
223     int32_t ret;
224     std::vector<DisplayModeInfo> modes;
225     for (auto _ : state) {
226         ret = g_composerDevice->GetDisplaySupportedModes(g_displayIds[0], modes);
227     }
228     EXPECT_EQ(DISPLAY_SUCCESS, ret);
229 }
230 
231 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplaySupportedModesTest)->
232     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
233 
234 /**
235   * @tc.name: GetDisplayModeTest
236   * @tc.desc: Benchmarktest for interface GetDisplayMode.
237   */
BENCHMARK_F(DisplayBenchmarkTest,GetDisplayModeTest)238 BENCHMARK_F(DisplayBenchmarkTest, GetDisplayModeTest)(benchmark::State &state)
239 {
240     int32_t ret;
241     uint32_t modeId = 0;
242     for (auto _ : state) {
243         ret = g_composerDevice->GetDisplayMode(modeId, modeId);
244     }
245     EXPECT_EQ(DISPLAY_SUCCESS, ret);
246 }
247 
248 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplayModeTest)->
249     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
250 
251 /**
252   * @tc.name: SetDisplayModeTest
253   * @tc.desc: Benchmarktest for interface SetDisplayMode.
254   */
BENCHMARK_F(DisplayBenchmarkTest,SetDisplayModeTest)255 BENCHMARK_F(DisplayBenchmarkTest, SetDisplayModeTest)(benchmark::State &state)
256 {
257     int32_t ret;
258     const uint32_t modeId = 0;
259     for (auto _ : state) {
260         ret = g_composerDevice->SetDisplayMode(g_displayIds[0], modeId);
261     }
262     EXPECT_EQ(DISPLAY_SUCCESS, ret);
263 }
264 
265 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetDisplayModeTest)->
266     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
267 
268 /**
269   * @tc.name: GetDisplayPowerStatusTest
270   * @tc.desc: Benchmarktest for interface GetDisplayPowerStatus.
271   */
BENCHMARK_F(DisplayBenchmarkTest,GetDisplayPowerStatusTest)272 BENCHMARK_F(DisplayBenchmarkTest, GetDisplayPowerStatusTest)(benchmark::State &state)
273 {
274     int32_t ret;
275     DispPowerStatus powerStatus = DispPowerStatus::POWER_STATUS_OFF;
276     for (auto _ : state) {
277         ret = g_composerDevice->GetDisplayPowerStatus(g_displayIds[0], powerStatus);
278     }
279     EXPECT_EQ(DISPLAY_SUCCESS, ret);
280 }
281 
282 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplayPowerStatusTest)->
283     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
284 
285 /**
286   * @tc.name: SetDisplayPowerStatusTest
287   * @tc.desc: Benchmarktest for interface SetDisplayPowerStatus.
288   */
BENCHMARK_F(DisplayBenchmarkTest,SetDisplayPowerStatusTest)289 BENCHMARK_F(DisplayBenchmarkTest, SetDisplayPowerStatusTest)(benchmark::State &state)
290 {
291     int32_t ret;
292     for (auto _ : state) {
293         ret = g_composerDevice->SetDisplayPowerStatus(g_displayIds[0], DispPowerStatus::POWER_STATUS_ON);
294     }
295     EXPECT_EQ(DISPLAY_SUCCESS, ret);
296 }
297 
298 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetDisplayPowerStatusTest)->
299     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
300 
301 /**
302   * @tc.name: GetDisplayBacklightTest
303   * @tc.desc: Benchmarktest for interface GetDisplayBacklight.
304   */
BENCHMARK_F(DisplayBenchmarkTest,GetDisplayBacklightTest)305 BENCHMARK_F(DisplayBenchmarkTest, GetDisplayBacklightTest)(benchmark::State &state)
306 {
307     int32_t ret;
308     uint32_t level;
309     for (auto _ : state) {
310         ret = g_composerDevice->GetDisplayBacklight(g_displayIds[0], level);
311     }
312     EXPECT_EQ(DISPLAY_SUCCESS, ret);
313 }
314 
315 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplayBacklightTest)->
316     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
317 
318 /**
319   * @tc.name: SetDisplayBacklightTest
320   * @tc.desc: Benchmarktest for interface SetDisplayBacklight.
321   */
BENCHMARK_F(DisplayBenchmarkTest,SetDisplayBacklightTest)322 BENCHMARK_F(DisplayBenchmarkTest, SetDisplayBacklightTest)(benchmark::State &state)
323 {
324     int32_t ret;
325     const uint32_t level = 10;
326     for (auto _ : state) {
327         ret = g_composerDevice->SetDisplayBacklight(g_displayIds[0], level);
328     }
329     EXPECT_EQ(DISPLAY_SUCCESS, ret);
330 }
331 
332 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetDisplayBacklightTest)->
333     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
334 
335 /**
336   * @tc.name: CreateAndDestroyLayerTest
337   * @tc.desc: Benchmarktest for interface CreateLayer And DestroyLayer.
338   */
BENCHMARK_F(DisplayBenchmarkTest,CreateAndDestroyLayerTest)339 BENCHMARK_F(DisplayBenchmarkTest, CreateAndDestroyLayerTest)(benchmark::State &state)
340 {
341     int32_t ret;
342     LayerInfo layerInfo;
343     uint32_t layerId;
344     for (auto _ : state) {
345         uint32_t bufferCount = 3;
346         ret = g_composerDevice->CreateLayer(g_displayIds[0], layerInfo, bufferCount, layerId);
347         EXPECT_EQ(DISPLAY_SUCCESS, ret);
348         ret = g_composerDevice->DestroyLayer(g_displayIds[0], layerId);
349     }
350     EXPECT_EQ(DISPLAY_SUCCESS, ret);
351 }
352 
353 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, CreateAndDestroyLayerTest)->
354     Iterations(10)->Repetitions(3)->ReportAggregatesOnly();
355 
356 /**
357   * @tc.name: GetDisplayCompChangeTest
358   * @tc.desc: Benchmarktest for interface GetDisplayCompChange.
359   */
BENCHMARK_F(DisplayBenchmarkTest,GetDisplayCompChangeTest)360 BENCHMARK_F(DisplayBenchmarkTest, GetDisplayCompChangeTest)(benchmark::State &state)
361 {
362     std::vector<uint32_t> layers {};
363     std::vector<int32_t> type {};
364     int32_t ret;
365     for (auto _ : state) {
366         ret = g_composerDevice->GetDisplayCompChange(g_displayIds[0], layers, type);
367     }
368     EXPECT_EQ(DISPLAY_SUCCESS, ret);
369 }
370 
371 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplayCompChangeTest)->
372     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
373 
374 /**
375   * @tc.name: GetDisplayReleaseFenceTest
376   * @tc.desc: Benchmarktest for interface GetDisplayReleaseFence.
377   */
BENCHMARK_F(DisplayBenchmarkTest,GetDisplayReleaseFenceTest)378 BENCHMARK_F(DisplayBenchmarkTest, GetDisplayReleaseFenceTest)(benchmark::State &state)
379 {
380     int32_t ret;
381     std::vector<uint32_t> layers {};
382     std::vector<int32_t> fences {};
383     for (auto _ : state) {
384         ret = g_composerDevice->GetDisplayReleaseFence(g_displayIds[0], layers, fences);
385     }
386     EXPECT_EQ(DISPLAY_SUCCESS, ret);
387 }
388 
389 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplayReleaseFenceTest)->
390     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
391 
BENCHMARK_F(DisplayBenchmarkTest,AllocMemTest)392 BENCHMARK_F(DisplayBenchmarkTest, AllocMemTest)(benchmark::State &state)
393 {
394     BufferHandle* buffer = nullptr;
395     AllocInfo info;
396         info.width  = 800;
397         info.height = 600;
398         info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
399                 OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
400                 OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
401     for (auto _ : state) {
402         g_gralloc->AllocMem(info, buffer);
403     }
404 }
405 
406 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, AllocMemTest)->
407     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
408 
BENCHMARK_F(DisplayBenchmarkTest,MmapTest)409 BENCHMARK_F(DisplayBenchmarkTest, MmapTest)(benchmark::State &state)
410 {
411     BufferHandle* buffer = nullptr;
412     AllocInfo info;
413     info.width  = 100;
414     info.height = 100;
415     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
416             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
417             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
418     info.format = PIXEL_FMT_RGBA_8888;
419     g_gralloc->AllocMem(info, buffer);
420     for (auto _ : state) {
421         g_gralloc->Mmap(*buffer);
422     }
423 }
424 
425 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, MmapTest)->
426     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
427 
BENCHMARK_F(DisplayBenchmarkTest,InvalidateCacheTest)428 BENCHMARK_F(DisplayBenchmarkTest, InvalidateCacheTest)(benchmark::State &state)
429 {
430     BufferHandle* buffer = nullptr;
431     AllocInfo info;
432     info.width  = 100;
433     info.height = 100;
434     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
435             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
436             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
437     info.format = PIXEL_FMT_RGBA_8888;
438     g_gralloc->AllocMem(info, buffer);
439     for (auto _ : state) {
440         g_gralloc->InvalidateCache(*buffer);
441     }
442 }
443 
444 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, InvalidateCacheTest)->
445     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
446 
BENCHMARK_F(DisplayBenchmarkTest,FlushCacheTest)447 BENCHMARK_F(DisplayBenchmarkTest, FlushCacheTest)(benchmark::State &state)
448 {
449     BufferHandle* buffer = nullptr;
450     AllocInfo info;
451     info.width  = 100;
452     info.height = 100;
453     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
454             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
455             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
456     info.format = PIXEL_FMT_RGBA_8888;
457     g_gralloc->AllocMem(info, buffer);
458     for (auto _ : state) {
459         g_gralloc->FlushCache(*buffer);
460     }
461 }
462 
463 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, FlushCacheTest)->
464     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
465 
BENCHMARK_F(DisplayBenchmarkTest,UnmapTest)466 BENCHMARK_F(DisplayBenchmarkTest, UnmapTest)(benchmark::State &state)
467 {
468     BufferHandle* buffer = nullptr;
469     AllocInfo info;
470     info.width  = 100;
471     info.height = 100;
472     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
473             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
474             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
475     info.format = PIXEL_FMT_RGBA_8888;
476     g_gralloc->AllocMem(info, buffer);
477     for (auto _ : state) {
478         g_gralloc->Unmap(*buffer);
479     }
480 }
481 
482 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, UnmapTest)->
483     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
484 
485 /**
486   * @tc.name: CreateAndDestroyVirtualDisplayTest
487   * @tc.desc: Benchmarktest for interface CreateVirtualDisplay and DestroyVirtualDisplay.
488   */
BENCHMARK_F(DisplayBenchmarkTest,CreateAndDestroyVirtualDisplayTest)489 BENCHMARK_F(DisplayBenchmarkTest, CreateAndDestroyVirtualDisplayTest)(benchmark::State &state)
490 {
491     int32_t ret;
492     const uint32_t WIDTH = 100;
493     const uint32_t HEIGHT = 100;
494     int32_t format = 0;
495     for (auto _ : state) {
496         ret = g_composerDevice->CreateVirtualDisplay(WIDTH, HEIGHT, format, g_displayIds[0]);
497         EXPECT_EQ(DISPLAY_FAILURE, ret);
498         ret = g_composerDevice->DestroyVirtualDisplay(g_displayIds[0]);
499     }
500     EXPECT_EQ(DISPLAY_FAILURE, ret);
501 }
502 
503 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, CreateAndDestroyVirtualDisplayTest)->
504     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
505 
506 /**
507   * @tc.name: SetVirtualDisplayBufferTest
508   * @tc.desc: Benchmarktest for interface SetVirtualDisplayBuffer.
509   */
BENCHMARK_F(DisplayBenchmarkTest,SetVirtualDisplayBufferTest)510 BENCHMARK_F(DisplayBenchmarkTest, SetVirtualDisplayBufferTest)(benchmark::State &state)
511 {
512     BufferHandle* buffer = nullptr;
513     int32_t ret;
514     int32_t fence = -1;
515 
516     AllocInfo info;
517     info.width  = 100;
518     info.height = 100;
519     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
520             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
521             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
522     info.format = PIXEL_FMT_RGBA_8888;
523         g_gralloc->AllocMem(info, buffer);
524         ASSERT_TRUE(buffer != nullptr);
525 
526     for (auto _ : state) {
527         ret = g_composerDevice->SetVirtualDisplayBuffer(g_displayIds[0], *buffer, fence);
528     }
529     g_gralloc->FreeMem(*buffer);
530     // not support
531     EXPECT_EQ(DISPLAY_FAILURE, ret);
532 }
533 
534 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetVirtualDisplayBufferTest)->
535     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
536 
537 /**
538   * @tc.name: SetDisplayPropertyTest
539   * @tc.desc: Benchmarktest for interface SetDisplayProperty.
540   */
BENCHMARK_F(DisplayBenchmarkTest,SetDisplayPropertyTest)541 BENCHMARK_F(DisplayBenchmarkTest, SetDisplayPropertyTest)(benchmark::State &state)
542 {
543     int32_t ret;
544     uint32_t id = 1;
545     uint64_t value = 0;
546     for (auto _ : state) {
547         ret = g_composerDevice->SetDisplayProperty(g_displayIds[0], id, value);
548     }
549     EXPECT_EQ(DISPLAY_FAILURE, ret);
550 }
551 
552 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetDisplayPropertyTest)->
553     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
554 
555 /**
556   * @tc.name: GetDisplayPropertyTest
557   * @tc.desc: Benchmarktest for interface GetDisplayProperty.
558   */
BENCHMARK_F(DisplayBenchmarkTest,GetDisplayPropertyTest)559 BENCHMARK_F(DisplayBenchmarkTest, GetDisplayPropertyTest)(benchmark::State &state)
560 {
561     int32_t ret;
562     uint32_t id = 1;
563     uint64_t value = 0;
564     for (auto _ : state) {
565         ret = g_composerDevice->GetDisplayProperty(g_displayIds[0], id, value);
566     }
567     EXPECT_EQ(DISPLAY_FAILURE, ret);
568 }
569 
570 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplayPropertyTest)->
571     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
572 
573 /**
574   * @tc.name: SetDisplayClientCropTest
575   * @tc.desc: Benchmarktest for interface SetDisplayClientCrop.
576   */
BENCHMARK_F(DisplayBenchmarkTest,SetDisplayClientCropTest)577 BENCHMARK_F(DisplayBenchmarkTest, SetDisplayClientCropTest)(benchmark::State &state)
578 {
579     int32_t ret;
580     int32_t width = 100;
581     int32_t height = 100;
582     IRect rect = {0, 0, width, height};
583     for (auto _ : state) {
584         ret = g_composerDevice->SetDisplayClientCrop(g_displayIds[0], rect);
585     }
586     EXPECT_EQ(DISPLAY_FAILURE, ret);
587 }
588 
589 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetDisplayClientCropTest)->
590     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
591 
BENCHMARK_F(DisplayBenchmarkTest,SetZorderTest)592 BENCHMARK_F(DisplayBenchmarkTest, SetZorderTest)(benchmark::State &state)
593 {
594     std::vector<LayerSettings> settings = {
595         {
596             .rectRatio = { 0, 0, 1.0f, 1.0f },
597             .color = RED
598         },
599         {
600             .rectRatio = { 0, 0, 1.0f, 1.0f },
601             .color = GREEN
602         },
603         {
604             .rectRatio = { 0, 0, 1.0f, 1.0f },
605             .color = YELLOW
606         },
607     };
608 
609     std::vector<std::vector<int>> zorders = {
610         { 3, 2, 1 }, { 1, 3, 2 }, { 3, 1, 2 }, { 1, 2, 3 }, { 2, 1, 3 }, { 2, 3, 1 },
611     };
612     std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
613 
614     for (auto _ : state) {
615         for (const auto& zorderList : zorders) {
616             // adjust the zorder
617             for (uint32_t i = 0; i < zorderList.size(); i++) {
618                 settings[i].zorder = zorderList[i];
619                 layers[i]->SetZorder(zorderList[i]);
620             }
621             std::vector<LayerSettings> tempSettings = settings;
622             std::sort(tempSettings.begin(), tempSettings.end(),
623                 [=](const auto& l, auto const & r) { return l.zorder < r.zorder; });
624             // present and check
625             PresentAndCheck(tempSettings);
626         }
627     }
628     HdiTestDevice::GetInstance().Clear();
629 }
630 
631 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetZorderTest)->
632     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
633 
BENCHMARK_F(DisplayBenchmarkTest,SetLayerPreMultiTest)634 BENCHMARK_F(DisplayBenchmarkTest, SetLayerPreMultiTest)(benchmark::State &state)
635 {
636     int32_t ret;
637     std::vector<LayerSettings> settings = {
638         {
639             .rectRatio = { 0, 0, 1.0f, 1.0f },
640             .color = GREEN
641         },
642     };
643     for (auto _ : state) {
644         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
645         ASSERT_TRUE((layers.size() > 0));
646         PrepareAndPrensent();
647         auto layer = layers[0];
648         bool preMul = true;
649         ret = g_composerDevice->SetLayerPreMulti(g_displayIds[0], layer->GetId(), preMul);
650     }
651     PrepareAndPrensent();
652     HdiTestDevice::GetInstance().Clear();
653     EXPECT_EQ(DISPLAY_SUCCESS, ret);
654 }
655 
656 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetLayerPreMultiTest)->
657     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
658 
BENCHMARK_F(DisplayBenchmarkTest,SetAlphaTest)659 BENCHMARK_F(DisplayBenchmarkTest, SetAlphaTest)(benchmark::State &state)
660 {
661     std::vector<LayerSettings> settings = {
662         {
663             .rectRatio = { 0, 0, 1.0f, 1.0f },
664             .color = GREEN
665         },
666         {
667             .rectRatio = { 0, 0, 1.0f, 1.0f },
668             .color = RED
669         },
670     };
671 
672     std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
673     ASSERT_TRUE((layers.size() > 0));
674 
675     auto layer = layers[1];
676     LayerAlpha alpha = { 0 };
677     alpha.enGlobalAlpha = true;
678     alpha.enPixelAlpha = true;
679     alpha.gAlpha = 0;
680     alpha.alpha0 = 0;
681     alpha.alpha1 = 0;
682     for (auto _ : state) {
683         layer->SetAlpha(alpha);
684     }
685     PrepareAndPrensent();
686     HdiTestDevice::GetInstance().Clear();
687 }
688 
689 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetAlphaTest)->
690     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
691 
BENCHMARK_F(DisplayBenchmarkTest,SetLayerRegionTest)692 BENCHMARK_F(DisplayBenchmarkTest, SetLayerRegionTest)(benchmark::State &state)
693 {
694     int32_t ret;
695     std::vector<LayerSettings> settings = {
696         {.rectRatio = {0, 0, 1.0f, 1.0f}, .color = GREEN, .alpha = 0xFF}
697     };
698     for (auto _ : state) {
699         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
700         ASSERT_TRUE((layers.size() > 0));
701 
702         const int32_t WIDTH = 100;
703         const int32_t HEIGHT = 100;
704         auto layer = layers[0];
705         IRect rect = {0, 0, WIDTH, HEIGHT};
706         ret = g_composerDevice->SetLayerRegion(g_displayIds[0], layer->GetId(), rect);
707     }
708     PrepareAndPrensent();
709     EXPECT_EQ(DISPLAY_SUCCESS, ret);
710 }
711 
712 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetLayerRegionTest)->
713     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
714 
BENCHMARK_F(DisplayBenchmarkTest,SetLayerDirtyRegionTest)715 BENCHMARK_F(DisplayBenchmarkTest, SetLayerDirtyRegionTest)(benchmark::State &state)
716 {
717     int32_t ret;
718     std::vector<LayerSettings> settings = {
719         {
720             .rectRatio = { 0, 0, 1.0f, 1.0f },
721             .color = BLUE
722         }
723     };
724     for (auto _ : state) {
725         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
726         ASSERT_TRUE((layers.size() > 0));
727         auto layer = layers[0];
728         const int32_t WIDTH = 100;
729         const int32_t HEIGHT = 100;
730         IRect rect = {0, 0, WIDTH, HEIGHT};
731         std::vector<IRect> vRects;
732         vRects.push_back(rect);
733         ret = g_composerDevice->SetLayerDirtyRegion(g_displayIds[0], layer->GetId(), vRects);
734     }
735     PrepareAndPrensent();
736     HdiTestDevice::GetInstance().Clear();
737     EXPECT_EQ(DISPLAY_SUCCESS, ret);
738 }
739 
740 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetLayerDirtyRegionTest)->
741     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
742 
BENCHMARK_F(DisplayBenchmarkTest,SetLayerTransformModeTest)743 BENCHMARK_F(DisplayBenchmarkTest, SetLayerTransformModeTest)(benchmark::State &state)
744 {
745     int32_t ret;
746     std::vector<LayerSettings> settings = {
747         {
748             .rectRatio = { 0, 0, 1.0f, 1.0f },
749             .color = RED
750         }
751     };
752     std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
753     ASSERT_TRUE((layers.size() > 0));
754     PrepareAndPrensent();
755     auto layer = layers[0];
756     for (auto _ : state) {
757         TransformType type = TransformType::ROTATE_90;
758         ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type);
759         PrepareAndPrensent();
760 
761         type = TransformType::ROTATE_180;
762         ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type);
763         PrepareAndPrensent();
764 
765         type = TransformType::ROTATE_270;
766         ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type);
767         PrepareAndPrensent();
768     }
769     EXPECT_EQ(DISPLAY_SUCCESS, ret);
770 }
771 
772 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetLayerTransformModeTest)->
773     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
774 
BENCHMARK_F(DisplayBenchmarkTest,SetLayerVisibleRegionTest)775 BENCHMARK_F(DisplayBenchmarkTest, SetLayerVisibleRegionTest)(benchmark::State &state)
776 {
777     int32_t ret;
778     std::vector<LayerSettings> settings = {
779         {
780             .rectRatio = { 0, 0, 1.0f, 1.0f },
781             .color = BLUE
782         }
783     };
784     for (auto _ : state) {
785         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
786         ASSERT_TRUE((layers.size() > 0));
787         PrepareAndPrensent();
788         auto layer = layers[0];
789         const int32_t WIDTH = 500;
790         const int32_t HEIGHT = 500;
791         IRect region = {0, 0, WIDTH, HEIGHT};
792         std::vector<IRect> regions = {};
793         regions.push_back(region);
794         ret = g_composerDevice->SetLayerVisibleRegion(g_displayIds[0], layer->GetId(), regions);
795     }
796     PrepareAndPrensent();
797     EXPECT_EQ(DISPLAY_SUCCESS, ret);
798 }
799 
800 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetLayerVisibleRegionTest)->
801     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
802 
BENCHMARK_F(DisplayBenchmarkTest,SetLayerCompositionTypeTest)803 BENCHMARK_F(DisplayBenchmarkTest, SetLayerCompositionTypeTest)(benchmark::State &state)
804 {
805     int32_t ret;
806     std::vector<LayerSettings> settings = {
807         {
808             .rectRatio = { 0, 0, 1.0f, 1.0f },
809             .color = BLUE
810         }
811     };
812     for (auto _ : state) {
813         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
814         ASSERT_TRUE((layers.size() > 0));
815         auto layer = layers[0];
816         CompositionType type = CompositionType::COMPOSITION_CLIENT;
817         ret = g_composerDevice->SetLayerCompositionType(g_displayIds[0], layer->GetId(), type);
818     }
819     PrepareAndPrensent();
820 
821     EXPECT_EQ(DISPLAY_SUCCESS, ret);
822 }
823 
824 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetLayerCompositionTypeTest)->
825     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
826 
BENCHMARK_F(DisplayBenchmarkTest,SetLayerBlendTypeTest)827 BENCHMARK_F(DisplayBenchmarkTest, SetLayerBlendTypeTest)(benchmark::State &state)
828 {
829     int32_t ret;
830     std::vector<LayerSettings> settings = {
831         {
832             .rectRatio = { 0, 0, 1.0f, 1.0f },
833             .color = GREEN
834         }
835     };
836     for (auto _ : state) {
837         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
838         ASSERT_TRUE((layers.size() > 0));
839         auto layer = layers[0];
840         BlendType type = BlendType::BLEND_NONE;
841         ret = g_composerDevice->SetLayerBlendType(g_displayIds[0], layer->GetId(), type);
842     }
843     PrepareAndPrensent();
844     EXPECT_EQ(DISPLAY_SUCCESS, ret);
845 }
846 
847 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetLayerBlendTypeTest)->
848     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
849 
BENCHMARK_F(DisplayBenchmarkTest,SetLayerMaskInfoTest)850 BENCHMARK_F(DisplayBenchmarkTest, SetLayerMaskInfoTest)(benchmark::State &state)
851 {
852     int32_t ret;
853     std::vector<LayerSettings> settings = {
854         {
855             .rectRatio = { 0, 0, 1.0f, 1.0f },
856             .color = GREEN
857         }
858     };
859     for (auto _ : state) {
860         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
861         ASSERT_TRUE((layers.size() > 0));
862         auto layer = layers[0];
863         MaskInfo maskInfo = MaskInfo::LAYER_HBM_SYNC;
864         ret = g_composerDevice->SetLayerMaskInfo(g_displayIds[0], layer->GetId(), maskInfo);
865     }
866     PrepareAndPrensent();
867     EXPECT_EQ(DISPLAY_SUCCESS, ret);
868 }
869 
870 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetLayerMaskInfoTest)->
871     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
872 
BENCHMARK_F(DisplayBenchmarkTest,SetLayerColorTest)873 BENCHMARK_F(DisplayBenchmarkTest, SetLayerColorTest)(benchmark::State &state)
874 {
875     int32_t ret;
876     std::vector<LayerSettings> settings = {
877         {
878             .rectRatio = { 0, 0, 1.0f, 1.0f },
879             .color = GREEN
880         }
881     };
882     for (auto _ : state) {
883         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
884         ASSERT_TRUE((layers.size() > 0));
885         auto layer = layers[0];
886         const uint32_t COLOR_R = 155;
887         const uint32_t COLOR_G = 224;
888         const uint32_t COLOR_B = 88;
889         const uint32_t COLOR_A = 128;
890         LayerColor layerColor = {
891             .r = COLOR_R,
892             .g = COLOR_G,
893             .b = COLOR_B,
894             .a = COLOR_A
895         };
896         ret = g_composerDevice->SetLayerColor(g_displayIds[0], layer->GetId(), layerColor);
897     }
898     PrepareAndPrensent();
899 
900     EXPECT_EQ(DISPLAY_SUCCESS, ret);
901 }
902 
903 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetLayerColorTest)->
904     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
905 
BENCHMARK_F(DisplayBenchmarkTest,DestroyLayerTest)906 BENCHMARK_F(DisplayBenchmarkTest, DestroyLayerTest)(benchmark::State &state)
907 {
908     int32_t ret;
909     std::vector<LayerSettings> settings = {
910         {
911             .rectRatio = { 0, 0, 1.0f, 1.0f },
912             .color = PURPLE
913         }
914     };
915     for (auto _ : state) {
916         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
917         ASSERT_TRUE((layers.size() > 0));
918         auto layer = layers[0];
919         PrepareAndPrensent();
920         ret = g_composerDevice->DestroyLayer(g_displayIds[0], layer->GetId());
921     }
922     PrepareAndPrensent();
923     EXPECT_EQ(DISPLAY_SUCCESS, ret);
924 }
925 
926 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, DestroyLayerTest)->
927     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
928 
BENCHMARK_F(DisplayBenchmarkTest,CreateLayersTest)929 BENCHMARK_F(DisplayBenchmarkTest, CreateLayersTest)(benchmark::State &state)
930 {
931     std::vector<LayerSettings> settings = {
932         {
933             .rectRatio = { 0, 0, 1.0f, 1.0f },
934             .color = PURPLE
935         }
936     };
937     for (auto _ : state) {
938         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
939         ASSERT_TRUE((layers.size() > 0));
940     }
941     PrepareAndPrensent();
942 }
943 
944 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, CreateLayersTest)->
945     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
946 
947 
BENCHMARK_F(DisplayBenchmarkTest,FreeMemTest)948 BENCHMARK_F(DisplayBenchmarkTest, FreeMemTest)(benchmark::State &state)
949 {
950     BufferHandle* buffer = nullptr;
951     AllocInfo info;
952     info.width  = 100;
953     info.height = 100;
954     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
955             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
956             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
957     info.format = PIXEL_FMT_RGBA_8888;
958     for (auto _ : state) {
959         g_gralloc->AllocMem(info, buffer);
960         g_gralloc->Unmap(*buffer);
961         g_gralloc->FreeMem(*buffer);
962     }
963 }
964 
965 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, FreeMemTest)->
966     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
967 
968 }
main(int argc,char ** argv)969 int main(int argc, char** argv)
970 {
971     int ret = HdiTestDevice::GetInstance().InitDevice();
972     DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("Init Device Failed"));
973     ::testing::InitGoogleTest(&argc, argv);
974     ::benchmark::Initialize(&argc, argv);
975     if (::benchmark::ReportUnrecognizedArguments(argc, argv)) {
976         return 1; // 1: Benchmark native test suite native solution
977     }
978     g_composerDevice = HdiTestDevice::GetInstance().GetDeviceInterface();
979     DISPLAY_TEST_CHK_RETURN((g_composerDevice == nullptr), DISPLAY_FAILURE,
980         DISPLAY_TEST_LOGE("get composer interface failed"));
981     g_gralloc.reset(IDisplayBuffer::Get());
982     DISPLAY_TEST_CHK_RETURN((g_gralloc == nullptr), DISPLAY_FAILURE,
983         DISPLAY_TEST_LOGE("get buffer interface failed"));
984     auto display = HdiTestDevice::GetInstance().GetFirstDisplay();
985     if (display != nullptr) {
986         g_displayIds = HdiTestDevice::GetInstance().GetDevIds();
987         display->SetDisplayVsyncEnabled(false);
988     }
989     ::benchmark::RunSpecifiedBenchmarks();
990     ::benchmark::Shutdown();
991     HdiTestDevice::GetInstance().GetFirstDisplay()->ResetClientLayer();
992     return ret;
993 }