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