• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }