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_2/include/idisplay_composer_interface.h"
27 #include "v1_1/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_1;
39 using namespace OHOS::HDI::Display::TEST;
40 using namespace testing::ext;
41 
42 namespace {
43 static sptr<Composer::V1_2::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 TearDown(const ::benchmark::State &state);
50     static void OnMode(uint32_t modeId, uint64_t vBlankPeriod, void* data);
51     static void OnseamlessChange(uint32_t devId, void* data);
52     static void TestRefreshCallback(uint32_t devId, void* data);
53 };
54 
TearDown(const ::benchmark::State &state)55 void DisplayBenchmarkTest::TearDown(const ::benchmark::State &state)
56 {
57     HdiTestDevice::GetInstance().Clear();
58 }
59 
OnMode(uint32_t modeId, uint64_t vBlankPeriod, void* data)60 void DisplayBenchmarkTest::OnMode(uint32_t modeId, uint64_t vBlankPeriod, void* data)
61 {
62 }
63 
OnseamlessChange(uint32_t devId, void* data)64 void DisplayBenchmarkTest::OnseamlessChange(uint32_t devId, void* data)
65 {
66 }
67 
TestRefreshCallback(uint32_t devId, void* data)68 void DisplayBenchmarkTest::TestRefreshCallback(uint32_t devId, void* data)
69 {
70 }
71 
GetFirstDisplay()72 static inline std::shared_ptr<HdiTestDisplay> GetFirstDisplay()
73 {
74     return HdiTestDevice::GetInstance().GetFirstDisplay();
75 }
76 
CheckComposition(std::vector<LayerSettings> &layers, BufferHandle* clientBuffer, uint32_t checkType = HdiCompositionCheck::CHECK_VERTEX)77 static int32_t CheckComposition(std::vector<LayerSettings> &layers, BufferHandle* clientBuffer,
78     uint32_t checkType = HdiCompositionCheck::CHECK_VERTEX)
79 {
80     DISPLAY_TEST_CHK_RETURN((clientBuffer == nullptr), DISPLAY_NULL_PTR, DISPLAY_TEST_LOGE("client buffer is nullptr"));
81     return HdiCompositionCheck::GetInstance().Check(layers, *clientBuffer, checkType);
82 }
83 
CreateTestLayer(LayerSettings setting, uint32_t zorder)84 static std::shared_ptr<HdiTestLayer> CreateTestLayer(LayerSettings setting, uint32_t zorder)
85 {
86     int ret;
87     HdiTestDevice::GetInstance();
88     DISPLAY_TEST_LOGE("color 0x%x", setting.color);
89     std::shared_ptr<HdiTestDisplay> display = HdiTestDevice::GetInstance().GetFirstDisplay();
90     DISPLAY_TEST_CHK_RETURN((display == nullptr), nullptr, DISPLAY_TEST_LOGE("can not get display"));
91 
92     std::shared_ptr<HdiTestLayer> layer = display->CreateHdiTestLayer(setting.bufferSize.w, setting.bufferSize.h);
93     DISPLAY_TEST_CHK_RETURN((layer == nullptr), nullptr, DISPLAY_TEST_LOGE("can not create hdi test layer"));
94 
95     layer->SetLayerPosition(setting.displayRect);
96 
97     layer->SetCompType(setting.compositionType);
98 
99     if ((setting.alpha >= 0) && (setting.alpha <= 0xff)) { // alpha rang 0x00 ~ 0xff
100         LayerAlpha alpha = { 0 };
101         alpha.gAlpha = setting.alpha;
102         alpha.enGlobalAlpha = true;
103         layer->SetAlpha(alpha);
104     }
105     HdiGrallocBuffer* handle = layer->GetFrontBuffer();
106     DISPLAY_TEST_CHK_RETURN((handle == nullptr), nullptr, DISPLAY_TEST_LOGE("can not get front buffer"));
107     ClearColor(*(handle->Get()), setting.color);
108     ret = layer->SwapFrontToBackQ();
109     DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), nullptr, DISPLAY_TEST_LOGE("SwapFrontToBackQ failed"));
110     layer->SetZorder(zorder);
111     layer->SetBlendType(setting.blendType);
112     layer->SetTransform(setting.rotate);
113     return layer;
114 }
115 
PrepareAndPrensent()116 static int PrepareAndPrensent()
117 {
118     int ret;
119     DISPLAY_TEST_LOGE();
120     std::shared_ptr<HdiTestDisplay> display = HdiTestDevice::GetInstance().GetFirstDisplay();
121     DISPLAY_TEST_CHK_RETURN((display == nullptr), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("can not get display"));
122 
123     ret = display->PrepareDisplayLayers();
124     DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE,
125         DISPLAY_TEST_LOGE("PrepareDisplayLayers failed"));
126 
127     ret = display->Commit();
128     DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("Commit failed"));
129     return DISPLAY_SUCCESS;
130 }
131 
AdjustLayerSettings(std::vector<LayerSettings> &settings, uint32_t w, uint32_t h)132 static void AdjustLayerSettings(std::vector<LayerSettings> &settings, uint32_t w, uint32_t h)
133 {
134     DISPLAY_TEST_LOGE();
135     for (uint32_t i = 0; i < settings.size(); i++) {
136         LayerSettings& setting = settings[i];
137         DISPLAY_TEST_LOGE(" ratio w: %f  ratio h: %f", setting.rectRatio.w, setting.rectRatio.h);
138         if ((setting.rectRatio.w > 0.0f) && (setting.rectRatio.h > 0.0f)) {
139             setting.displayRect.h = static_cast<uint32_t>(setting.rectRatio.h * h);
140             setting.displayRect.w = static_cast<uint32_t>(setting.rectRatio.w * w);
141             setting.displayRect.x = static_cast<uint32_t>(setting.rectRatio.x * w);
142             setting.displayRect.y = static_cast<uint32_t>(setting.rectRatio.y * h);
143             DISPLAY_TEST_LOGE("display rect adust form %f %f %f %f to %{public}d %{public}d %{public}d %{public}d ",
144                 setting.rectRatio.x, setting.rectRatio.y, setting.rectRatio.w,
145                 setting.rectRatio.h, setting.displayRect.x, setting.displayRect.y,
146                 setting.displayRect.w, setting.displayRect.h);
147         }
148 
149         if ((setting.bufferRatio.h > 0.0f) || (setting.bufferRatio.w > 0.0f)) {
150             setting.bufferSize.h = static_cast<uint32_t>(setting.bufferRatio.h * h);
151             setting.bufferSize.w = static_cast<uint32_t>(setting.bufferRatio.w * w);
152             DISPLAY_TEST_LOGE("buffer size adjust for %f %f to %{public}d %{public}d",
153                 setting.bufferRatio.w, setting.bufferRatio.h, setting.bufferSize.w, setting.bufferSize.h);
154         }
155 
156         if ((setting.bufferSize.w == 0) || (setting.bufferSize.h == 0)) {
157             DISPLAY_TEST_LOGE("buffer size adjust for %{public}d %{public}d to %{public}d %{public}d",
158                 setting.bufferSize.w, setting.bufferSize.h, setting.displayRect.w, setting.displayRect.h);
159 
160             setting.bufferSize.w = setting.displayRect.w;
161             setting.bufferSize.h = setting.displayRect.h;
162         }
163     }
164 }
165 
CreateLayers(std::vector<LayerSettings> &settings)166 static std::vector<std::shared_ptr<HdiTestLayer>> CreateLayers(std::vector<LayerSettings> &settings)
167 {
168     DISPLAY_TEST_LOGE("settings %{public}zd", settings.size());
169     std::vector<std::shared_ptr<HdiTestLayer>> layers;
170     DisplayModeInfo mode = GetFirstDisplay()->GetCurrentMode();
171     AdjustLayerSettings(settings, mode.width, mode.height);
172     for (uint32_t i = 0; i < settings.size(); i++) {
173         LayerSettings setting = settings[i];
174 
175         auto layer = CreateTestLayer(setting, i);
176         layers.push_back(layer);
177     }
178     return layers;
179 }
180 
PresentAndCheck(std::vector<LayerSettings> &layerSettings, uint32_t checkType = HdiCompositionCheck::CHECK_VERTEX)181 static inline void PresentAndCheck(std::vector<LayerSettings> &layerSettings,
182     uint32_t checkType = HdiCompositionCheck::CHECK_VERTEX)
183 {
184     int ret = PrepareAndPrensent();
185     ASSERT_TRUE((ret == DISPLAY_SUCCESS));
186     if ((GetFirstDisplay()->SnapShot()) != nullptr) {
187         HdiTestDevice::GetInstance().GetGrallocInterface()->InvalidateCache(*(GetFirstDisplay()->SnapShot()));
188         ret = CheckComposition(layerSettings, GetFirstDisplay()->SnapShot(), checkType);
189         ASSERT_TRUE((ret == DISPLAY_SUCCESS));
190     }
191 }
192 
193 /**
194   * @tc.name: SetClientBufferCacheCountTest
195   * @tc.desc: Benchmarktest for interface SetClientBufferCacheCount.
196   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0100)197 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0100)(benchmark::State &state)
198 {
199     int32_t ret;
200     const uint32_t CACHE_COUNT = 5;
201     for (auto _ : state) {
202         ret = g_composerDevice->SetClientBufferCacheCount(g_displayIds[0], CACHE_COUNT);
203     }
204     EXPECT_EQ(DISPLAY_SUCCESS, ret);
205 }
206 
207 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0100)->
208     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
209 
210 /**
211   * @tc.name: GetDisplayCapabilityTest
212   * @tc.desc: Benchmarktest for interface GetDisplayCapability.
213   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0200)214 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0200)(benchmark::State &state)
215 {
216     int32_t ret;
217     DisplayCapability info;
218     for (auto _ : state) {
219         ret = g_composerDevice->GetDisplayCapability(g_displayIds[0], info);
220     }
221     EXPECT_EQ(DISPLAY_SUCCESS, ret);
222 }
223 
224 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0200)->
225     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
226 
227 /**
228   * @tc.name: GetDisplaySupportedModesTest
229   * @tc.desc: Benchmarktest for interface GetDisplaySupportedModes.
230   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0300)231 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0300)(benchmark::State &state)
232 {
233     int32_t ret;
234     std::vector<DisplayModeInfo> modes;
235     for (auto _ : state) {
236         ret = g_composerDevice->GetDisplaySupportedModes(g_displayIds[0], modes);
237     }
238     EXPECT_EQ(DISPLAY_SUCCESS, ret);
239 }
240 
241 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0300)->
242     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
243 
244 /**
245   * @tc.name: GetDisplayModeTest
246   * @tc.desc: Benchmarktest for interface GetDisplayMode.
247   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0400)248 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0400)(benchmark::State &state)
249 {
250     int32_t ret;
251     uint32_t modeId = 0;
252     for (auto _ : state) {
253         ret = g_composerDevice->GetDisplayMode(modeId, modeId);
254     }
255     EXPECT_EQ(DISPLAY_SUCCESS, ret);
256 }
257 
258 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0400)->
259     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
260 
261 /**
262   * @tc.name: SetDisplayModeTest
263   * @tc.desc: Benchmarktest for interface SetDisplayMode.
264   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0500)265 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0500)(benchmark::State &state)
266 {
267     int32_t ret;
268     const uint32_t modeId = 0;
269     for (auto _ : state) {
270         ret = g_composerDevice->SetDisplayMode(g_displayIds[0], modeId);
271     }
272     EXPECT_EQ(DISPLAY_SUCCESS, ret);
273 }
274 
275 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0500)->
276     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
277 
278 /**
279   * @tc.name: GetDisplayPowerStatusTest
280   * @tc.desc: Benchmarktest for interface GetDisplayPowerStatus.
281   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0600)282 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0600)(benchmark::State &state)
283 {
284     int32_t ret;
285     Composer::V1_0::DispPowerStatus powerStatus = Composer::V1_0::DispPowerStatus::POWER_STATUS_OFF;
286     for (auto _ : state) {
287         ret = g_composerDevice->GetDisplayPowerStatus(g_displayIds[0], powerStatus);
288     }
289     EXPECT_EQ(DISPLAY_SUCCESS, ret);
290 }
291 
292 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0600)->
293     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
294 
295 /**
296   * @tc.name: SetDisplayPowerStatusTest
297   * @tc.desc: Benchmarktest for interface SetDisplayPowerStatus.
298   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0700)299 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0700)(benchmark::State &state)
300 {
301     int32_t ret;
302     for (auto _ : state) {
303         ret = g_composerDevice->SetDisplayPowerStatus(g_displayIds[0],
304             Composer::V1_0::DispPowerStatus::POWER_STATUS_ON);
305     }
306     EXPECT_EQ(DISPLAY_SUCCESS, ret);
307 }
308 
309 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0700)->
310     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
311 
312 /**
313   * @tc.name: GetDisplayBacklightTest
314   * @tc.desc: Benchmarktest for interface GetDisplayBacklight.
315   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0800)316 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0800)(benchmark::State &state)
317 {
318     int32_t ret;
319     uint32_t level;
320     for (auto _ : state) {
321         ret = g_composerDevice->GetDisplayBacklight(g_displayIds[0], level);
322     }
323     EXPECT_EQ(DISPLAY_SUCCESS, ret);
324 }
325 
326 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0800)->
327     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
328 
329 /**
330   * @tc.name: SetDisplayBacklightTest
331   * @tc.desc: Benchmarktest for interface SetDisplayBacklight.
332   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0900)333 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0900)(benchmark::State &state)
334 {
335     int32_t ret;
336     const uint32_t level = 10;
337     for (auto _ : state) {
338         ret = g_composerDevice->SetDisplayBacklight(g_displayIds[0], level);
339     }
340     EXPECT_EQ(DISPLAY_SUCCESS, ret);
341 }
342 
343 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_0900)->
344     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
345 
346 /**
347   * @tc.name: CreateAndDestroyLayerTest
348   * @tc.desc: Benchmarktest for interface CreateLayer And DestroyLayer.
349   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1000)350 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1000)(benchmark::State &state)
351 {
352     int32_t ret;
353     LayerInfo layerInfo;
354     uint32_t layerId;
355     for (auto _ : state) {
356         uint32_t bufferCount = 3;
357         ret = g_composerDevice->CreateLayer(g_displayIds[0], layerInfo, bufferCount, layerId);
358         EXPECT_EQ(DISPLAY_SUCCESS, ret);
359         ret = g_composerDevice->DestroyLayer(g_displayIds[0], layerId);
360     }
361     EXPECT_EQ(DISPLAY_SUCCESS, ret);
362 }
363 
364 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1000)->
365     Iterations(10)->Repetitions(3)->ReportAggregatesOnly();
366 
367 /**
368   * @tc.name: GetDisplayCompChangeTest
369   * @tc.desc: Benchmarktest for interface GetDisplayCompChange.
370   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1100)371 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1100)(benchmark::State &state)
372 {
373     std::vector<uint32_t> layers {};
374     std::vector<int32_t> type {};
375     int32_t ret;
376     for (auto _ : state) {
377         ret = g_composerDevice->GetDisplayCompChange(g_displayIds[0], layers, type);
378     }
379     EXPECT_EQ(DISPLAY_SUCCESS, ret);
380 }
381 
382 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1100)->
383     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
384 
385 /**
386   * @tc.name: GetDisplayReleaseFenceTest
387   * @tc.desc: Benchmarktest for interface GetDisplayReleaseFence.
388   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1200)389 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1200)(benchmark::State &state)
390 {
391     int32_t ret;
392     std::vector<uint32_t> layers {};
393     std::vector<int32_t> fences {};
394     for (auto _ : state) {
395         ret = g_composerDevice->GetDisplayReleaseFence(g_displayIds[0], layers, fences);
396     }
397     EXPECT_EQ(DISPLAY_SUCCESS, ret);
398 }
399 
400 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1200)->
401     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
402 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1300)403 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1300)(benchmark::State &state)
404 {
405     BufferHandle* buffer = nullptr;
406     AllocInfo info;
407         info.width  = 800;
408         info.height = 600;
409         info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
410                 OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
411                 OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
412     for (auto _ : state) {
413         g_gralloc->AllocMem(info, buffer);
414     }
415 }
416 
417 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1300)->
418     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
419 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1400)420 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1400)(benchmark::State &state)
421 {
422     BufferHandle* buffer = nullptr;
423     AllocInfo info;
424     info.width  = 100;
425     info.height = 100;
426     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
427             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
428             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
429     info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888;
430     g_gralloc->AllocMem(info, buffer);
431     for (auto _ : state) {
432         g_gralloc->Mmap(*buffer);
433     }
434 }
435 
436 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1400)->
437     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
438 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1500)439 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1500)(benchmark::State &state)
440 {
441     BufferHandle* buffer = nullptr;
442     AllocInfo info;
443     info.width  = 100;
444     info.height = 100;
445     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
446             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
447             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
448     info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888;
449     g_gralloc->AllocMem(info, buffer);
450     for (auto _ : state) {
451         g_gralloc->InvalidateCache(*buffer);
452     }
453 }
454 
455 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1500)->
456     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
457 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1600)458 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1600)(benchmark::State &state)
459 {
460     BufferHandle* buffer = nullptr;
461     AllocInfo info;
462     info.width  = 100;
463     info.height = 100;
464     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
465             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
466             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
467     info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888;
468     g_gralloc->AllocMem(info, buffer);
469     for (auto _ : state) {
470         g_gralloc->FlushCache(*buffer);
471     }
472 }
473 
474 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1600)->
475     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
476 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1700)477 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1700)(benchmark::State &state)
478 {
479     BufferHandle* buffer = nullptr;
480     AllocInfo info;
481     info.width  = 100;
482     info.height = 100;
483     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
484             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
485             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
486     info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888;
487     g_gralloc->AllocMem(info, buffer);
488     for (auto _ : state) {
489         g_gralloc->Unmap(*buffer);
490     }
491 }
492 
493 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1700)->
494     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
495 
496 /**
497   * @tc.name: CreateAndDestroyVirtualDisplayTest
498   * @tc.desc: Benchmarktest for interface CreateVirtualDisplay and DestroyVirtualDisplay.
499   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1800)500 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1800)(benchmark::State &state)
501 {
502     int32_t ret;
503     const uint32_t WIDTH = 100;
504     const uint32_t HEIGHT = 100;
505     int32_t format = 0;
506     for (auto _ : state) {
507         ret = g_composerDevice->CreateVirtualDisplay(WIDTH, HEIGHT, format, g_displayIds[0]);
508         EXPECT_EQ(DISPLAY_FAILURE, ret);
509         ret = g_composerDevice->DestroyVirtualDisplay(g_displayIds[0]);
510     }
511     EXPECT_EQ(DISPLAY_FAILURE, ret);
512 }
513 
514 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1800)->
515     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
516 
517 /**
518   * @tc.name: SetVirtualDisplayBufferTest
519   * @tc.desc: Benchmarktest for interface SetVirtualDisplayBuffer.
520   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1900)521 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1900)(benchmark::State &state)
522 {
523     BufferHandle* buffer = nullptr;
524     int32_t ret;
525     int32_t fence = -1;
526 
527     AllocInfo info;
528     info.width  = 100;
529     info.height = 100;
530     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
531             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
532             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
533     info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888;
534 
535     g_gralloc->AllocMem(info, buffer);
536     ASSERT_TRUE(buffer != nullptr);
537 
538     for (auto _ : state) {
539         ret = g_composerDevice->SetVirtualDisplayBuffer(g_displayIds[0], *buffer, fence);
540     }
541     g_gralloc->FreeMem(*buffer);
542     // not support
543     EXPECT_EQ(DISPLAY_FAILURE, ret);
544 }
545 
546 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_1900)->
547     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
548 
549 /**
550   * @tc.name: SetDisplayPropertyTest
551   * @tc.desc: Benchmarktest for interface SetDisplayProperty.
552   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2000)553 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2000)(benchmark::State &state)
554 {
555     int32_t ret;
556     uint32_t id = 1;
557     uint64_t value = 0;
558     for (auto _ : state) {
559         ret = g_composerDevice->SetDisplayProperty(g_displayIds[0], id, value);
560     }
561     EXPECT_EQ(DISPLAY_FAILURE, ret);
562 }
563 
564 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2000)->
565     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
566 
567 /**
568   * @tc.name: GetDisplayPropertyTest
569   * @tc.desc: Benchmarktest for interface GetDisplayProperty.
570   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2100)571 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2100)(benchmark::State &state)
572 {
573     int32_t ret;
574     uint32_t id = 1;
575     uint64_t value = 0;
576     for (auto _ : state) {
577         ret = g_composerDevice->GetDisplayProperty(g_displayIds[0], id, value);
578     }
579     EXPECT_EQ(DISPLAY_FAILURE, ret);
580 }
581 
582 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2100)->
583     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
584 
585 
586 /**
587   * @tc.name: GetDisplaySupportedModesExtTest
588   * @tc.desc: Benchmarktest for interface GetDisplaySupportedModesExtTest.
589   */
BENCHMARK_F(DisplayBenchmarkTest, GetDisplaySupportedModesExtTest)590 BENCHMARK_F(DisplayBenchmarkTest, GetDisplaySupportedModesExtTest)(benchmark::State &state)
591 {
592     int32_t ret;
593     std::vector<DisplayModeInfoExt> modes;
594     for (auto _ : state) {
595         ret = g_composerDevice->GetDisplaySupportedModesExt(g_displayIds[0], modes);
596     }
597     if (ret == DISPLAY_NOT_SUPPORT) {
598         return;
599     }
600     EXPECT_EQ(DISPLAY_SUCCESS, ret);
601 }
602 
603 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplaySupportedModesExtTest)->
604     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
605 
606 /**
607   * @tc.name: SetDisplayModeAsyncTest
608   * @tc.desc: Benchmarktest for interface SetDisplayModeAsyncTest.
609   */
BENCHMARK_F(DisplayBenchmarkTest, SetDisplayModeAsyncTest)610 BENCHMARK_F(DisplayBenchmarkTest, SetDisplayModeAsyncTest)(benchmark::State &state)
611 {
612     int32_t ret;
613     uint32_t modeid = 0;
614     for (auto _ : state) {
615         ret = g_composerDevice->SetDisplayModeAsync(g_displayIds[0], modeid, OnMode);
616     }
617     if (ret == DISPLAY_NOT_SUPPORT) {
618         return;
619     }
620     EXPECT_EQ(DISPLAY_SUCCESS, ret);
621 }
622 
623 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetDisplayModeAsyncTest)->
624     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
625 
626 /**
627   * @tc.name: GetDisplayVBlankPeriodTest
628   * @tc.desc: Benchmarktest for interface GetDisplayVBlankPeriodTest.
629   */
BENCHMARK_F(DisplayBenchmarkTest, GetDisplayVBlankPeriodTest)630 BENCHMARK_F(DisplayBenchmarkTest, GetDisplayVBlankPeriodTest)(benchmark::State &state)
631 {
632     int32_t ret;
633     uint64_t period = 0;
634     for (auto _ : state) {
635         ret = g_composerDevice->GetDisplayVBlankPeriod(g_displayIds[0], period);
636     }
637     if (ret == DISPLAY_NOT_SUPPORT) {
638         return;
639     }
640     EXPECT_EQ(DISPLAY_SUCCESS, ret);
641 }
642 
643 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplayVBlankPeriodTest)->
644     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
645 
646 /**
647   * @tc.name: RegSeamlessChangeCallbackTest
648   * @tc.desc: Benchmarktest for interface RegSeamlessChangeCallbackTest.
649   */
BENCHMARK_F(DisplayBenchmarkTest, RegSeamlessChangeCallbackTest)650 BENCHMARK_F(DisplayBenchmarkTest, RegSeamlessChangeCallbackTest)(benchmark::State &state)
651 {
652     int32_t ret;
653     for (auto _ : state) {
654         ret = g_composerDevice->RegSeamlessChangeCallback(OnseamlessChange, nullptr);
655     }
656     if (ret == DISPLAY_NOT_SUPPORT) {
657         return;
658     }
659     EXPECT_EQ(DISPLAY_SUCCESS, ret);
660 }
661 
662 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, RegSeamlessChangeCallbackTest)->
663     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
664 
665 /**
666   * @tc.name: SetLayerPerFrameParameterTest
667   * @tc.desc: Benchmarktest for interface SetLayerPerFrameParameter.
668   */
BENCHMARK_F(DisplayBenchmarkTest, SetLayerPerFrameParameterTest)669 BENCHMARK_F(DisplayBenchmarkTest, SetLayerPerFrameParameterTest)(benchmark::State &state)
670 {
671     int32_t ret;
672     LayerInfo layerInfo;
673     uint32_t layerId;
674     std::string key = "FilmFilter";
675     std::vector<int8_t> value = { 1 };
676     uint32_t bufferCount = 3;
677     ret = g_composerDevice->CreateLayer(g_displayIds[0], layerInfo, bufferCount, layerId);
678     EXPECT_EQ(DISPLAY_SUCCESS, ret);
679     for (auto _ : state) {
680         ret = g_composerDevice->SetLayerPerFrameParameter(g_displayIds[0], layerId, key, value);
681     }
682     g_composerDevice->DestroyLayer(g_displayIds[0], layerId);
683     if (ret == DISPLAY_NOT_SUPPORT) {
684         return;
685     }
686     EXPECT_EQ(DISPLAY_SUCCESS, ret);
687 }
688 
689 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetLayerPerFrameParameterTest)->
690     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
691 
692 /**
693   * @tc.name: GetSupportedLayerPerFrameParameterKeyTest
694   * @tc.desc: Benchmarktest for interface GetSupportedLayerPerFrameParameterKey.
695   */
BENCHMARK_F(DisplayBenchmarkTest, GetSupportedLayerPerFrameParameterKeyTest)696 BENCHMARK_F(DisplayBenchmarkTest, GetSupportedLayerPerFrameParameterKeyTest)(benchmark::State &state)
697 {
698     int32_t ret;
699     std::vector<std::string> keys;
700     for (auto _ : state) {
701         ret = g_composerDevice->GetSupportedLayerPerFrameParameterKey(keys);
702     }
703     if (ret == DISPLAY_NOT_SUPPORT) {
704         return;
705     }
706     EXPECT_EQ(DISPLAY_SUCCESS, ret);
707 }
708 
709 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetSupportedLayerPerFrameParameterKeyTest)->
710     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
711 
712 /**
713   * @tc.name: SetDisplayOverlayResolutionTest
714   * @tc.desc: Benchmarktest for interface SetDisplayOverlayResolution.
715   */
BENCHMARK_F(DisplayBenchmarkTest, SetDisplayOverlayResolutionTest)716 BENCHMARK_F(DisplayBenchmarkTest, SetDisplayOverlayResolutionTest)(benchmark::State &state)
717 {
718     int32_t ret;
719     DisplayModeInfo mode = HdiTestDevice::GetInstance().GetFirstDisplay()->GetCurrentMode();
720     for (auto _ : state) {
721         ret = g_composerDevice->SetDisplayOverlayResolution(g_displayIds[0], mode.width, mode.height);
722     }
723     if (ret == DISPLAY_NOT_SUPPORT) {
724         return;
725     }
726     EXPECT_EQ(DISPLAY_SUCCESS, ret);
727 }
728 
729 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SetDisplayOverlayResolutionTest)->
730     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
731 
732 /**
733   * @tc.name: RegRefreshCallbackTest
734   * @tc.desc: Benchmarktest for interface RegRefreshCallback.
735   */
BENCHMARK_F(DisplayBenchmarkTest, RegRefreshCallbackTest)736 BENCHMARK_F(DisplayBenchmarkTest, RegRefreshCallbackTest)(benchmark::State &state)
737 {
738     int32_t ret;
739     for (auto _ : state) {
740         ret = g_composerDevice->RegRefreshCallback(TestRefreshCallback, nullptr);
741     }
742     if (ret == DISPLAY_NOT_SUPPORT) {
743         return;
744     }
745     EXPECT_EQ(DISPLAY_SUCCESS, ret);
746 }
747 
748 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, RegRefreshCallbackTest)->
749     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
750 
751 /**
752   * @tc.name: GetDisplaySupportedColorGamutsTest
753   * @tc.desc: Benchmarktest for interface GetDisplaySupportedColorGamuts.
754   */
BENCHMARK_F(DisplayBenchmarkTest, GetDisplaySupportedColorGamutsTest)755 BENCHMARK_F(DisplayBenchmarkTest, GetDisplaySupportedColorGamutsTest)(benchmark::State &state)
756 {
757     int32_t ret;
758     std::vector<ColorGamut> gamuts;
759     for (auto _ : state) {
760         ret = g_composerDevice->GetDisplaySupportedColorGamuts(g_displayIds[0], gamuts);
761     }
762     if (ret == DISPLAY_NOT_SUPPORT) {
763         return;
764     }
765     EXPECT_EQ(DISPLAY_SUCCESS, ret);
766 }
767 
768 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetDisplaySupportedColorGamutsTest)->
769     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
770 
771 /**
772   * @tc.name: GetHDRCapabilityInfosTest
773   * @tc.desc: Benchmarktest for interface GetHDRCapabilityInfos.
774   */
BENCHMARK_F(DisplayBenchmarkTest, GetHDRCapabilityInfosTest)775 BENCHMARK_F(DisplayBenchmarkTest, GetHDRCapabilityInfosTest)(benchmark::State &state)
776 {
777     int32_t ret;
778     HDRCapability info = { 0 };
779     for (auto _ : state) {
780         ret = g_composerDevice->GetHDRCapabilityInfos(g_displayIds[0], info);
781     }
782     if (ret == DISPLAY_NOT_SUPPORT) {
783         return;
784     }
785     EXPECT_EQ(DISPLAY_SUCCESS, ret);
786 }
787 
788 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, GetHDRCapabilityInfosTest)->
789     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
790 
791 /**
792   * @tc.name: SetDisplayClientCropTest
793   * @tc.desc: Benchmarktest for interface SetDisplayClientCrop.
794   */
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2200)795 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2200)(benchmark::State &state)
796 {
797     int32_t ret;
798     int32_t width = 100;
799     int32_t height = 100;
800     IRect rect = {0, 0, width, height};
801     for (auto _ : state) {
802         ret = g_composerDevice->SetDisplayClientCrop(g_displayIds[0], rect);
803     }
804     EXPECT_EQ(DISPLAY_FAILURE, ret);
805 }
806 
807 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2200)->
808     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
809 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2300)810 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2300)(benchmark::State &state)
811 {
812     std::vector<LayerSettings> settings = {
813         {
814             .rectRatio = { 0, 0, 1.0f, 1.0f },
815             .color = RED
816         },
817         {
818             .rectRatio = { 0, 0, 1.0f, 1.0f },
819             .color = GREEN
820         },
821         {
822             .rectRatio = { 0, 0, 1.0f, 1.0f },
823             .color = YELLOW
824         },
825     };
826 
827     std::vector<std::vector<int>> zorders = {
828         { 3, 2, 1 }, { 1, 3, 2 }, { 3, 1, 2 }, { 1, 2, 3 }, { 2, 1, 3 }, { 2, 3, 1 },
829     };
830     std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
831 
832     for (auto _ : state) {
833         for (const auto& zorderList : zorders) {
834             // adjust the zorder
835             for (uint32_t i = 0; i < zorderList.size(); i++) {
836                 settings[i].zorder = zorderList[i];
837                 layers[i]->SetZorder(zorderList[i]);
838             }
839             std::vector<LayerSettings> tempSettings = settings;
840             std::sort(tempSettings.begin(), tempSettings.end(),
841                 [=](const auto& l, auto const & r) { return l.zorder < r.zorder; });
842             // present and check
843             PresentAndCheck(tempSettings);
844         }
845     }
846     HdiTestDevice::GetInstance().Clear();
847 }
848 
849 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2300)->
850     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
851 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2400)852 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2400)(benchmark::State &state)
853 {
854     int32_t ret;
855     std::vector<LayerSettings> settings = {
856         {
857             .rectRatio = { 0, 0, 1.0f, 1.0f },
858             .color = GREEN
859         },
860     };
861     for (auto _ : state) {
862         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
863         ASSERT_TRUE((layers.size() > 0));
864         PrepareAndPrensent();
865         auto layer = layers[0];
866         bool preMul = true;
867         ret = g_composerDevice->SetLayerPreMulti(g_displayIds[0], layer->GetId(), preMul);
868     }
869     PrepareAndPrensent();
870     HdiTestDevice::GetInstance().Clear();
871     EXPECT_EQ(DISPLAY_SUCCESS, ret);
872 }
873 
874 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2400)->
875     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
876 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2500)877 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2500)(benchmark::State &state)
878 {
879     std::vector<LayerSettings> settings = {
880         {
881             .rectRatio = { 0, 0, 1.0f, 1.0f },
882             .color = GREEN
883         },
884         {
885             .rectRatio = { 0, 0, 1.0f, 1.0f },
886             .color = RED
887         },
888     };
889 
890     std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
891     ASSERT_TRUE((layers.size() > 0));
892 
893     auto layer = layers[1];
894     LayerAlpha alpha = { 0 };
895     alpha.enGlobalAlpha = true;
896     alpha.enPixelAlpha = true;
897     alpha.gAlpha = 0;
898     alpha.alpha0 = 0;
899     alpha.alpha1 = 0;
900     for (auto _ : state) {
901         layer->SetAlpha(alpha);
902     }
903     PrepareAndPrensent();
904     HdiTestDevice::GetInstance().Clear();
905 }
906 
907 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2500)->
908     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
909 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2600)910 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2600)(benchmark::State &state)
911 {
912     int32_t ret;
913     std::vector<LayerSettings> settings = {
914         {.rectRatio = {0, 0, 1.0f, 1.0f}, .color = GREEN, .alpha = 0xFF}
915     };
916     for (auto _ : state) {
917         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
918         ASSERT_TRUE((layers.size() > 0));
919 
920         const int32_t WIDTH = 100;
921         const int32_t HEIGHT = 100;
922         auto layer = layers[0];
923         IRect rect = {0, 0, WIDTH, HEIGHT};
924         ret = g_composerDevice->SetLayerRegion(g_displayIds[0], layer->GetId(), rect);
925     }
926     PrepareAndPrensent();
927     EXPECT_EQ(DISPLAY_SUCCESS, ret);
928 }
929 
930 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2600)->
931     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
932 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2700)933 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2700)(benchmark::State &state)
934 {
935     int32_t ret;
936     std::vector<LayerSettings> settings = {
937         {
938             .rectRatio = { 0, 0, 1.0f, 1.0f },
939             .color = BLUE
940         }
941     };
942     for (auto _ : state) {
943         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
944         ASSERT_TRUE((layers.size() > 0));
945         auto layer = layers[0];
946         const int32_t WIDTH = 100;
947         const int32_t HEIGHT = 100;
948         IRect rect = {0, 0, WIDTH, HEIGHT};
949         std::vector<IRect> vRects;
950         vRects.push_back(rect);
951         ret = g_composerDevice->SetLayerDirtyRegion(g_displayIds[0], layer->GetId(), vRects);
952     }
953     PrepareAndPrensent();
954     HdiTestDevice::GetInstance().Clear();
955     EXPECT_EQ(DISPLAY_SUCCESS, ret);
956 }
957 
958 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2700)->
959     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
960 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2800)961 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2800)(benchmark::State &state)
962 {
963     int32_t ret;
964     std::vector<LayerSettings> settings = {
965         {
966             .rectRatio = { 0, 0, 1.0f, 1.0f },
967             .color = RED
968         }
969     };
970     std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
971     ASSERT_TRUE((layers.size() > 0));
972     PrepareAndPrensent();
973     auto layer = layers[0];
974     for (auto _ : state) {
975         TransformType type = TransformType::ROTATE_90;
976         ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type);
977         PrepareAndPrensent();
978 
979         type = TransformType::ROTATE_180;
980         ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type);
981         PrepareAndPrensent();
982 
983         type = TransformType::ROTATE_270;
984         ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type);
985         PrepareAndPrensent();
986     }
987     EXPECT_EQ(DISPLAY_SUCCESS, ret);
988 }
989 
990 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2800)->
991     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
992 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2900)993 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2900)(benchmark::State &state)
994 {
995     int32_t ret;
996     std::vector<LayerSettings> settings = {
997         {
998             .rectRatio = { 0, 0, 1.0f, 1.0f },
999             .color = BLUE
1000         }
1001     };
1002     for (auto _ : state) {
1003         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
1004         ASSERT_TRUE((layers.size() > 0));
1005         PrepareAndPrensent();
1006         auto layer = layers[0];
1007         const int32_t WIDTH = 500;
1008         const int32_t HEIGHT = 500;
1009         IRect region = {0, 0, WIDTH, HEIGHT};
1010         std::vector<IRect> regions = {};
1011         regions.push_back(region);
1012         ret = g_composerDevice->SetLayerVisibleRegion(g_displayIds[0], layer->GetId(), regions);
1013     }
1014     PrepareAndPrensent();
1015     EXPECT_EQ(DISPLAY_SUCCESS, ret);
1016 }
1017 
1018 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_2900)->
1019     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
1020 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3000)1021 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3000)(benchmark::State &state)
1022 {
1023     int32_t ret;
1024     std::vector<LayerSettings> settings = {
1025         {
1026             .rectRatio = { 0, 0, 1.0f, 1.0f },
1027             .color = BLUE
1028         }
1029     };
1030     for (auto _ : state) {
1031         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
1032         ASSERT_TRUE((layers.size() > 0));
1033         auto layer = layers[0];
1034         Composer::V1_0::CompositionType type = Composer::V1_0::CompositionType::COMPOSITION_CLIENT;
1035         ret = g_composerDevice->SetLayerCompositionType(g_displayIds[0], layer->GetId(), type);
1036     }
1037     PrepareAndPrensent();
1038 
1039     EXPECT_EQ(DISPLAY_SUCCESS, ret);
1040 }
1041 
1042 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3000)->
1043     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
1044 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3100)1045 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3100)(benchmark::State &state)
1046 {
1047     int32_t ret;
1048     std::vector<LayerSettings> settings = {
1049         {
1050             .rectRatio = { 0, 0, 1.0f, 1.0f },
1051             .color = GREEN
1052         }
1053     };
1054     for (auto _ : state) {
1055         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
1056         ASSERT_TRUE((layers.size() > 0));
1057         auto layer = layers[0];
1058         BlendType type = BlendType::BLEND_NONE;
1059         ret = g_composerDevice->SetLayerBlendType(g_displayIds[0], layer->GetId(), type);
1060     }
1061     PrepareAndPrensent();
1062     EXPECT_EQ(DISPLAY_SUCCESS, ret);
1063 }
1064 
1065 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3100)->
1066     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
1067 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3200)1068 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3200)(benchmark::State &state)
1069 {
1070     int32_t ret;
1071     std::vector<LayerSettings> settings = {
1072         {
1073             .rectRatio = { 0, 0, 1.0f, 1.0f },
1074             .color = GREEN
1075         }
1076     };
1077     for (auto _ : state) {
1078         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
1079         ASSERT_TRUE((layers.size() > 0));
1080         auto layer = layers[0];
1081         MaskInfo maskInfo = MaskInfo::LAYER_HBM_SYNC;
1082         ret = g_composerDevice->SetLayerMaskInfo(g_displayIds[0], layer->GetId(), maskInfo);
1083     }
1084     PrepareAndPrensent();
1085     EXPECT_EQ(DISPLAY_SUCCESS, ret);
1086 }
1087 
1088 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3200)->
1089     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
1090 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3300)1091 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3300)(benchmark::State &state)
1092 {
1093     int32_t ret;
1094     std::vector<LayerSettings> settings = {
1095         {
1096             .rectRatio = { 0, 0, 1.0f, 1.0f },
1097             .color = GREEN
1098         }
1099     };
1100     for (auto _ : state) {
1101         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
1102         ASSERT_TRUE((layers.size() > 0));
1103         auto layer = layers[0];
1104         const uint32_t COLOR_R = 155;
1105         const uint32_t COLOR_G = 224;
1106         const uint32_t COLOR_B = 88;
1107         const uint32_t COLOR_A = 128;
1108         LayerColor layerColor = {
1109             .r = COLOR_R,
1110             .g = COLOR_G,
1111             .b = COLOR_B,
1112             .a = COLOR_A
1113         };
1114         ret = g_composerDevice->SetLayerColor(g_displayIds[0], layer->GetId(), layerColor);
1115     }
1116     PrepareAndPrensent();
1117 
1118     EXPECT_EQ(DISPLAY_SUCCESS, ret);
1119 }
1120 
1121 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3300)->
1122     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
1123 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3400)1124 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3400)(benchmark::State &state)
1125 {
1126     int32_t ret;
1127     std::vector<LayerSettings> settings = {
1128         {
1129             .rectRatio = { 0, 0, 1.0f, 1.0f },
1130             .color = PURPLE
1131         }
1132     };
1133     for (auto _ : state) {
1134         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
1135         ASSERT_TRUE((layers.size() > 0));
1136         auto layer = layers[0];
1137         PrepareAndPrensent();
1138         ret = g_composerDevice->DestroyLayer(g_displayIds[0], layer->GetId());
1139     }
1140     PrepareAndPrensent();
1141     EXPECT_EQ(DISPLAY_SUCCESS, ret);
1142 }
1143 
1144 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3400)->
1145     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
1146 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3500)1147 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3500)(benchmark::State &state)
1148 {
1149     std::vector<LayerSettings> settings = {
1150         {
1151             .rectRatio = { 0, 0, 1.0f, 1.0f },
1152             .color = PURPLE
1153         }
1154     };
1155     for (auto _ : state) {
1156         std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
1157         ASSERT_TRUE((layers.size() > 0));
1158     }
1159     PrepareAndPrensent();
1160 }
1161 
1162 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3500)->
1163     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
1164 
1165 
BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3600)1166 BENCHMARK_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3600)(benchmark::State &state)
1167 {
1168     BufferHandle* buffer = nullptr;
1169     AllocInfo info;
1170     info.width  = 100;
1171     info.height = 100;
1172     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
1173             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
1174             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
1175     info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888;
1176     for (auto _ : state) {
1177         g_gralloc->AllocMem(info, buffer);
1178         g_gralloc->Unmap(*buffer);
1179         g_gralloc->FreeMem(*buffer);
1180     }
1181 }
1182 
1183 BENCHMARK_REGISTER_F(DisplayBenchmarkTest, SUB_Driver_Display_Performace_3600)->
1184     Iterations(100)->Repetitions(3)->ReportAggregatesOnly();
1185 
1186 }
main(int argc, char** argv)1187 int main(int argc, char** argv)
1188 {
1189     int ret = HdiTestDevice::GetInstance().InitDevice();
1190     DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("Init Device Failed"));
1191     ::testing::InitGoogleTest(&argc, argv);
1192     ::benchmark::Initialize(&argc, argv);
1193     if (::benchmark::ReportUnrecognizedArguments(argc, argv)) {
1194         return 1; // 1: Benchmark native test suite native solution
1195     }
1196     g_composerDevice = HdiTestDevice::GetInstance().GetDeviceInterface();
1197     DISPLAY_TEST_CHK_RETURN((g_composerDevice == nullptr), DISPLAY_FAILURE,
1198         DISPLAY_TEST_LOGE("get composer interface failed"));
1199     g_gralloc.reset(IDisplayBuffer::Get());
1200     DISPLAY_TEST_CHK_RETURN((g_gralloc == nullptr), DISPLAY_FAILURE,
1201         DISPLAY_TEST_LOGE("get buffer interface failed"));
1202     auto display = HdiTestDevice::GetInstance().GetFirstDisplay();
1203     if (display != nullptr) {
1204         g_displayIds = HdiTestDevice::GetInstance().GetDevIds();
1205         display->SetDisplayVsyncEnabled(false);
1206     }
1207     ::benchmark::RunSpecifiedBenchmarks();
1208     ::benchmark::Shutdown();
1209     HdiTestDevice::GetInstance().GetFirstDisplay()->ResetClientLayer();
1210     return ret;
1211 }