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 "hdi_composer_ut.h"
17 #include <chrono>
18 #include <cinttypes>
19 #include <algorithm>
20 #include "v1_2/include/idisplay_composer_interface.h"
21 #include "v1_2/display_composer_type.h"
22 #include "v1_0/display_buffer_type.h"
23 #include "display_test.h"
24 #include "display_test_utils.h"
25 #include "hdi_composition_check.h"
26 #include "hdi_test_device.h"
27 #include "hdi_test_device_common.h"
28 #include "hdi_test_display.h"
29 #include "hdi_test_render_utils.h"
30 #include "timer.h"
31 #include <sys/time.h>
32 #include <thread>
33
34 using namespace OHOS::HDI::Display::Buffer::V1_0;
35 using namespace OHOS::HDI::Display::Composer::V1_2;
36 using namespace OHOS::HDI::Display::TEST;
37 using namespace testing::ext;
38
39 static sptr<Composer::V1_2::IDisplayComposerInterface> g_composerDevice = nullptr;
40 static std::shared_ptr<IDisplayBuffer> g_gralloc = nullptr;
41 static std::vector<uint32_t> g_displayIds;
42 const int SLEEP_CONT_10 = 10;
43 const int SLEEP_CONT_100 = 100;
44 const int SLEEP_CONT_2000 = 2000;
45 static bool g_isOnSeamlessChangeCalled = false;
46 static bool g_isOnModeCalled = false;
47 static bool g_threadCtrl = false;
48
GetFirstDisplay()49 static inline std::shared_ptr<HdiTestDisplay> GetFirstDisplay()
50 {
51 return HdiTestDevice::GetInstance().GetFirstDisplay();
52 }
53
CheckComposition(std::vector<LayerSettings> & layers,BufferHandle * clientBuffer,uint32_t checkType=HdiCompositionCheck::CHECK_VERTEX)54 static int32_t CheckComposition(std::vector<LayerSettings> &layers, BufferHandle* clientBuffer,
55 uint32_t checkType = HdiCompositionCheck::CHECK_VERTEX)
56 {
57 DISPLAY_TEST_CHK_RETURN((clientBuffer == nullptr), DISPLAY_NULL_PTR, DISPLAY_TEST_LOGE("client buffer is nullptr"));
58 return HdiCompositionCheck::GetInstance().Check(layers, *clientBuffer, checkType);
59 }
60
CreateTestLayer(LayerSettings setting,uint32_t zorder)61 static std::shared_ptr<HdiTestLayer> CreateTestLayer(LayerSettings setting, uint32_t zorder)
62 {
63 int ret;
64 HdiTestDevice::GetInstance();
65 DISPLAY_TEST_LOGD("color 0x%x", setting.color);
66 std::shared_ptr<HdiTestDisplay> display = HdiTestDevice::GetInstance().GetFirstDisplay();
67 DISPLAY_TEST_CHK_RETURN((display == nullptr), nullptr, DISPLAY_TEST_LOGE("can not get display"));
68
69 std::shared_ptr<HdiTestLayer> layer = display->CreateHdiTestLayer(setting.bufferSize.w, setting.bufferSize.h);
70 DISPLAY_TEST_CHK_RETURN((layer == nullptr), nullptr, DISPLAY_TEST_LOGE("can not create hdi test layer"));
71
72 layer->SetLayerPosition(setting.displayRect);
73
74 layer->SetCompType(setting.compositionType);
75
76 if ((setting.alpha >= 0) && (setting.alpha <= 0xff)) { // alpha rang 0x00 ~ 0xff
77 LayerAlpha alpha = { 0 };
78 alpha.gAlpha = setting.alpha;
79 alpha.enGlobalAlpha = true;
80 layer->SetAlpha(alpha);
81 }
82 HdiGrallocBuffer* handle = layer->GetFrontBuffer();
83 DISPLAY_TEST_CHK_RETURN((handle == nullptr), nullptr, DISPLAY_TEST_LOGE("can not get front buffer"));
84 ClearColor(*(handle->Get()), setting.color);
85 ret = layer->SwapFrontToBackQ();
86 DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), nullptr, DISPLAY_TEST_LOGE("SwapFrontToBackQ failed"));
87 layer->SetZorder(zorder);
88 layer->SetBlendType(setting.blendType);
89 layer->SetTransform(setting.rotate);
90 return layer;
91 }
92
PrepareAndCommit()93 static int PrepareAndCommit()
94 {
95 int ret;
96 DISPLAY_TEST_LOGD();
97 std::shared_ptr<HdiTestDisplay> display = HdiTestDevice::GetInstance().GetFirstDisplay();
98 DISPLAY_TEST_CHK_RETURN((display == nullptr), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("can not get display"));
99
100 ret = display->PrepareDisplayLayers(); // 确定顶压策略(是否走GPU合成)、刷新layer列表
101 DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE,
102 DISPLAY_TEST_LOGE("PrepareDisplayLayers failed"));
103
104 ret = display->Commit(); // 送显
105 DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("Commit failed"));
106 return DISPLAY_SUCCESS;
107 }
108
LoopCommit()109 static void LoopCommit()
110 {
111 while (!g_threadCtrl) {
112 PrepareAndCommit();
113 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_CONT_10));
114 }
115 }
116
TestVBlankCallback(unsigned int sequence,uint64_t ns,void * data)117 static void TestVBlankCallback(unsigned int sequence, uint64_t ns, void* data)
118 {
119 static uint64_t lastns;
120 DISPLAY_TEST_LOGD("seq %{public}d ns %" PRId64 " duration %" PRId64 " ns", sequence, ns, (ns - lastns));
121 lastns = ns;
122 VblankCtr::GetInstance().NotifyVblank(sequence, ns, data);
123 }
124
AdjustLayerSettings(std::vector<LayerSettings> & settings,uint32_t w,uint32_t h)125 static void AdjustLayerSettings(std::vector<LayerSettings> &settings, uint32_t w, uint32_t h)
126 {
127 DISPLAY_TEST_LOGD();
128 for (uint32_t i = 0; i < settings.size(); i++) {
129 LayerSettings& setting = settings[i];
130 DISPLAY_TEST_LOGD(" ratio w: %f ratio h: %f", setting.rectRatio.w, setting.rectRatio.h);
131 if ((setting.rectRatio.w > 0.0f) && (setting.rectRatio.h > 0.0f)) {
132 setting.displayRect.h = static_cast<uint32_t>(setting.rectRatio.h * h);
133 setting.displayRect.w = static_cast<uint32_t>(setting.rectRatio.w * w);
134 setting.displayRect.x = static_cast<uint32_t>(setting.rectRatio.x * w);
135 setting.displayRect.y = static_cast<uint32_t>(setting.rectRatio.y * h);
136 DISPLAY_TEST_LOGD("display rect adjust form %f %f %f %f to %{public}d %{public}d %{public}d %{public}d ",
137 setting.rectRatio.x, setting.rectRatio.y, setting.rectRatio.w, setting.rectRatio.h,
138 setting.displayRect.x, setting.displayRect.y, setting.displayRect.w, setting.displayRect.h);
139 }
140
141 if ((setting.bufferRatio.h > 0.0f) || (setting.bufferRatio.w > 0.0f)) {
142 setting.bufferSize.h = static_cast<uint32_t>(setting.bufferRatio.h * h);
143 setting.bufferSize.w = static_cast<uint32_t>(setting.bufferRatio.w * w);
144 DISPLAY_TEST_LOGD("buffer size adjust for %f %f to %{public}d %{public}d",
145 setting.bufferRatio.w, setting.bufferRatio.h, setting.bufferSize.w, setting.bufferSize.h);
146 }
147
148 if ((setting.bufferSize.w == 0) || (setting.bufferSize.h == 0)) {
149 DISPLAY_TEST_LOGD("buffer size adjust for %{public}d %{public}d to %{public}d %{public}d",
150 setting.bufferSize.w, setting.bufferSize.h, setting.displayRect.w, setting.displayRect.h);
151
152 setting.bufferSize.w = setting.displayRect.w;
153 setting.bufferSize.h = setting.displayRect.h;
154 }
155 }
156 }
157
CreateLayers(std::vector<LayerSettings> & settings)158 static std::vector<std::shared_ptr<HdiTestLayer>> CreateLayers(std::vector<LayerSettings> &settings)
159 {
160 DISPLAY_TEST_LOGD("settings %{public}zd", settings.size());
161 std::vector<std::shared_ptr<HdiTestLayer>> layers;
162 DisplayModeInfo mode = GetFirstDisplay()->GetCurrentMode();
163 AdjustLayerSettings(settings, mode.width, mode.height);
164 for (uint32_t i = 0; i < settings.size(); i++) {
165 LayerSettings setting = settings[i];
166
167 auto layer = CreateTestLayer(setting, i);
168 layers.push_back(layer);
169 }
170
171 return layers;
172 }
173
PresentAndCheck(std::vector<LayerSettings> & layerSettings,uint32_t checkType=HdiCompositionCheck::CHECK_VERTEX)174 static inline void PresentAndCheck(std::vector<LayerSettings> &layerSettings,
175 uint32_t checkType = HdiCompositionCheck::CHECK_VERTEX)
176 {
177 int ret = PrepareAndCommit();
178 ASSERT_TRUE((ret == DISPLAY_SUCCESS));
179 if ((GetFirstDisplay()->SnapShot()) != nullptr) {
180 HdiTestDevice::GetInstance().GetGrallocInterface()->InvalidateCache(*(GetFirstDisplay()->SnapShot()));
181 ret = CheckComposition(layerSettings, GetFirstDisplay()->SnapShot(), checkType);
182 ASSERT_TRUE((ret == DISPLAY_SUCCESS));
183 }
184 }
185
DestroyLayer(std::shared_ptr<HdiTestLayer> layer)186 static void DestroyLayer(std::shared_ptr<HdiTestLayer> layer)
187 {
188 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_CONT_100));
189 auto ret = g_composerDevice->DestroyLayer(g_displayIds[0], layer->GetId());
190 if (ret != DISPLAY_SUCCESS && ret != DISPLAY_NOT_SUPPORT) {
191 DISPLAY_TEST_LOGD("DestroyLayer fail or not support, ret: %{public}d", ret);
192 return;
193 }
194 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_CONT_100));
195 }
196
SetUpTestCase()197 void DeviceTest::SetUpTestCase()
198 {
199 int ret = HdiTestDevice::GetInstance().InitDevice();
200 ASSERT_TRUE(ret == DISPLAY_SUCCESS);
201
202 g_composerDevice = HdiTestDevice::GetInstance().GetDeviceInterface();
203 ASSERT_TRUE(g_composerDevice != nullptr);
204
205 g_gralloc.reset(IDisplayBuffer::Get());
206 ASSERT_TRUE(g_gralloc != nullptr);
207
208 g_displayIds = HdiTestDevice::GetInstance().GetDevIds();
209 ASSERT_TRUE(g_displayIds.size() > 0);
210 }
211
TearDownTestCase()212 void DeviceTest::TearDownTestCase()
213 {
214 HdiTestDevice::GetInstance().Clear();
215 HdiTestDevice::GetInstance().GetFirstDisplay()->ResetClientLayer();
216 }
217
NotifyVblank(unsigned int sequence,uint64_t ns,const void * data)218 void VblankCtr::NotifyVblank(unsigned int sequence, uint64_t ns, const void* data)
219 {
220 DISPLAY_TEST_LOGD();
221 if (data != nullptr) {
222 DISPLAY_TEST_LOGD("sequence = %{public}u, ns = %" PRIu64 "", sequence, ns);
223 }
224 std::unique_lock<std::mutex> lg(vblankMutex_);
225 hasVblank_ = true;
226 vblankCondition_.notify_one();
227 DISPLAY_TEST_LOGD();
228 }
229
~VblankCtr()230 VblankCtr::~VblankCtr() {}
231
WaitVblank(uint32_t ms)232 int32_t VblankCtr::WaitVblank(uint32_t ms)
233 {
234 bool ret = false;
235 DISPLAY_TEST_LOGD();
236 std::unique_lock<std::mutex> lck(vblankMutex_);
237 ret = vblankCondition_.wait_for(lck, std::chrono::milliseconds(ms), [=] { return hasVblank_; });
238 DISPLAY_TEST_LOGD();
239 if (!ret) {
240 return DISPLAY_FAILURE;
241 }
242 return DISPLAY_SUCCESS;
243 }
244
245 HWTEST_F(DeviceTest, test_SetClientBufferCacheCount, TestSize.Level1)
246 {
247 const uint32_t CACHE_COUNT = 5;
248 auto ret = g_composerDevice->SetClientBufferCacheCount(g_displayIds[0], CACHE_COUNT);
249 EXPECT_EQ(DISPLAY_SUCCESS, ret);
250 }
251
252 HWTEST_F(DeviceTest, test_GetDisplayCapability, TestSize.Level1)
253 {
254 DisplayCapability info;
255 auto ret = g_composerDevice->GetDisplayCapability(g_displayIds[0], info);
256 EXPECT_EQ(DISPLAY_SUCCESS, ret);
257 }
258
259 HWTEST_F(DeviceTest, test_GetDisplaySupportedModes, TestSize.Level1)
260 {
261 std::vector<DisplayModeInfo> modes;
262 auto ret = g_composerDevice->GetDisplaySupportedModes(g_displayIds[0], modes);
263 EXPECT_EQ(DISPLAY_SUCCESS, ret);
264 }
265
266 HWTEST_F(DeviceTest, test_GetDisplayMode, TestSize.Level1)
267 {
268 uint32_t MODE = 0;
269 auto ret = g_composerDevice->GetDisplayMode(g_displayIds[0], MODE);
270 EXPECT_EQ(DISPLAY_SUCCESS, ret);
271 }
272
273 HWTEST_F(DeviceTest, test_SetDisplayMode, TestSize.Level1)
274 {
275 const uint32_t MODE = 0;
276 auto ret = g_composerDevice->SetDisplayMode(g_displayIds[0], MODE);
277 EXPECT_EQ(DISPLAY_SUCCESS, ret);
278 }
279
280 HWTEST_F(DeviceTest, test_GetDisplayPowerStatus, TestSize.Level1)
281 {
282 Composer::V1_0::DispPowerStatus powerStatus = Composer::V1_0::DispPowerStatus::POWER_STATUS_OFF;
283 auto ret = g_composerDevice->GetDisplayPowerStatus(g_displayIds[0], powerStatus);
284 EXPECT_EQ(DISPLAY_SUCCESS, ret);
285 }
286
287 HWTEST_F(DeviceTest, test_SetDisplayPowerStatus, TestSize.Level1)
288 {
289 auto ret = g_composerDevice->SetDisplayPowerStatus(g_displayIds[0],
290 Composer::V1_0::DispPowerStatus::POWER_STATUS_STANDBY);
291 EXPECT_EQ(DISPLAY_SUCCESS, ret);
292
293 ret = g_composerDevice->SetDisplayPowerStatus(g_displayIds[0], Composer::V1_0::DispPowerStatus::POWER_STATUS_ON);
294 EXPECT_EQ(DISPLAY_SUCCESS, ret);
295 }
296
297 #ifdef DISPLAY_COMMUNITY
298 HWTEST_F(DeviceTest, test_GetDisplayBacklight, TestSize.Level1)
299 {
300 uint32_t level;
301 auto ret = g_composerDevice->GetDisplayBacklight(g_displayIds[0], level);
302 EXPECT_EQ(DISPLAY_SUCCESS, ret);
303 }
304 #endif
305
306 HWTEST_F(DeviceTest, test_SetDisplayBacklight, TestSize.Level1)
307 {
308 const uint32_t LEVEL = 10;
309 auto ret = g_composerDevice->SetDisplayBacklight(g_displayIds[0], LEVEL);
310 EXPECT_EQ(DISPLAY_SUCCESS, ret);
311 }
312
313 HWTEST_F(DeviceTest, test_GetDisplayProperty, TestSize.Level1)
314 {
315 const uint32_t PROPERTY_ID = 1;
316 uint64_t propertyValue = 0;
317 auto ret = g_composerDevice->GetDisplayProperty(g_displayIds[0], PROPERTY_ID, propertyValue);
318 int32_t result = DISPLAY_FAILURE;
319 if (ret == DISPLAY_SUCCESS || ret == DISPLAY_NOT_SUPPORT) {
320 result = DISPLAY_SUCCESS;
321 }
322 EXPECT_EQ(DISPLAY_SUCCESS, result);
323 }
324
325 HWTEST_F(DeviceTest, test_GetDisplayIdentificationData, TestSize.Level1)
326 {
327 uint8_t portId = 0;
328 std::vector<uint8_t> edidData = {};
329 auto ret = g_composerDevice->GetDisplayIdentificationData(g_displayIds[0], portId, edidData);
330 DISPLAY_TEST_LOGD("displayId[%u], portId[%u], edidDataLength[%u]", g_displayIds[0], portId, edidData.size());
331 if (ret == DISPLAY_NOT_SUPPORT) {
332 return;
333 }
334 EXPECT_EQ(DISPLAY_FAILURE, ret);
335 }
336
337 HWTEST_F(DeviceTest, test_UpdateHardwareCursor, TestSize.Level1)
338 {
339 BufferHandle* buffer = nullptr;
340 const int32_t WIDTH = 512;
341 const int32_t HEIGHT = 512;
342
343 AllocInfo info;
344 info.width = WIDTH;
345 info.height = HEIGHT;
346 info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
347 OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
348 OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE |
349 OHOS::HDI::Display::Composer::V1_0::HBM_USE_HW_COMPOSER;
350 info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888;
351
352 g_gralloc->AllocMem(info, buffer);
353 ASSERT_TRUE(buffer != nullptr);
354
355 std::vector<LayerSettings> settings = {
356 {.rectRatio = { 0, 0, 1.0f, 1.0f }, .color = RED},
357 };
358
359 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
360 ASSERT_TRUE((layers.size() > 0));
361
362 auto layer = layers[0];
363 PrepareAndCommit();
364 sleep(1);
365 HdiTestDevice::GetInstance().Clear();
366 DestroyLayer(layer);
367
368 int32_t x = 1;
369 int32_t y = 1;
370 auto ret = g_composerDevice->UpdateHardwareCursor(g_displayIds[0], x, y, buffer);
371 if (ret == DISPLAY_SUCCESS || ret == DISPLAY_NOT_SUPPORT) {
372 ret = DISPLAY_SUCCESS;
373 }
374 g_gralloc->FreeMem(*buffer);
375 EXPECT_EQ(DISPLAY_SUCCESS, ret);
376 }
377
378 HWTEST_F(DeviceTest, test_EnableHardwareCursorStats, TestSize.Level1)
379 {
380 bool enable = true;
381 auto ret = g_composerDevice->EnableHardwareCursorStats(g_displayIds[0], enable);
382 if (ret == DISPLAY_SUCCESS || ret == DISPLAY_NOT_SUPPORT) {
383 ret = DISPLAY_SUCCESS;
384 }
385 EXPECT_EQ(DISPLAY_SUCCESS, ret);
386 }
387
388 HWTEST_F(DeviceTest, test_GetHardwareCursorStats, TestSize.Level1)
389 {
390 uint32_t frameCount = 0;
391 uint32_t vsyncCount = 0;
392 auto ret = g_composerDevice->GetHardwareCursorStats(g_displayIds[0], frameCount, vsyncCount);
393 if (ret == DISPLAY_SUCCESS || ret == DISPLAY_NOT_SUPPORT) {
394 ret = DISPLAY_SUCCESS;
395 }
396 EXPECT_EQ(DISPLAY_SUCCESS, ret);
397 }
398
399 HWTEST_F(DeviceTest, test_GetDisplayCompChange, TestSize.Level1)
400 {
401 std::vector<uint32_t> layers {};
402 std::vector<int32_t> type {};
403 auto ret = g_composerDevice->GetDisplayCompChange(g_displayIds[0], layers, type);
404 EXPECT_EQ(DISPLAY_SUCCESS, ret);
405 }
406
407 HWTEST_F(DeviceTest, test_SetDisplayClientCrop, TestSize.Level1)
408 {
409 const int32_t WIDTH = 1920;
410 const int32_t HEIGHT = 1080;
411 IRect rect = {0, 0, WIDTH, HEIGHT};
412 auto ret = g_composerDevice->SetDisplayClientCrop(g_displayIds[0], rect);
413 // not support
414 EXPECT_EQ(DISPLAY_FAILURE, ret);
415 }
416
417 HWTEST_F(DeviceTest, test_GetDisplayReleaseFence, TestSize.Level1)
418 {
419 std::vector<uint32_t> layers {};
420 std::vector<int32_t> fences {};
421 auto ret = g_composerDevice->GetDisplayReleaseFence(g_displayIds[0], layers, fences);
422 EXPECT_EQ(DISPLAY_SUCCESS, ret);
423 }
424
425 HWTEST_F(DeviceTest, test_SetDisplayClientBuffer, TestSize.Level1)
426 {
427 BufferHandle* buffer = nullptr;
428 const int32_t WIDTH = 800;
429 const int32_t HEIGHT = 600;
430
431 AllocInfo info;
432 info.width = WIDTH;
433 info.height = HEIGHT;
434 info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
435 OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
436 OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
437 info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888;
438
439 g_gralloc->AllocMem(info, buffer);
440 ASSERT_TRUE(buffer != nullptr);
441
442 uint32_t bufferSeq = 1;
443 auto ret = g_composerDevice->SetDisplayClientBuffer(g_displayIds[0], buffer, bufferSeq, -1);
444 g_gralloc->FreeMem(*buffer);
445 EXPECT_EQ(DISPLAY_SUCCESS, ret);
446 }
447
448 HWTEST_F(DeviceTest, test_SetDisplayClientDamage, TestSize.Level1)
449 {
450 const int32_t WIDTH = 1920;
451 const int32_t HEIGHT = 1080;
452 IRect rect = {0, 0, WIDTH, HEIGHT};
453 std::vector<IRect> vRects;
454 vRects.push_back(rect);
455 auto ret = g_composerDevice->SetDisplayClientDamage(g_displayIds[0], vRects);
456 // not support
457 EXPECT_EQ(DISPLAY_SUCCESS, ret);
458 }
459
460 HWTEST_F(DeviceTest, test_CreateVirtualDisplay, TestSize.Level1)
461 {
462 const uint32_t WIDTH = 1920;
463 const uint32_t HEIGHT = 1080;
464 int32_t format = 0;
465 uint32_t devId = 0;
466 auto ret = g_composerDevice->CreateVirtualDisplay(WIDTH, HEIGHT, format, devId);
467 // not support
468 EXPECT_EQ(DISPLAY_FAILURE, ret);
469 }
470
471 HWTEST_F(DeviceTest, test_DestroyVirtualDisplay, TestSize.Level1)
472 {
473 uint32_t devId = 0;
474 auto ret = g_composerDevice->DestroyVirtualDisplay(devId);
475 // not support
476 EXPECT_EQ(DISPLAY_FAILURE, ret);
477 }
478
479 HWTEST_F(DeviceTest, test_SetVirtualDisplayBuffer, TestSize.Level1)
480 {
481 BufferHandle* buffer = nullptr;
482 int32_t fence = -1;
483 const int32_t WIDTH = 800;
484 const int32_t HEIGHT = 600;
485
486 AllocInfo info;
487 info.width = WIDTH;
488 info.height = HEIGHT;
489 info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
490 OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
491 OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
492 info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888;
493
494 g_gralloc->AllocMem(info, buffer);
495 ASSERT_TRUE(buffer != nullptr);
496
497 auto ret = g_composerDevice->SetVirtualDisplayBuffer(g_displayIds[0], *buffer, fence);
498 g_gralloc->FreeMem(*buffer);
499 // not support
500 EXPECT_EQ(DISPLAY_FAILURE, ret);
501 }
502
503 HWTEST_F(DeviceTest, test_SetDisplayProperty, TestSize.Level1)
504 {
505 const uint32_t PROPERTY_ID = 1;
506 const uint64_t PROPERTY_VALUE = 0;
507 auto ret = g_composerDevice->SetDisplayProperty(g_displayIds[0], PROPERTY_ID, PROPERTY_VALUE);
508 // not support
509 EXPECT_EQ(DISPLAY_FAILURE, ret);
510 }
511
512 HWTEST_F(DeviceTest, test_SetLayerCrop, TestSize.Level1)
513 {
514 std::vector<LayerSettings> settings = {
515 {
516 .rectRatio = { 0, 0, 1.0f, 1.0f },
517 .color = RED
518 },
519 };
520 std::vector<uint32_t> splitColors = { { RED, GREEN, YELLOW, BLUE, PINK, PURPLE, CYAN, TRANSPARENT } };
521
522 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
523 ASSERT_TRUE((layers.size() > 0));
524 // split the buffer
525 auto layer = layers[0];
526 HdiGrallocBuffer* handle = layer->GetBackBuffer(); // the backbuffer has not present now
527 ASSERT_TRUE((handle != nullptr));
528 auto splitRects = SplitBuffer(*(handle->Get()), splitColors);
529 PrepareAndCommit();
530 for (uint32_t i = 0; i < splitRects.size(); i++) {
531 settings[0].color = splitColors[i];
532 layer->SetLayerCrop(splitRects[i]);
533 PresentAndCheck(settings);
534 }
535
536 DestroyLayer(layer);
537 }
538
539 HWTEST_F(DeviceTest, test_SetLayerZorder, TestSize.Level1)
540 {
541 std::vector<LayerSettings> settings = {
542 {
543 .rectRatio = { 0, 0, 1.0f, 1.0f },
544 .color = RED
545 },
546 {
547 .rectRatio = { 0, 0, 1.0f, 1.0f },
548 .color = GREEN
549 },
550 {
551 .rectRatio = { 0, 0, 1.0f, 1.0f },
552 .color = YELLOW
553 },
554 };
555
556 std::vector<std::vector<int>> zorders = {
557 { 3, 2, 1 }, { 1, 3, 2 }, { 3, 1, 2 }, { 1, 2, 3 }, { 2, 1, 3 }, { 2, 3, 1 },
558 };
559 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
560
561 for (const auto& zorderList : zorders) {
562 // adjust the zorder
563 for (uint32_t i = 0; i < zorderList.size(); i++) {
564 settings[i].zorder = zorderList[i];
565 layers[i]->SetZorder(zorderList[i]);
566 }
567 std::vector<LayerSettings> tempSettings = settings;
568 std::sort(tempSettings.begin(), tempSettings.end(),
__anon09c4cc010202(const auto& l, auto const & r) 569 [=](const auto& l, auto const & r) { return l.zorder < r.zorder; });
570 // present and check
571 PresentAndCheck(tempSettings);
572 }
573 HdiTestDevice::GetInstance().Clear();
574 }
575
576 HWTEST_F(DeviceTest, test_SetLayerPreMulti, TestSize.Level1)
577 {
578 std::vector<LayerSettings> settings = {
579 {
580 .rectRatio = { 0, 0, 1.0f, 1.0f },
581 .color = GREEN
582 },
583 };
584
585 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
586 ASSERT_TRUE((layers.size() > 0));
587 PrepareAndCommit();
588
589 auto layer = layers[0];
590 bool preMul = true;
591 auto ret = g_composerDevice->SetLayerPreMulti(g_displayIds[0], layer->GetId(), preMul);
592
593 PrepareAndCommit();
594 HdiTestDevice::GetInstance().Clear();
595 EXPECT_EQ(DISPLAY_SUCCESS, ret);
596
597 DestroyLayer(layer);
598 }
599
600 HWTEST_F(DeviceTest, test_SetLayerAlpha, TestSize.Level1)
601 {
602 std::vector<LayerSettings> settings = {
603 {
604 .rectRatio = { 0, 0, 1.0f, 1.0f },
605 .color = GREEN
606 },
607 {
608 .rectRatio = { 0, 0, 1.0f, 1.0f },
609 .color = RED
610 },
611 };
612
613 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
614 ASSERT_TRUE((layers.size() > 0));
615
616 auto layer = layers[1];
617 LayerAlpha alpha = { 0 };
618 alpha.enGlobalAlpha = true;
619 alpha.enPixelAlpha = true;
620 alpha.gAlpha = 0;
621 alpha.alpha0 = 0;
622 alpha.alpha1 = 0;
623 layer->SetAlpha(alpha);
624
625 PrepareAndCommit();
626 HdiTestDevice::GetInstance().Clear();
627
628 DestroyLayer(layer);
629 }
630
631 HWTEST_F(DeviceTest, test_SetLayerRegion, TestSize.Level1)
632 {
633 std::vector<LayerSettings> settings = {
634 {.rectRatio = {0, 0, 1.0f, 1.0f}, .color = GREEN, .alpha = 0xFF}
635 };
636
637 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
638 ASSERT_TRUE((layers.size() > 0));
639
640 const int32_t WIDTH = 100;
641 const int32_t HEIGHT = 100;
642 auto layer = layers[0];
643 IRect rect = {0, 0, WIDTH, HEIGHT};
644 auto ret = g_composerDevice->SetLayerRegion(g_displayIds[0], layer->GetId(), rect);
645
646 PrepareAndCommit();
647 EXPECT_EQ(DISPLAY_SUCCESS, ret);
648
649 DestroyLayer(layer);
650 }
651
652 HWTEST_F(DeviceTest, test_SetLayerDirtyRegion, TestSize.Level1)
653 {
654 std::vector<LayerSettings> settings = {
655 {
656 .rectRatio = { 0, 0, 1.0f, 1.0f },
657 .color = BLUE
658 }
659 };
660
661 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
662 ASSERT_TRUE((layers.size() > 0));
663
664 auto layer = layers[0];
665
666 const int32_t WIDTH = 100;
667 const int32_t HEIGHT = 100;
668 IRect rect = {0, 0, WIDTH, HEIGHT};
669 std::vector<IRect> vRects;
670 vRects.push_back(rect);
671 auto ret = g_composerDevice->SetLayerDirtyRegion(g_displayIds[0], layer->GetId(), vRects);
672
673 PrepareAndCommit();
674 HdiTestDevice::GetInstance().Clear();
675
676 EXPECT_EQ(DISPLAY_SUCCESS, ret);
677
678 DestroyLayer(layer);
679 }
680
681 HWTEST_F(DeviceTest, test_SetLayerTransformMode, TestSize.Level1)
682 {
683 std::vector<LayerSettings> settings = {
684 {
685 .rectRatio = { 0, 0, 1.0f, 1.0f },
686 .color = RED
687 }
688 };
689
690 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
691 ASSERT_TRUE((layers.size() > 0));
692
693 PrepareAndCommit();
694
695 auto layer = layers[0];
696
697 TransformType type = TransformType::ROTATE_90;
698 auto ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type);
699 PrepareAndCommit();
700
701 type = TransformType::ROTATE_180;
702 ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type);
703 PrepareAndCommit();
704
705 type = TransformType::ROTATE_270;
706 ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type);
707 PrepareAndCommit();
708
709 EXPECT_EQ(DISPLAY_SUCCESS, ret);
710
711 DestroyLayer(layer);
712 }
713
714 HWTEST_F(DeviceTest, test_SetLayerVisibleRegion, TestSize.Level1)
715 {
716 std::vector<LayerSettings> settings = {
717 {
718 .rectRatio = { 0, 0, 1.0f, 1.0f },
719 .color = BLUE
720 }
721 };
722
723 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
724 ASSERT_TRUE((layers.size() > 0));
725 PrepareAndCommit();
726 auto layer = layers[0];
727
728 const int32_t WIDTH = 500;
729 const int32_t HEIGHT = 500;
730 IRect region = {0, 0, WIDTH, HEIGHT};
731 std::vector<IRect> regions = {};
732 regions.push_back(region);
733 auto ret = g_composerDevice->SetLayerVisibleRegion(g_displayIds[0], layer->GetId(), regions);
734 PrepareAndCommit();
735
736 EXPECT_EQ(DISPLAY_SUCCESS, ret);
737
738 DestroyLayer(layer);
739 }
740
741 HWTEST_F(DeviceTest, test_SetLayerBuffer, TestSize.Level1)
742 {
743 std::vector<LayerSettings> settings = {
744 {
745 .rectRatio = { 0, 0, 1.0f, 1.0f },
746 .color = GREEN
747 }
748 };
749
750 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
751 ASSERT_TRUE((layers.size() > 0));
752
753 auto layer = layers[0];
754
755 auto graphicBuffer = layer->AcquireBackBuffer();
__anon09c4cc010302(const BufferHandle* buffer, uint32_t seqNo) 756 int32_t ret = graphicBuffer->SetGraphicBuffer([&](const BufferHandle* buffer, uint32_t seqNo) -> int32_t {
757 std::vector<uint32_t> deletingList;
758 int32_t result = g_composerDevice->SetLayerBuffer(g_displayIds[0], layer->GetId(), buffer, seqNo, -1,
759 deletingList);
760 return result;
761 });
762 PrepareAndCommit();
763
764 EXPECT_EQ(DISPLAY_SUCCESS, ret);
765
766 DestroyLayer(layer);
767 }
768
769 HWTEST_F(DeviceTest, test_SetLayerCompositionType, TestSize.Level1)
770 {
771 std::vector<LayerSettings> settings = {
772 {
773 .rectRatio = { 0, 0, 1.0f, 1.0f },
774 .color = BLUE
775 }
776 };
777
778 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
779 ASSERT_TRUE((layers.size() > 0));
780
781 auto layer = layers[0];
782
783 Composer::V1_0::CompositionType type = Composer::V1_0::CompositionType::COMPOSITION_CLIENT;
784 auto ret = g_composerDevice->SetLayerCompositionType(g_displayIds[0], layer->GetId(), type);
785
786 PrepareAndCommit();
787
788 EXPECT_EQ(DISPLAY_SUCCESS, ret);
789
790 DestroyLayer(layer);
791 }
792
793 HWTEST_F(DeviceTest, test_SetLayerBlendType, TestSize.Level1)
794 {
795 std::vector<LayerSettings> settings = {
796 {
797 .rectRatio = { 0, 0, 1.0f, 1.0f },
798 .color = GREEN
799 }
800 };
801
802 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
803 ASSERT_TRUE((layers.size() > 0));
804
805 auto layer = layers[0];
806
807 BlendType type = BlendType::BLEND_NONE;
808 auto ret = g_composerDevice->SetLayerBlendType(g_displayIds[0], layer->GetId(), type);
809
810 PrepareAndCommit();
811
812 EXPECT_EQ(DISPLAY_SUCCESS, ret);
813
814 DestroyLayer(layer);
815 }
816
817 HWTEST_F(DeviceTest, test_SetLayerMaskInfo, TestSize.Level1)
818 {
819 std::vector<LayerSettings> settings = {
820 {
821 .rectRatio = { 0, 0, 1.0f, 1.0f },
822 .color = GREEN
823 }
824 };
825
826 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
827 ASSERT_TRUE((layers.size() > 0));
828
829 auto layer = layers[0];
830
831 MaskInfo maskInfo = MaskInfo::LAYER_HBM_SYNC;
832 auto ret = g_composerDevice->SetLayerMaskInfo(g_displayIds[0], layer->GetId(), maskInfo);
833
834 HdiTestDevice::GetInstance().Clear();
835
836 EXPECT_EQ(DISPLAY_SUCCESS, ret);
837 }
838
839 HWTEST_F(DeviceTest, test_SetLayerColor, TestSize.Level1)
840 {
841 std::vector<LayerSettings> settings = {
842 {
843 .rectRatio = { 0, 0, 1.0f, 1.0f },
844 .color = GREEN
845 }
846 };
847
848 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
849 ASSERT_TRUE((layers.size() > 0));
850
851 auto layer = layers[0];
852 const uint32_t COLOR_R = 155;
853 const uint32_t COLOR_G = 224;
854 const uint32_t COLOR_B = 88;
855 const uint32_t COLOR_A = 128;
856
857 LayerColor layerColor = {
858 .r = COLOR_R,
859 .g = COLOR_G,
860 .b = COLOR_B,
861 .a = COLOR_A
862 };
863
864 auto ret = g_composerDevice->SetLayerColor(g_displayIds[0], layer->GetId(), layerColor);
865
866 PrepareAndCommit();
867
868 EXPECT_EQ(DISPLAY_SUCCESS, ret);
869
870 DestroyLayer(layer);
871 }
872
873 HWTEST_F(DeviceTest, test_DestroyLayer, TestSize.Level1)
874 {
875 std::vector<LayerSettings> settings = {
876 {
877 .rectRatio = { 0, 0, 1.0f, 1.0f },
878 .color = PURPLE
879 }
880 };
881
882 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
883 ASSERT_TRUE((layers.size() > 0));
884 auto layer = layers[0];
885 PrepareAndCommit();
886
887 sleep(1);
888 auto ret = g_composerDevice->DestroyLayer(g_displayIds[0], layer->GetId());
889 EXPECT_EQ(DISPLAY_SUCCESS, ret);
890 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_CONT_100));
891 }
892
893 HWTEST_F(DeviceTest, test_RegDisplayVBlankCallback, TestSize.Level1)
894 {
895 int ret;
896 DISPLAY_TEST_LOGD();
897 std::shared_ptr<HdiTestDisplay> display = HdiTestDevice::GetInstance().GetFirstDisplay();
898 ASSERT_TRUE(display != nullptr) << "get display failed";
899 ret = display->RegDisplayVBlankCallback(TestVBlankCallback, nullptr);
900 ASSERT_TRUE(ret == DISPLAY_SUCCESS) << "RegDisplayVBlankCallback failed";
901 ret = display->SetDisplayVsyncEnabled(true);
902 ASSERT_TRUE(ret == DISPLAY_SUCCESS) << "SetDisplayVsyncEnabled failed";
903
904 std::vector<LayerSettings> settings = {
905 {
906 .rectRatio = { 0, 0, 1.0f, 1.0f },
907 .color = PINK
908 },
909 };
910 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
911 ASSERT_TRUE((layers.size() > 0));
912 VblankCtr::GetInstance().hasVblank_ = false;
913 PrepareAndCommit();
914 ret = VblankCtr::GetInstance().WaitVblank(SLEEP_CONT_100); // 100ms
915 ASSERT_TRUE(ret == DISPLAY_SUCCESS) << "WaitVblank timeout";
916 ret = display->SetDisplayVsyncEnabled(false);
917 ASSERT_TRUE(ret == DISPLAY_SUCCESS) << "SetDisplayVsyncEnabled failed";
918 usleep(SLEEP_CONT_100 * SLEEP_CONT_2000); // wait for 100ms avoid the last vsync.
919 VblankCtr::GetInstance().hasVblank_ = false;
920 ret = VblankCtr::GetInstance().WaitVblank(SLEEP_CONT_100); // 100ms
921 ASSERT_TRUE(ret != DISPLAY_SUCCESS) << "vblank do not disable";
922
923 DestroyLayer(layers[0]);
924 }
925
OnMode(uint32_t modeId,uint64_t vBlankPeriod,void * data)926 void DeviceTest::OnMode(uint32_t modeId, uint64_t vBlankPeriod, void* data)
927 {
928 g_isOnModeCalled = true;
929 }
930
OnSeamlessChange(uint32_t devId,void * data)931 void DeviceTest::OnSeamlessChange(uint32_t devId, void* data)
932 {
933 g_isOnSeamlessChangeCalled = true;
934 }
935
936 HWTEST_F(DeviceTest, test_GetDisplaySupportedModesExt, TestSize.Level1)
937 {
938 std::vector<DisplayModeInfoExt> modes;
939 auto ret = g_composerDevice->GetDisplaySupportedModesExt(g_displayIds[0], modes);
940 if (ret == DISPLAY_NOT_SUPPORT) {
941 DISPLAY_TEST_LOGD("GetDisplaySupportedModesExt not support");
942 return;
943 }
944 EXPECT_EQ(DISPLAY_SUCCESS, ret);
945 }
946
947 HWTEST_F(DeviceTest, test_SetDisplayModeAsync, TestSize.Level1)
948 {
949 g_isOnModeCalled = false;
950 std::vector<DisplayModeInfo> oldModes;
951 std::vector<LayerSettings> settings = {
952 {
953 .rectRatio = { 0, 0, 1.0f, 1.0f },
954 .color = RED
955 }
956 };
957
958 // 先注册VBlankCallback
959 auto ret = g_composerDevice->RegDisplayVBlankCallback(g_displayIds[0], TestVBlankCallback, nullptr);
960 ASSERT_TRUE(ret == DISPLAY_SUCCESS) << "RegDisplayVBlankCallback failed";
961
962 ret = g_composerDevice->GetDisplaySupportedModes(g_displayIds[0], oldModes);
963 ASSERT_EQ(DISPLAY_SUCCESS, ret);
964 ASSERT_EQ(oldModes.size() > 0, true);
965
966 uint32_t modeid = oldModes[0].id;
967 ret = g_composerDevice->SetDisplayModeAsync(g_displayIds[0], modeid, OnMode);
968 if (ret == DISPLAY_NOT_SUPPORT) {
969 return;
970 }
971 EXPECT_EQ(DISPLAY_SUCCESS, ret);
972 if (ret == DISPLAY_SUCCESS) {
973 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
974 ASSERT_TRUE((layers.size() > 0));
975 g_threadCtrl = false;
976 std::thread commitThread(LoopCommit);
977 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_CONT_100));
978 g_threadCtrl = true;
979 commitThread.join();
980 ASSERT_EQ(g_isOnModeCalled, true);
981
982 DestroyLayer(layers[0]);
983 }
984 }
985
986 HWTEST_F(DeviceTest, test_GetDisplayVBlankPeriod, TestSize.Level1)
987 {
988 uint64_t period = 0;
989 auto ret = g_composerDevice->GetDisplayVBlankPeriod(g_displayIds[0], period);
990 if (ret == DISPLAY_NOT_SUPPORT) {
991 DISPLAY_TEST_LOGD("GetDisplayVBlankPeriod not support");
992 return;
993 }
994 EXPECT_EQ(DISPLAY_SUCCESS, ret);
995 EXPECT_EQ(period != 0, true);
996 }
997
998 HWTEST_F(DeviceTest, test_RegSeamlessChangeCallback, TestSize.Level1)
999 {
1000 g_isOnSeamlessChangeCalled = false;
1001 auto ret = g_composerDevice->RegSeamlessChangeCallback(OnSeamlessChange, nullptr);
1002 if (ret == DISPLAY_NOT_SUPPORT) {
1003 DISPLAY_TEST_LOGD("RegSeamlessChangeCallback not support");
1004 return;
1005 }
1006 EXPECT_EQ(DISPLAY_SUCCESS, ret);
1007 if (ret == DISPLAY_SUCCESS) {
1008 std::this_thread::sleep_for(std::chrono::milliseconds(5000));
1009 ASSERT_EQ(g_isOnSeamlessChangeCalled, true);
1010 }
1011 }
1012
1013 HWTEST_F(DeviceTest, test_SetLayerPerFrameParameter, TestSize.Level1)
1014 {
1015 std::vector<LayerSettings> settings = {
1016 {
1017 .rectRatio = { 0, 0, 1.0f, 1.0f },
1018 .color = GREEN
1019 },
1020 };
1021
1022 std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings);
1023 ASSERT_TRUE((layers.size() > 0));
1024 auto layer = layers[0];
1025 std::vector<std::string> ValidKeys = { "FilmFilter", "ArsrDoEnhance", "SDRBrightnessRatio", "BrightnessNit",
1026 "ViewGroupHasValidAlpha", "SourceCropTuning" };
1027 std::string key;
1028 std::vector<int8_t> value = { 1 };
1029 key = "NotSupportKey";
1030 auto ret = g_composerDevice->SetLayerPerFrameParameter(g_displayIds[0], layer->GetId(), key, value);
1031 if (ret == DISPLAY_NOT_SUPPORT) {
1032 DISPLAY_TEST_LOGD("SetLayerPerFrameParameter not support");
1033 return;
1034 }
1035 ASSERT_EQ(ret, -1) << "key not support, ret:" << ret;
1036 key = ValidKeys[0];
1037 ret = g_composerDevice->SetLayerPerFrameParameter(g_displayIds[0], layer->GetId(), key, value);
1038 ASSERT_EQ(ret, 0) << "key support, ret:" << ret;
1039 if (ret == DISPLAY_NOT_SUPPORT) {
1040 DISPLAY_TEST_LOGD("SetLayerPerFrameParameter not support");
1041 return;
1042 }
1043 EXPECT_EQ(DISPLAY_SUCCESS, ret);
1044 }
1045
1046 HWTEST_F(DeviceTest, test_GetSupportedLayerPerFrameParameterKey, TestSize.Level1)
1047 {
1048 std::vector<std::string> keys;
1049 auto ret = g_composerDevice->GetSupportedLayerPerFrameParameterKey(keys);
1050 if (ret == DISPLAY_NOT_SUPPORT) {
1051 DISPLAY_TEST_LOGD("GetSupportedLayerPerFrameParameterKey not support");
1052 return;
1053 }
1054 EXPECT_EQ(DISPLAY_SUCCESS, ret);
1055 }
1056
1057 HWTEST_F(DeviceTest, test_SetDisplayOverlayResolution, TestSize.Level1)
1058 {
1059 DisplayModeInfo mode = GetFirstDisplay()->GetCurrentMode();
1060 auto ret = g_composerDevice->SetDisplayOverlayResolution(g_displayIds[0], mode.width, mode.height);
1061 if (ret == DISPLAY_NOT_SUPPORT) {
1062 DISPLAY_TEST_LOGD("SetDisplayOverlayResolution not support");
1063 return;
1064 }
1065 EXPECT_EQ(DISPLAY_SUCCESS, ret);
1066 }
1067
TestRefreshCallback(uint32_t devId,void * data)1068 static void TestRefreshCallback(uint32_t devId, void* data)
1069 {
1070 }
1071
1072 HWTEST_F(DeviceTest, test_RegRefreshCallback, TestSize.Level1)
1073 {
1074 auto ret = g_composerDevice->RegRefreshCallback(TestRefreshCallback, nullptr);
1075 if (ret == DISPLAY_NOT_SUPPORT) {
1076 DISPLAY_TEST_LOGD("RegRefreshCallback not support");
1077 return;
1078 }
1079 EXPECT_EQ(DISPLAY_SUCCESS, ret);
1080 }
1081
1082 HWTEST_F(DeviceTest, test_GetDisplaySupportedColorGamuts, TestSize.Level1)
1083 {
1084 std::vector<ColorGamut> gamuts;
1085 auto ret = g_composerDevice->GetDisplaySupportedColorGamuts(g_displayIds[0], gamuts);
1086 if (ret == DISPLAY_NOT_SUPPORT) {
1087 DISPLAY_TEST_LOGD("GetDisplaySupportedColorGamuts not support");
1088 return;
1089 }
1090 EXPECT_EQ(DISPLAY_SUCCESS, ret);
1091 }
1092
1093 HWTEST_F(DeviceTest, test_GetHDRCapabilityInfos, TestSize.Level1)
1094 {
1095 HDRCapability info = { 0 };
1096 auto ret = g_composerDevice->GetHDRCapabilityInfos(g_displayIds[0], info);
1097 if (ret == DISPLAY_NOT_SUPPORT) {
1098 DISPLAY_TEST_LOGD("GetHDRCapabilityInfos not support");
1099 return;
1100 }
1101 EXPECT_EQ(DISPLAY_SUCCESS, ret);
1102 }
1103
1104 HWTEST_F(DeviceTest, test_SetDisplayActiveRegion, TestSize.Level1)
1105 {
1106 IRect rect = {0, 0, 1, 1};
1107 auto ret = g_composerDevice->SetDisplayActiveRegion(g_displayIds[0], rect);
1108 HDF_LOGI("SetDisplayActiveRegion ret = %{public}d", ret);
1109
1110 if (ret == DISPLAY_NOT_SUPPORT) {
1111 DISPLAY_TEST_LOGD("SetDisplayActiveRegion not support");
1112 return;
1113 }
1114 EXPECT_EQ(DISPLAY_FAILURE, ret);
1115 }
1116
1117 HWTEST_F(DeviceTest, test_FastPresent, TestSize.Level1)
1118 {
1119 PresentParam param = { 0, 1280, 1, 0x5000280, 0 };
1120 std::vector<BufferHandle *> inHandles;
1121 auto ret = g_composerDevice->FastPresent(g_displayIds[0], param, inHandles);
1122 if (ret == DISPLAY_NOT_SUPPORT) {
1123 DISPLAY_TEST_LOGD("FastPresent not support");
1124 return;
1125 }
1126 EXPECT_EQ(DISPLAY_FAILURE, ret);
1127 }