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 }