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 }