1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#include "hdi_composer_ut.h" 17094332d3Sopenharmony_ci#include <chrono> 18094332d3Sopenharmony_ci#include <cinttypes> 19094332d3Sopenharmony_ci#include <algorithm> 20094332d3Sopenharmony_ci#include "v1_2/include/idisplay_composer_interface.h" 21094332d3Sopenharmony_ci#include "v1_2/display_composer_type.h" 22094332d3Sopenharmony_ci#include "v1_0/display_buffer_type.h" 23094332d3Sopenharmony_ci#include "display_test.h" 24094332d3Sopenharmony_ci#include "display_test_utils.h" 25094332d3Sopenharmony_ci#include "hdi_composition_check.h" 26094332d3Sopenharmony_ci#include "hdi_test_device.h" 27094332d3Sopenharmony_ci#include "hdi_test_device_common.h" 28094332d3Sopenharmony_ci#include "hdi_test_display.h" 29094332d3Sopenharmony_ci#include "hdi_test_render_utils.h" 30094332d3Sopenharmony_ci#include "timer.h" 31094332d3Sopenharmony_ci#include <sys/time.h> 32094332d3Sopenharmony_ci#include <thread> 33094332d3Sopenharmony_ci 34094332d3Sopenharmony_ciusing namespace OHOS::HDI::Display::Buffer::V1_0; 35094332d3Sopenharmony_ciusing namespace OHOS::HDI::Display::Composer::V1_2; 36094332d3Sopenharmony_ciusing namespace OHOS::HDI::Display::TEST; 37094332d3Sopenharmony_ciusing namespace testing::ext; 38094332d3Sopenharmony_ci 39094332d3Sopenharmony_cistatic sptr<Composer::V1_2::IDisplayComposerInterface> g_composerDevice = nullptr; 40094332d3Sopenharmony_cistatic std::shared_ptr<IDisplayBuffer> g_gralloc = nullptr; 41094332d3Sopenharmony_cistatic std::vector<uint32_t> g_displayIds; 42094332d3Sopenharmony_ciconst int SLEEP_CONT_10 = 10; 43094332d3Sopenharmony_ciconst int SLEEP_CONT_100 = 100; 44094332d3Sopenharmony_ciconst int SLEEP_CONT_2000 = 2000; 45094332d3Sopenharmony_cistatic bool g_isOnSeamlessChangeCalled = false; 46094332d3Sopenharmony_cistatic bool g_isOnModeCalled = false; 47094332d3Sopenharmony_cistatic bool g_threadCtrl = false; 48094332d3Sopenharmony_ci 49094332d3Sopenharmony_cistatic inline std::shared_ptr<HdiTestDisplay> GetFirstDisplay() 50094332d3Sopenharmony_ci{ 51094332d3Sopenharmony_ci return HdiTestDevice::GetInstance().GetFirstDisplay(); 52094332d3Sopenharmony_ci} 53094332d3Sopenharmony_ci 54094332d3Sopenharmony_cistatic int32_t CheckComposition(std::vector<LayerSettings> &layers, BufferHandle* clientBuffer, 55094332d3Sopenharmony_ci uint32_t checkType = HdiCompositionCheck::CHECK_VERTEX) 56094332d3Sopenharmony_ci{ 57094332d3Sopenharmony_ci DISPLAY_TEST_CHK_RETURN((clientBuffer == nullptr), DISPLAY_NULL_PTR, DISPLAY_TEST_LOGE("client buffer is nullptr")); 58094332d3Sopenharmony_ci return HdiCompositionCheck::GetInstance().Check(layers, *clientBuffer, checkType); 59094332d3Sopenharmony_ci} 60094332d3Sopenharmony_ci 61094332d3Sopenharmony_cistatic std::shared_ptr<HdiTestLayer> CreateTestLayer(LayerSettings setting, uint32_t zorder) 62094332d3Sopenharmony_ci{ 63094332d3Sopenharmony_ci int ret; 64094332d3Sopenharmony_ci HdiTestDevice::GetInstance(); 65094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("color 0x%x", setting.color); 66094332d3Sopenharmony_ci std::shared_ptr<HdiTestDisplay> display = HdiTestDevice::GetInstance().GetFirstDisplay(); 67094332d3Sopenharmony_ci DISPLAY_TEST_CHK_RETURN((display == nullptr), nullptr, DISPLAY_TEST_LOGE("can not get display")); 68094332d3Sopenharmony_ci 69094332d3Sopenharmony_ci std::shared_ptr<HdiTestLayer> layer = display->CreateHdiTestLayer(setting.bufferSize.w, setting.bufferSize.h); 70094332d3Sopenharmony_ci DISPLAY_TEST_CHK_RETURN((layer == nullptr), nullptr, DISPLAY_TEST_LOGE("can not create hdi test layer")); 71094332d3Sopenharmony_ci 72094332d3Sopenharmony_ci layer->SetLayerPosition(setting.displayRect); 73094332d3Sopenharmony_ci 74094332d3Sopenharmony_ci layer->SetCompType(setting.compositionType); 75094332d3Sopenharmony_ci 76094332d3Sopenharmony_ci if ((setting.alpha >= 0) && (setting.alpha <= 0xff)) { // alpha rang 0x00 ~ 0xff 77094332d3Sopenharmony_ci LayerAlpha alpha = { 0 }; 78094332d3Sopenharmony_ci alpha.gAlpha = setting.alpha; 79094332d3Sopenharmony_ci alpha.enGlobalAlpha = true; 80094332d3Sopenharmony_ci layer->SetAlpha(alpha); 81094332d3Sopenharmony_ci } 82094332d3Sopenharmony_ci HdiGrallocBuffer* handle = layer->GetFrontBuffer(); 83094332d3Sopenharmony_ci DISPLAY_TEST_CHK_RETURN((handle == nullptr), nullptr, DISPLAY_TEST_LOGE("can not get front buffer")); 84094332d3Sopenharmony_ci ClearColor(*(handle->Get()), setting.color); 85094332d3Sopenharmony_ci ret = layer->SwapFrontToBackQ(); 86094332d3Sopenharmony_ci DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), nullptr, DISPLAY_TEST_LOGE("SwapFrontToBackQ failed")); 87094332d3Sopenharmony_ci layer->SetZorder(zorder); 88094332d3Sopenharmony_ci layer->SetBlendType(setting.blendType); 89094332d3Sopenharmony_ci layer->SetTransform(setting.rotate); 90094332d3Sopenharmony_ci return layer; 91094332d3Sopenharmony_ci} 92094332d3Sopenharmony_ci 93094332d3Sopenharmony_cistatic int PrepareAndCommit() 94094332d3Sopenharmony_ci{ 95094332d3Sopenharmony_ci int ret; 96094332d3Sopenharmony_ci DISPLAY_TEST_LOGD(); 97094332d3Sopenharmony_ci std::shared_ptr<HdiTestDisplay> display = HdiTestDevice::GetInstance().GetFirstDisplay(); 98094332d3Sopenharmony_ci DISPLAY_TEST_CHK_RETURN((display == nullptr), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("can not get display")); 99094332d3Sopenharmony_ci 100094332d3Sopenharmony_ci ret = display->PrepareDisplayLayers(); // 确定顶压策略(是否走GPU合成)、刷新layer列表 101094332d3Sopenharmony_ci DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, 102094332d3Sopenharmony_ci DISPLAY_TEST_LOGE("PrepareDisplayLayers failed")); 103094332d3Sopenharmony_ci 104094332d3Sopenharmony_ci ret = display->Commit(); // 送显 105094332d3Sopenharmony_ci DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("Commit failed")); 106094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 107094332d3Sopenharmony_ci} 108094332d3Sopenharmony_ci 109094332d3Sopenharmony_cistatic void LoopCommit() 110094332d3Sopenharmony_ci{ 111094332d3Sopenharmony_ci while (!g_threadCtrl) { 112094332d3Sopenharmony_ci PrepareAndCommit(); 113094332d3Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_CONT_10)); 114094332d3Sopenharmony_ci } 115094332d3Sopenharmony_ci} 116094332d3Sopenharmony_ci 117094332d3Sopenharmony_cistatic void TestVBlankCallback(unsigned int sequence, uint64_t ns, void* data) 118094332d3Sopenharmony_ci{ 119094332d3Sopenharmony_ci static uint64_t lastns; 120094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("seq %{public}d ns %" PRId64 " duration %" PRId64 " ns", sequence, ns, (ns - lastns)); 121094332d3Sopenharmony_ci lastns = ns; 122094332d3Sopenharmony_ci VblankCtr::GetInstance().NotifyVblank(sequence, ns, data); 123094332d3Sopenharmony_ci} 124094332d3Sopenharmony_ci 125094332d3Sopenharmony_cistatic void AdjustLayerSettings(std::vector<LayerSettings> &settings, uint32_t w, uint32_t h) 126094332d3Sopenharmony_ci{ 127094332d3Sopenharmony_ci DISPLAY_TEST_LOGD(); 128094332d3Sopenharmony_ci for (uint32_t i = 0; i < settings.size(); i++) { 129094332d3Sopenharmony_ci LayerSettings& setting = settings[i]; 130094332d3Sopenharmony_ci DISPLAY_TEST_LOGD(" ratio w: %f ratio h: %f", setting.rectRatio.w, setting.rectRatio.h); 131094332d3Sopenharmony_ci if ((setting.rectRatio.w > 0.0f) && (setting.rectRatio.h > 0.0f)) { 132094332d3Sopenharmony_ci setting.displayRect.h = static_cast<uint32_t>(setting.rectRatio.h * h); 133094332d3Sopenharmony_ci setting.displayRect.w = static_cast<uint32_t>(setting.rectRatio.w * w); 134094332d3Sopenharmony_ci setting.displayRect.x = static_cast<uint32_t>(setting.rectRatio.x * w); 135094332d3Sopenharmony_ci setting.displayRect.y = static_cast<uint32_t>(setting.rectRatio.y * h); 136094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("display rect adust form %f %f %f %f to %{public}d %{public}d %{public}d %{public}d ", 137094332d3Sopenharmony_ci setting.rectRatio.x, setting.rectRatio.y, setting.rectRatio.w, setting.rectRatio.h, 138094332d3Sopenharmony_ci setting.displayRect.x, setting.displayRect.y, setting.displayRect.w, setting.displayRect.h); 139094332d3Sopenharmony_ci } 140094332d3Sopenharmony_ci 141094332d3Sopenharmony_ci if ((setting.bufferRatio.h > 0.0f) || (setting.bufferRatio.w > 0.0f)) { 142094332d3Sopenharmony_ci setting.bufferSize.h = static_cast<uint32_t>(setting.bufferRatio.h * h); 143094332d3Sopenharmony_ci setting.bufferSize.w = static_cast<uint32_t>(setting.bufferRatio.w * w); 144094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("buffer size adjust for %f %f to %{public}d %{public}d", 145094332d3Sopenharmony_ci setting.bufferRatio.w, setting.bufferRatio.h, setting.bufferSize.w, setting.bufferSize.h); 146094332d3Sopenharmony_ci } 147094332d3Sopenharmony_ci 148094332d3Sopenharmony_ci if ((setting.bufferSize.w == 0) || (setting.bufferSize.h == 0)) { 149094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("buffer size adjust for %{public}d %{public}d to %{public}d %{public}d", 150094332d3Sopenharmony_ci setting.bufferSize.w, setting.bufferSize.h, setting.displayRect.w, setting.displayRect.h); 151094332d3Sopenharmony_ci 152094332d3Sopenharmony_ci setting.bufferSize.w = setting.displayRect.w; 153094332d3Sopenharmony_ci setting.bufferSize.h = setting.displayRect.h; 154094332d3Sopenharmony_ci } 155094332d3Sopenharmony_ci } 156094332d3Sopenharmony_ci} 157094332d3Sopenharmony_ci 158094332d3Sopenharmony_cistatic std::vector<std::shared_ptr<HdiTestLayer>> CreateLayers(std::vector<LayerSettings> &settings) 159094332d3Sopenharmony_ci{ 160094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("settings %{public}zd", settings.size()); 161094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers; 162094332d3Sopenharmony_ci DisplayModeInfo mode = GetFirstDisplay()->GetCurrentMode(); 163094332d3Sopenharmony_ci AdjustLayerSettings(settings, mode.width, mode.height); 164094332d3Sopenharmony_ci for (uint32_t i = 0; i < settings.size(); i++) { 165094332d3Sopenharmony_ci LayerSettings setting = settings[i]; 166094332d3Sopenharmony_ci 167094332d3Sopenharmony_ci auto layer = CreateTestLayer(setting, i); 168094332d3Sopenharmony_ci layers.push_back(layer); 169094332d3Sopenharmony_ci } 170094332d3Sopenharmony_ci 171094332d3Sopenharmony_ci return layers; 172094332d3Sopenharmony_ci} 173094332d3Sopenharmony_ci 174094332d3Sopenharmony_cistatic inline void PresentAndCheck(std::vector<LayerSettings> &layerSettings, 175094332d3Sopenharmony_ci uint32_t checkType = HdiCompositionCheck::CHECK_VERTEX) 176094332d3Sopenharmony_ci{ 177094332d3Sopenharmony_ci int ret = PrepareAndCommit(); 178094332d3Sopenharmony_ci ASSERT_TRUE((ret == DISPLAY_SUCCESS)); 179094332d3Sopenharmony_ci if ((GetFirstDisplay()->SnapShot()) != nullptr) { 180094332d3Sopenharmony_ci HdiTestDevice::GetInstance().GetGrallocInterface()->InvalidateCache(*(GetFirstDisplay()->SnapShot())); 181094332d3Sopenharmony_ci ret = CheckComposition(layerSettings, GetFirstDisplay()->SnapShot(), checkType); 182094332d3Sopenharmony_ci ASSERT_TRUE((ret == DISPLAY_SUCCESS)); 183094332d3Sopenharmony_ci } 184094332d3Sopenharmony_ci} 185094332d3Sopenharmony_ci 186094332d3Sopenharmony_cistatic void DestroyLayer(std::shared_ptr<HdiTestLayer> layer) 187094332d3Sopenharmony_ci{ 188094332d3Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_CONT_100)); 189094332d3Sopenharmony_ci auto ret = g_composerDevice->DestroyLayer(g_displayIds[0], layer->GetId()); 190094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS && ret != DISPLAY_NOT_SUPPORT) { 191094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("DestroyLayer fail or not support, ret: %{public}d", ret); 192094332d3Sopenharmony_ci return; 193094332d3Sopenharmony_ci } 194094332d3Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_CONT_100)); 195094332d3Sopenharmony_ci} 196094332d3Sopenharmony_ci 197094332d3Sopenharmony_civoid DeviceTest::SetUpTestCase() 198094332d3Sopenharmony_ci{ 199094332d3Sopenharmony_ci int ret = HdiTestDevice::GetInstance().InitDevice(); 200094332d3Sopenharmony_ci ASSERT_TRUE(ret == DISPLAY_SUCCESS); 201094332d3Sopenharmony_ci 202094332d3Sopenharmony_ci g_composerDevice = HdiTestDevice::GetInstance().GetDeviceInterface(); 203094332d3Sopenharmony_ci ASSERT_TRUE(g_composerDevice != nullptr); 204094332d3Sopenharmony_ci 205094332d3Sopenharmony_ci g_gralloc.reset(IDisplayBuffer::Get()); 206094332d3Sopenharmony_ci ASSERT_TRUE(g_gralloc != nullptr); 207094332d3Sopenharmony_ci 208094332d3Sopenharmony_ci g_displayIds = HdiTestDevice::GetInstance().GetDevIds(); 209094332d3Sopenharmony_ci ASSERT_TRUE(g_displayIds.size() > 0); 210094332d3Sopenharmony_ci} 211094332d3Sopenharmony_ci 212094332d3Sopenharmony_civoid DeviceTest::TearDownTestCase() 213094332d3Sopenharmony_ci{ 214094332d3Sopenharmony_ci HdiTestDevice::GetInstance().Clear(); 215094332d3Sopenharmony_ci HdiTestDevice::GetInstance().GetFirstDisplay()->ResetClientLayer(); 216094332d3Sopenharmony_ci} 217094332d3Sopenharmony_ci 218094332d3Sopenharmony_civoid VblankCtr::NotifyVblank(unsigned int sequence, uint64_t ns, const void* data) 219094332d3Sopenharmony_ci{ 220094332d3Sopenharmony_ci DISPLAY_TEST_LOGD(); 221094332d3Sopenharmony_ci if (data != nullptr) { 222094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("sequence = %{public}u, ns = %" PRIu64 "", sequence, ns); 223094332d3Sopenharmony_ci } 224094332d3Sopenharmony_ci std::unique_lock<std::mutex> lg(vblankMutex_); 225094332d3Sopenharmony_ci hasVblank_ = true; 226094332d3Sopenharmony_ci vblankCondition_.notify_one(); 227094332d3Sopenharmony_ci DISPLAY_TEST_LOGD(); 228094332d3Sopenharmony_ci} 229094332d3Sopenharmony_ci 230094332d3Sopenharmony_ciVblankCtr::~VblankCtr() {} 231094332d3Sopenharmony_ci 232094332d3Sopenharmony_ciint32_t VblankCtr::WaitVblank(uint32_t ms) 233094332d3Sopenharmony_ci{ 234094332d3Sopenharmony_ci bool ret = false; 235094332d3Sopenharmony_ci DISPLAY_TEST_LOGD(); 236094332d3Sopenharmony_ci std::unique_lock<std::mutex> lck(vblankMutex_); 237094332d3Sopenharmony_ci ret = vblankCondition_.wait_for(lck, std::chrono::milliseconds(ms), [=] { return hasVblank_; }); 238094332d3Sopenharmony_ci DISPLAY_TEST_LOGD(); 239094332d3Sopenharmony_ci if (!ret) { 240094332d3Sopenharmony_ci return DISPLAY_FAILURE; 241094332d3Sopenharmony_ci } 242094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 243094332d3Sopenharmony_ci} 244094332d3Sopenharmony_ci 245094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetClientBufferCacheCount, TestSize.Level1) 246094332d3Sopenharmony_ci{ 247094332d3Sopenharmony_ci const uint32_t CACHE_COUNT = 5; 248094332d3Sopenharmony_ci auto ret = g_composerDevice->SetClientBufferCacheCount(g_displayIds[0], CACHE_COUNT); 249094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 250094332d3Sopenharmony_ci} 251094332d3Sopenharmony_ci 252094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplayCapability, TestSize.Level1) 253094332d3Sopenharmony_ci{ 254094332d3Sopenharmony_ci DisplayCapability info; 255094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplayCapability(g_displayIds[0], info); 256094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 257094332d3Sopenharmony_ci} 258094332d3Sopenharmony_ci 259094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplaySupportedModes, TestSize.Level1) 260094332d3Sopenharmony_ci{ 261094332d3Sopenharmony_ci std::vector<DisplayModeInfo> modes; 262094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplaySupportedModes(g_displayIds[0], modes); 263094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 264094332d3Sopenharmony_ci} 265094332d3Sopenharmony_ci 266094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplayMode, TestSize.Level1) 267094332d3Sopenharmony_ci{ 268094332d3Sopenharmony_ci uint32_t MODE = 0; 269094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplayMode(g_displayIds[0], MODE); 270094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 271094332d3Sopenharmony_ci} 272094332d3Sopenharmony_ci 273094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetDisplayMode, TestSize.Level1) 274094332d3Sopenharmony_ci{ 275094332d3Sopenharmony_ci const uint32_t MODE = 0; 276094332d3Sopenharmony_ci auto ret = g_composerDevice->SetDisplayMode(g_displayIds[0], MODE); 277094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 278094332d3Sopenharmony_ci} 279094332d3Sopenharmony_ci 280094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplayPowerStatus, TestSize.Level1) 281094332d3Sopenharmony_ci{ 282094332d3Sopenharmony_ci Composer::V1_0::DispPowerStatus powerStatus = Composer::V1_0::DispPowerStatus::POWER_STATUS_OFF; 283094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplayPowerStatus(g_displayIds[0], powerStatus); 284094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 285094332d3Sopenharmony_ci} 286094332d3Sopenharmony_ci 287094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetDisplayPowerStatus, TestSize.Level1) 288094332d3Sopenharmony_ci{ 289094332d3Sopenharmony_ci auto ret = g_composerDevice->SetDisplayPowerStatus(g_displayIds[0], 290094332d3Sopenharmony_ci Composer::V1_0::DispPowerStatus::POWER_STATUS_STANDBY); 291094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 292094332d3Sopenharmony_ci 293094332d3Sopenharmony_ci ret = g_composerDevice->SetDisplayPowerStatus(g_displayIds[0], Composer::V1_0::DispPowerStatus::POWER_STATUS_ON); 294094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 295094332d3Sopenharmony_ci} 296094332d3Sopenharmony_ci 297094332d3Sopenharmony_ci#ifdef DISPLAY_COMMUNITY 298094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplayBacklight, TestSize.Level1) 299094332d3Sopenharmony_ci{ 300094332d3Sopenharmony_ci uint32_t level; 301094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplayBacklight(g_displayIds[0], level); 302094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 303094332d3Sopenharmony_ci} 304094332d3Sopenharmony_ci#endif 305094332d3Sopenharmony_ci 306094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetDisplayBacklight, TestSize.Level1) 307094332d3Sopenharmony_ci{ 308094332d3Sopenharmony_ci const uint32_t LEVEL = 10; 309094332d3Sopenharmony_ci auto ret = g_composerDevice->SetDisplayBacklight(g_displayIds[0], LEVEL); 310094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 311094332d3Sopenharmony_ci} 312094332d3Sopenharmony_ci 313094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplayProperty, TestSize.Level1) 314094332d3Sopenharmony_ci{ 315094332d3Sopenharmony_ci const uint32_t PROPERTY_ID = 1; 316094332d3Sopenharmony_ci uint64_t propertyValue = 0; 317094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplayProperty(g_displayIds[0], PROPERTY_ID, propertyValue); 318094332d3Sopenharmony_ci int32_t result = DISPLAY_FAILURE; 319094332d3Sopenharmony_ci if (ret == DISPLAY_SUCCESS || ret == DISPLAY_NOT_SUPPORT) { 320094332d3Sopenharmony_ci result = DISPLAY_SUCCESS; 321094332d3Sopenharmony_ci } 322094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, result); 323094332d3Sopenharmony_ci} 324094332d3Sopenharmony_ci 325094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetHardwareCursorPosition, TestSize.Level1) 326094332d3Sopenharmony_ci{ 327094332d3Sopenharmony_ci int32_t x = 1; 328094332d3Sopenharmony_ci int32_t y = 1; 329094332d3Sopenharmony_ci auto ret = g_composerDevice->SetHardwareCursorPosition(g_displayIds[0], x, y); 330094332d3Sopenharmony_ci if (ret == DISPLAY_SUCCESS || ret == DISPLAY_NOT_SUPPORT) { 331094332d3Sopenharmony_ci ret = DISPLAY_SUCCESS; 332094332d3Sopenharmony_ci } 333094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 334094332d3Sopenharmony_ci} 335094332d3Sopenharmony_ci 336094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_EnableHardwareCursorStats, TestSize.Level1) 337094332d3Sopenharmony_ci{ 338094332d3Sopenharmony_ci bool enable = true; 339094332d3Sopenharmony_ci auto ret = g_composerDevice->EnableHardwareCursorStats(g_displayIds[0], enable); 340094332d3Sopenharmony_ci if (ret == DISPLAY_SUCCESS || ret == DISPLAY_NOT_SUPPORT) { 341094332d3Sopenharmony_ci ret = DISPLAY_SUCCESS; 342094332d3Sopenharmony_ci } 343094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 344094332d3Sopenharmony_ci} 345094332d3Sopenharmony_ci 346094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetHardwareCursorStats, TestSize.Level1) 347094332d3Sopenharmony_ci{ 348094332d3Sopenharmony_ci uint32_t frameCount = 0; 349094332d3Sopenharmony_ci uint32_t vsyncCount = 0; 350094332d3Sopenharmony_ci auto ret = g_composerDevice->GetHardwareCursorStats(g_displayIds[0], frameCount, vsyncCount); 351094332d3Sopenharmony_ci if (ret == DISPLAY_SUCCESS || ret == DISPLAY_NOT_SUPPORT) { 352094332d3Sopenharmony_ci ret = DISPLAY_SUCCESS; 353094332d3Sopenharmony_ci } 354094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 355094332d3Sopenharmony_ci} 356094332d3Sopenharmony_ci 357094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplayCompChange, TestSize.Level1) 358094332d3Sopenharmony_ci{ 359094332d3Sopenharmony_ci std::vector<uint32_t> layers {}; 360094332d3Sopenharmony_ci std::vector<int32_t> type {}; 361094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplayCompChange(g_displayIds[0], layers, type); 362094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 363094332d3Sopenharmony_ci} 364094332d3Sopenharmony_ci 365094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetDisplayClientCrop, TestSize.Level1) 366094332d3Sopenharmony_ci{ 367094332d3Sopenharmony_ci const int32_t WIDTH = 1920; 368094332d3Sopenharmony_ci const int32_t HEIGHT = 1080; 369094332d3Sopenharmony_ci IRect rect = {0, 0, WIDTH, HEIGHT}; 370094332d3Sopenharmony_ci auto ret = g_composerDevice->SetDisplayClientCrop(g_displayIds[0], rect); 371094332d3Sopenharmony_ci // not support 372094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_FAILURE, ret); 373094332d3Sopenharmony_ci} 374094332d3Sopenharmony_ci 375094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplayReleaseFence, TestSize.Level1) 376094332d3Sopenharmony_ci{ 377094332d3Sopenharmony_ci std::vector<uint32_t> layers {}; 378094332d3Sopenharmony_ci std::vector<int32_t> fences {}; 379094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplayReleaseFence(g_displayIds[0], layers, fences); 380094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 381094332d3Sopenharmony_ci} 382094332d3Sopenharmony_ci 383094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetDisplayClientBuffer, TestSize.Level1) 384094332d3Sopenharmony_ci{ 385094332d3Sopenharmony_ci BufferHandle* buffer = nullptr; 386094332d3Sopenharmony_ci const int32_t WIDTH = 800; 387094332d3Sopenharmony_ci const int32_t HEIGHT = 600; 388094332d3Sopenharmony_ci 389094332d3Sopenharmony_ci AllocInfo info; 390094332d3Sopenharmony_ci info.width = WIDTH; 391094332d3Sopenharmony_ci info.height = HEIGHT; 392094332d3Sopenharmony_ci info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA | 393094332d3Sopenharmony_ci OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ | 394094332d3Sopenharmony_ci OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE; 395094332d3Sopenharmony_ci info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888; 396094332d3Sopenharmony_ci 397094332d3Sopenharmony_ci g_gralloc->AllocMem(info, buffer); 398094332d3Sopenharmony_ci ASSERT_TRUE(buffer != nullptr); 399094332d3Sopenharmony_ci 400094332d3Sopenharmony_ci uint32_t bufferSeq = 1; 401094332d3Sopenharmony_ci auto ret = g_composerDevice->SetDisplayClientBuffer(g_displayIds[0], buffer, bufferSeq, -1); 402094332d3Sopenharmony_ci g_gralloc->FreeMem(*buffer); 403094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 404094332d3Sopenharmony_ci} 405094332d3Sopenharmony_ci 406094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetDisplayClientDamage, TestSize.Level1) 407094332d3Sopenharmony_ci{ 408094332d3Sopenharmony_ci const int32_t WIDTH = 1920; 409094332d3Sopenharmony_ci const int32_t HEIGHT = 1080; 410094332d3Sopenharmony_ci IRect rect = {0, 0, WIDTH, HEIGHT}; 411094332d3Sopenharmony_ci std::vector<IRect> vRects; 412094332d3Sopenharmony_ci vRects.push_back(rect); 413094332d3Sopenharmony_ci auto ret = g_composerDevice->SetDisplayClientDamage(g_displayIds[0], vRects); 414094332d3Sopenharmony_ci // not support 415094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 416094332d3Sopenharmony_ci} 417094332d3Sopenharmony_ci 418094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_CreateVirtualDisplay, TestSize.Level1) 419094332d3Sopenharmony_ci{ 420094332d3Sopenharmony_ci const uint32_t WIDTH = 1920; 421094332d3Sopenharmony_ci const uint32_t HEIGHT = 1080; 422094332d3Sopenharmony_ci int32_t format = 0; 423094332d3Sopenharmony_ci uint32_t devId = 0; 424094332d3Sopenharmony_ci auto ret = g_composerDevice->CreateVirtualDisplay(WIDTH, HEIGHT, format, devId); 425094332d3Sopenharmony_ci // not support 426094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_FAILURE, ret); 427094332d3Sopenharmony_ci} 428094332d3Sopenharmony_ci 429094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_DestroyVirtualDisplay, TestSize.Level1) 430094332d3Sopenharmony_ci{ 431094332d3Sopenharmony_ci uint32_t devId = 0; 432094332d3Sopenharmony_ci auto ret = g_composerDevice->DestroyVirtualDisplay(devId); 433094332d3Sopenharmony_ci // not support 434094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_FAILURE, ret); 435094332d3Sopenharmony_ci} 436094332d3Sopenharmony_ci 437094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetVirtualDisplayBuffer, TestSize.Level1) 438094332d3Sopenharmony_ci{ 439094332d3Sopenharmony_ci BufferHandle* buffer = nullptr; 440094332d3Sopenharmony_ci int32_t fence = -1; 441094332d3Sopenharmony_ci const int32_t WIDTH = 800; 442094332d3Sopenharmony_ci const int32_t HEIGHT = 600; 443094332d3Sopenharmony_ci 444094332d3Sopenharmony_ci AllocInfo info; 445094332d3Sopenharmony_ci info.width = WIDTH; 446094332d3Sopenharmony_ci info.height = HEIGHT; 447094332d3Sopenharmony_ci info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA | 448094332d3Sopenharmony_ci OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ | 449094332d3Sopenharmony_ci OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE; 450094332d3Sopenharmony_ci info.format = Composer::V1_0::PIXEL_FMT_RGBA_8888; 451094332d3Sopenharmony_ci 452094332d3Sopenharmony_ci g_gralloc->AllocMem(info, buffer); 453094332d3Sopenharmony_ci ASSERT_TRUE(buffer != nullptr); 454094332d3Sopenharmony_ci 455094332d3Sopenharmony_ci auto ret = g_composerDevice->SetVirtualDisplayBuffer(g_displayIds[0], *buffer, fence); 456094332d3Sopenharmony_ci g_gralloc->FreeMem(*buffer); 457094332d3Sopenharmony_ci // not support 458094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_FAILURE, ret); 459094332d3Sopenharmony_ci} 460094332d3Sopenharmony_ci 461094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetDisplayProperty, TestSize.Level1) 462094332d3Sopenharmony_ci{ 463094332d3Sopenharmony_ci const uint32_t PROPERTY_ID = 1; 464094332d3Sopenharmony_ci const uint64_t PROPERTY_VALUE = 0; 465094332d3Sopenharmony_ci auto ret = g_composerDevice->SetDisplayProperty(g_displayIds[0], PROPERTY_ID, PROPERTY_VALUE); 466094332d3Sopenharmony_ci // not support 467094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_FAILURE, ret); 468094332d3Sopenharmony_ci} 469094332d3Sopenharmony_ci 470094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerCrop, TestSize.Level1) 471094332d3Sopenharmony_ci{ 472094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 473094332d3Sopenharmony_ci { 474094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 475094332d3Sopenharmony_ci .color = RED 476094332d3Sopenharmony_ci }, 477094332d3Sopenharmony_ci }; 478094332d3Sopenharmony_ci std::vector<uint32_t> splitColors = { { RED, GREEN, YELLOW, BLUE, PINK, PURPLE, CYAN, TRANSPARENT } }; 479094332d3Sopenharmony_ci 480094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 481094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 482094332d3Sopenharmony_ci // split the buffer 483094332d3Sopenharmony_ci auto layer = layers[0]; 484094332d3Sopenharmony_ci HdiGrallocBuffer* handle = layer->GetBackBuffer(); // the backbuffer has not present now 485094332d3Sopenharmony_ci ASSERT_TRUE((handle != nullptr)); 486094332d3Sopenharmony_ci auto splitRects = SplitBuffer(*(handle->Get()), splitColors); 487094332d3Sopenharmony_ci PrepareAndCommit(); 488094332d3Sopenharmony_ci for (uint32_t i = 0; i < splitRects.size(); i++) { 489094332d3Sopenharmony_ci settings[0].color = splitColors[i]; 490094332d3Sopenharmony_ci layer->SetLayerCrop(splitRects[i]); 491094332d3Sopenharmony_ci PresentAndCheck(settings); 492094332d3Sopenharmony_ci } 493094332d3Sopenharmony_ci 494094332d3Sopenharmony_ci DestroyLayer(layer); 495094332d3Sopenharmony_ci} 496094332d3Sopenharmony_ci 497094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerZorder, TestSize.Level1) 498094332d3Sopenharmony_ci{ 499094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 500094332d3Sopenharmony_ci { 501094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 502094332d3Sopenharmony_ci .color = RED 503094332d3Sopenharmony_ci }, 504094332d3Sopenharmony_ci { 505094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 506094332d3Sopenharmony_ci .color = GREEN 507094332d3Sopenharmony_ci }, 508094332d3Sopenharmony_ci { 509094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 510094332d3Sopenharmony_ci .color = YELLOW 511094332d3Sopenharmony_ci }, 512094332d3Sopenharmony_ci }; 513094332d3Sopenharmony_ci 514094332d3Sopenharmony_ci std::vector<std::vector<int>> zorders = { 515094332d3Sopenharmony_ci { 3, 2, 1 }, { 1, 3, 2 }, { 3, 1, 2 }, { 1, 2, 3 }, { 2, 1, 3 }, { 2, 3, 1 }, 516094332d3Sopenharmony_ci }; 517094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 518094332d3Sopenharmony_ci 519094332d3Sopenharmony_ci for (const auto& zorderList : zorders) { 520094332d3Sopenharmony_ci // adjust the zorder 521094332d3Sopenharmony_ci for (uint32_t i = 0; i < zorderList.size(); i++) { 522094332d3Sopenharmony_ci settings[i].zorder = zorderList[i]; 523094332d3Sopenharmony_ci layers[i]->SetZorder(zorderList[i]); 524094332d3Sopenharmony_ci } 525094332d3Sopenharmony_ci std::vector<LayerSettings> tempSettings = settings; 526094332d3Sopenharmony_ci std::sort(tempSettings.begin(), tempSettings.end(), 527094332d3Sopenharmony_ci [=](const auto& l, auto const & r) { return l.zorder < r.zorder; }); 528094332d3Sopenharmony_ci // present and check 529094332d3Sopenharmony_ci PresentAndCheck(tempSettings); 530094332d3Sopenharmony_ci } 531094332d3Sopenharmony_ci HdiTestDevice::GetInstance().Clear(); 532094332d3Sopenharmony_ci} 533094332d3Sopenharmony_ci 534094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerPreMulti, TestSize.Level1) 535094332d3Sopenharmony_ci{ 536094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 537094332d3Sopenharmony_ci { 538094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 539094332d3Sopenharmony_ci .color = GREEN 540094332d3Sopenharmony_ci }, 541094332d3Sopenharmony_ci }; 542094332d3Sopenharmony_ci 543094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 544094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 545094332d3Sopenharmony_ci PrepareAndCommit(); 546094332d3Sopenharmony_ci 547094332d3Sopenharmony_ci auto layer = layers[0]; 548094332d3Sopenharmony_ci bool preMul = true; 549094332d3Sopenharmony_ci auto ret = g_composerDevice->SetLayerPreMulti(g_displayIds[0], layer->GetId(), preMul); 550094332d3Sopenharmony_ci 551094332d3Sopenharmony_ci PrepareAndCommit(); 552094332d3Sopenharmony_ci HdiTestDevice::GetInstance().Clear(); 553094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 554094332d3Sopenharmony_ci 555094332d3Sopenharmony_ci DestroyLayer(layer); 556094332d3Sopenharmony_ci} 557094332d3Sopenharmony_ci 558094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerAlpha, TestSize.Level1) 559094332d3Sopenharmony_ci{ 560094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 561094332d3Sopenharmony_ci { 562094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 563094332d3Sopenharmony_ci .color = GREEN 564094332d3Sopenharmony_ci }, 565094332d3Sopenharmony_ci { 566094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 567094332d3Sopenharmony_ci .color = RED 568094332d3Sopenharmony_ci }, 569094332d3Sopenharmony_ci }; 570094332d3Sopenharmony_ci 571094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 572094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 573094332d3Sopenharmony_ci 574094332d3Sopenharmony_ci auto layer = layers[1]; 575094332d3Sopenharmony_ci LayerAlpha alpha = { 0 }; 576094332d3Sopenharmony_ci alpha.enGlobalAlpha = true; 577094332d3Sopenharmony_ci alpha.enPixelAlpha = true; 578094332d3Sopenharmony_ci alpha.gAlpha = 0; 579094332d3Sopenharmony_ci alpha.alpha0 = 0; 580094332d3Sopenharmony_ci alpha.alpha1 = 0; 581094332d3Sopenharmony_ci layer->SetAlpha(alpha); 582094332d3Sopenharmony_ci 583094332d3Sopenharmony_ci PrepareAndCommit(); 584094332d3Sopenharmony_ci HdiTestDevice::GetInstance().Clear(); 585094332d3Sopenharmony_ci 586094332d3Sopenharmony_ci DestroyLayer(layer); 587094332d3Sopenharmony_ci} 588094332d3Sopenharmony_ci 589094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerRegion, TestSize.Level1) 590094332d3Sopenharmony_ci{ 591094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 592094332d3Sopenharmony_ci {.rectRatio = {0, 0, 1.0f, 1.0f}, .color = GREEN, .alpha = 0xFF} 593094332d3Sopenharmony_ci }; 594094332d3Sopenharmony_ci 595094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 596094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 597094332d3Sopenharmony_ci 598094332d3Sopenharmony_ci const int32_t WIDTH = 100; 599094332d3Sopenharmony_ci const int32_t HEIGHT = 100; 600094332d3Sopenharmony_ci auto layer = layers[0]; 601094332d3Sopenharmony_ci IRect rect = {0, 0, WIDTH, HEIGHT}; 602094332d3Sopenharmony_ci auto ret = g_composerDevice->SetLayerRegion(g_displayIds[0], layer->GetId(), rect); 603094332d3Sopenharmony_ci 604094332d3Sopenharmony_ci PrepareAndCommit(); 605094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 606094332d3Sopenharmony_ci 607094332d3Sopenharmony_ci DestroyLayer(layer); 608094332d3Sopenharmony_ci} 609094332d3Sopenharmony_ci 610094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerDirtyRegion, TestSize.Level1) 611094332d3Sopenharmony_ci{ 612094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 613094332d3Sopenharmony_ci { 614094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 615094332d3Sopenharmony_ci .color = BLUE 616094332d3Sopenharmony_ci } 617094332d3Sopenharmony_ci }; 618094332d3Sopenharmony_ci 619094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 620094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 621094332d3Sopenharmony_ci 622094332d3Sopenharmony_ci auto layer = layers[0]; 623094332d3Sopenharmony_ci 624094332d3Sopenharmony_ci const int32_t WIDTH = 100; 625094332d3Sopenharmony_ci const int32_t HEIGHT = 100; 626094332d3Sopenharmony_ci IRect rect = {0, 0, WIDTH, HEIGHT}; 627094332d3Sopenharmony_ci std::vector<IRect> vRects; 628094332d3Sopenharmony_ci vRects.push_back(rect); 629094332d3Sopenharmony_ci auto ret = g_composerDevice->SetLayerDirtyRegion(g_displayIds[0], layer->GetId(), vRects); 630094332d3Sopenharmony_ci 631094332d3Sopenharmony_ci PrepareAndCommit(); 632094332d3Sopenharmony_ci HdiTestDevice::GetInstance().Clear(); 633094332d3Sopenharmony_ci 634094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 635094332d3Sopenharmony_ci 636094332d3Sopenharmony_ci DestroyLayer(layer); 637094332d3Sopenharmony_ci} 638094332d3Sopenharmony_ci 639094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerTransformMode, TestSize.Level1) 640094332d3Sopenharmony_ci{ 641094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 642094332d3Sopenharmony_ci { 643094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 644094332d3Sopenharmony_ci .color = RED 645094332d3Sopenharmony_ci } 646094332d3Sopenharmony_ci }; 647094332d3Sopenharmony_ci 648094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 649094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 650094332d3Sopenharmony_ci 651094332d3Sopenharmony_ci PrepareAndCommit(); 652094332d3Sopenharmony_ci 653094332d3Sopenharmony_ci auto layer = layers[0]; 654094332d3Sopenharmony_ci 655094332d3Sopenharmony_ci TransformType type = TransformType::ROTATE_90; 656094332d3Sopenharmony_ci auto ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type); 657094332d3Sopenharmony_ci PrepareAndCommit(); 658094332d3Sopenharmony_ci 659094332d3Sopenharmony_ci type = TransformType::ROTATE_180; 660094332d3Sopenharmony_ci ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type); 661094332d3Sopenharmony_ci PrepareAndCommit(); 662094332d3Sopenharmony_ci 663094332d3Sopenharmony_ci type = TransformType::ROTATE_270; 664094332d3Sopenharmony_ci ret = g_composerDevice->SetLayerTransformMode(g_displayIds[0], layer->GetId(), type); 665094332d3Sopenharmony_ci PrepareAndCommit(); 666094332d3Sopenharmony_ci 667094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 668094332d3Sopenharmony_ci 669094332d3Sopenharmony_ci DestroyLayer(layer); 670094332d3Sopenharmony_ci} 671094332d3Sopenharmony_ci 672094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerVisibleRegion, TestSize.Level1) 673094332d3Sopenharmony_ci{ 674094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 675094332d3Sopenharmony_ci { 676094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 677094332d3Sopenharmony_ci .color = BLUE 678094332d3Sopenharmony_ci } 679094332d3Sopenharmony_ci }; 680094332d3Sopenharmony_ci 681094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 682094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 683094332d3Sopenharmony_ci PrepareAndCommit(); 684094332d3Sopenharmony_ci auto layer = layers[0]; 685094332d3Sopenharmony_ci 686094332d3Sopenharmony_ci const int32_t WIDTH = 500; 687094332d3Sopenharmony_ci const int32_t HEIGHT = 500; 688094332d3Sopenharmony_ci IRect region = {0, 0, WIDTH, HEIGHT}; 689094332d3Sopenharmony_ci std::vector<IRect> regions = {}; 690094332d3Sopenharmony_ci regions.push_back(region); 691094332d3Sopenharmony_ci auto ret = g_composerDevice->SetLayerVisibleRegion(g_displayIds[0], layer->GetId(), regions); 692094332d3Sopenharmony_ci PrepareAndCommit(); 693094332d3Sopenharmony_ci 694094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 695094332d3Sopenharmony_ci 696094332d3Sopenharmony_ci DestroyLayer(layer); 697094332d3Sopenharmony_ci} 698094332d3Sopenharmony_ci 699094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerBuffer, TestSize.Level1) 700094332d3Sopenharmony_ci{ 701094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 702094332d3Sopenharmony_ci { 703094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 704094332d3Sopenharmony_ci .color = GREEN 705094332d3Sopenharmony_ci } 706094332d3Sopenharmony_ci }; 707094332d3Sopenharmony_ci 708094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 709094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 710094332d3Sopenharmony_ci 711094332d3Sopenharmony_ci auto layer = layers[0]; 712094332d3Sopenharmony_ci 713094332d3Sopenharmony_ci auto graphicBuffer = layer->AcquireBackBuffer(); 714094332d3Sopenharmony_ci int32_t ret = graphicBuffer->SetGraphicBuffer([&](const BufferHandle* buffer, uint32_t seqNo) -> int32_t { 715094332d3Sopenharmony_ci std::vector<uint32_t> deletingList; 716094332d3Sopenharmony_ci int32_t result = g_composerDevice->SetLayerBuffer(g_displayIds[0], layer->GetId(), buffer, seqNo, -1, 717094332d3Sopenharmony_ci deletingList); 718094332d3Sopenharmony_ci return result; 719094332d3Sopenharmony_ci }); 720094332d3Sopenharmony_ci PrepareAndCommit(); 721094332d3Sopenharmony_ci 722094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 723094332d3Sopenharmony_ci 724094332d3Sopenharmony_ci DestroyLayer(layer); 725094332d3Sopenharmony_ci} 726094332d3Sopenharmony_ci 727094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerCompositionType, TestSize.Level1) 728094332d3Sopenharmony_ci{ 729094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 730094332d3Sopenharmony_ci { 731094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 732094332d3Sopenharmony_ci .color = BLUE 733094332d3Sopenharmony_ci } 734094332d3Sopenharmony_ci }; 735094332d3Sopenharmony_ci 736094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 737094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 738094332d3Sopenharmony_ci 739094332d3Sopenharmony_ci auto layer = layers[0]; 740094332d3Sopenharmony_ci 741094332d3Sopenharmony_ci Composer::V1_0::CompositionType type = Composer::V1_0::CompositionType::COMPOSITION_CLIENT; 742094332d3Sopenharmony_ci auto ret = g_composerDevice->SetLayerCompositionType(g_displayIds[0], layer->GetId(), type); 743094332d3Sopenharmony_ci 744094332d3Sopenharmony_ci PrepareAndCommit(); 745094332d3Sopenharmony_ci 746094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 747094332d3Sopenharmony_ci 748094332d3Sopenharmony_ci DestroyLayer(layer); 749094332d3Sopenharmony_ci} 750094332d3Sopenharmony_ci 751094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerBlendType, TestSize.Level1) 752094332d3Sopenharmony_ci{ 753094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 754094332d3Sopenharmony_ci { 755094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 756094332d3Sopenharmony_ci .color = GREEN 757094332d3Sopenharmony_ci } 758094332d3Sopenharmony_ci }; 759094332d3Sopenharmony_ci 760094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 761094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 762094332d3Sopenharmony_ci 763094332d3Sopenharmony_ci auto layer = layers[0]; 764094332d3Sopenharmony_ci 765094332d3Sopenharmony_ci BlendType type = BlendType::BLEND_NONE; 766094332d3Sopenharmony_ci auto ret = g_composerDevice->SetLayerBlendType(g_displayIds[0], layer->GetId(), type); 767094332d3Sopenharmony_ci 768094332d3Sopenharmony_ci PrepareAndCommit(); 769094332d3Sopenharmony_ci 770094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 771094332d3Sopenharmony_ci 772094332d3Sopenharmony_ci DestroyLayer(layer); 773094332d3Sopenharmony_ci} 774094332d3Sopenharmony_ci 775094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerMaskInfo, TestSize.Level1) 776094332d3Sopenharmony_ci{ 777094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 778094332d3Sopenharmony_ci { 779094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 780094332d3Sopenharmony_ci .color = GREEN 781094332d3Sopenharmony_ci } 782094332d3Sopenharmony_ci }; 783094332d3Sopenharmony_ci 784094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 785094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 786094332d3Sopenharmony_ci 787094332d3Sopenharmony_ci auto layer = layers[0]; 788094332d3Sopenharmony_ci 789094332d3Sopenharmony_ci MaskInfo maskInfo = MaskInfo::LAYER_HBM_SYNC; 790094332d3Sopenharmony_ci auto ret = g_composerDevice->SetLayerMaskInfo(g_displayIds[0], layer->GetId(), maskInfo); 791094332d3Sopenharmony_ci 792094332d3Sopenharmony_ci HdiTestDevice::GetInstance().Clear(); 793094332d3Sopenharmony_ci 794094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 795094332d3Sopenharmony_ci} 796094332d3Sopenharmony_ci 797094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerColor, TestSize.Level1) 798094332d3Sopenharmony_ci{ 799094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 800094332d3Sopenharmony_ci { 801094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 802094332d3Sopenharmony_ci .color = GREEN 803094332d3Sopenharmony_ci } 804094332d3Sopenharmony_ci }; 805094332d3Sopenharmony_ci 806094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 807094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 808094332d3Sopenharmony_ci 809094332d3Sopenharmony_ci auto layer = layers[0]; 810094332d3Sopenharmony_ci const uint32_t COLOR_R = 155; 811094332d3Sopenharmony_ci const uint32_t COLOR_G = 224; 812094332d3Sopenharmony_ci const uint32_t COLOR_B = 88; 813094332d3Sopenharmony_ci const uint32_t COLOR_A = 128; 814094332d3Sopenharmony_ci 815094332d3Sopenharmony_ci LayerColor layerColor = { 816094332d3Sopenharmony_ci .r = COLOR_R, 817094332d3Sopenharmony_ci .g = COLOR_G, 818094332d3Sopenharmony_ci .b = COLOR_B, 819094332d3Sopenharmony_ci .a = COLOR_A 820094332d3Sopenharmony_ci }; 821094332d3Sopenharmony_ci 822094332d3Sopenharmony_ci auto ret = g_composerDevice->SetLayerColor(g_displayIds[0], layer->GetId(), layerColor); 823094332d3Sopenharmony_ci 824094332d3Sopenharmony_ci PrepareAndCommit(); 825094332d3Sopenharmony_ci 826094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 827094332d3Sopenharmony_ci 828094332d3Sopenharmony_ci DestroyLayer(layer); 829094332d3Sopenharmony_ci} 830094332d3Sopenharmony_ci 831094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_DestroyLayer, TestSize.Level1) 832094332d3Sopenharmony_ci{ 833094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 834094332d3Sopenharmony_ci { 835094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 836094332d3Sopenharmony_ci .color = PURPLE 837094332d3Sopenharmony_ci } 838094332d3Sopenharmony_ci }; 839094332d3Sopenharmony_ci 840094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 841094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 842094332d3Sopenharmony_ci auto layer = layers[0]; 843094332d3Sopenharmony_ci PrepareAndCommit(); 844094332d3Sopenharmony_ci 845094332d3Sopenharmony_ci sleep(1); 846094332d3Sopenharmony_ci auto ret = g_composerDevice->DestroyLayer(g_displayIds[0], layer->GetId()); 847094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 848094332d3Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_CONT_100)); 849094332d3Sopenharmony_ci} 850094332d3Sopenharmony_ci 851094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_RegDisplayVBlankCallback, TestSize.Level1) 852094332d3Sopenharmony_ci{ 853094332d3Sopenharmony_ci int ret; 854094332d3Sopenharmony_ci DISPLAY_TEST_LOGD(); 855094332d3Sopenharmony_ci std::shared_ptr<HdiTestDisplay> display = HdiTestDevice::GetInstance().GetFirstDisplay(); 856094332d3Sopenharmony_ci ASSERT_TRUE(display != nullptr) << "get display failed"; 857094332d3Sopenharmony_ci ret = display->RegDisplayVBlankCallback(TestVBlankCallback, nullptr); 858094332d3Sopenharmony_ci ASSERT_TRUE(ret == DISPLAY_SUCCESS) << "RegDisplayVBlankCallback failed"; 859094332d3Sopenharmony_ci ret = display->SetDisplayVsyncEnabled(true); 860094332d3Sopenharmony_ci ASSERT_TRUE(ret == DISPLAY_SUCCESS) << "SetDisplayVsyncEnabled failed"; 861094332d3Sopenharmony_ci 862094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 863094332d3Sopenharmony_ci { 864094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 865094332d3Sopenharmony_ci .color = PINK 866094332d3Sopenharmony_ci }, 867094332d3Sopenharmony_ci }; 868094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 869094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 870094332d3Sopenharmony_ci VblankCtr::GetInstance().hasVblank_ = false; 871094332d3Sopenharmony_ci PrepareAndCommit(); 872094332d3Sopenharmony_ci ret = VblankCtr::GetInstance().WaitVblank(SLEEP_CONT_100); // 100ms 873094332d3Sopenharmony_ci ASSERT_TRUE(ret == DISPLAY_SUCCESS) << "WaitVblank timeout"; 874094332d3Sopenharmony_ci ret = display->SetDisplayVsyncEnabled(false); 875094332d3Sopenharmony_ci ASSERT_TRUE(ret == DISPLAY_SUCCESS) << "SetDisplayVsyncEnabled failed"; 876094332d3Sopenharmony_ci usleep(SLEEP_CONT_100 * SLEEP_CONT_2000); // wait for 100ms avoid the last vsync. 877094332d3Sopenharmony_ci VblankCtr::GetInstance().hasVblank_ = false; 878094332d3Sopenharmony_ci ret = VblankCtr::GetInstance().WaitVblank(SLEEP_CONT_100); // 100ms 879094332d3Sopenharmony_ci ASSERT_TRUE(ret != DISPLAY_SUCCESS) << "vblank do not disable"; 880094332d3Sopenharmony_ci 881094332d3Sopenharmony_ci DestroyLayer(layers[0]); 882094332d3Sopenharmony_ci} 883094332d3Sopenharmony_ci 884094332d3Sopenharmony_civoid DeviceTest::OnMode(uint32_t modeId, uint64_t vBlankPeriod, void* data) 885094332d3Sopenharmony_ci{ 886094332d3Sopenharmony_ci g_isOnModeCalled = true; 887094332d3Sopenharmony_ci} 888094332d3Sopenharmony_ci 889094332d3Sopenharmony_civoid DeviceTest::OnSeamlessChange(uint32_t devId, void* data) 890094332d3Sopenharmony_ci{ 891094332d3Sopenharmony_ci g_isOnSeamlessChangeCalled = true; 892094332d3Sopenharmony_ci} 893094332d3Sopenharmony_ci 894094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplaySupportedModesExt, TestSize.Level1) 895094332d3Sopenharmony_ci{ 896094332d3Sopenharmony_ci std::vector<DisplayModeInfoExt> modes; 897094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplaySupportedModesExt(g_displayIds[0], modes); 898094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 899094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("GetDisplaySupportedModesExt not support"); 900094332d3Sopenharmony_ci return; 901094332d3Sopenharmony_ci } 902094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 903094332d3Sopenharmony_ci} 904094332d3Sopenharmony_ci 905094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetDisplayModeAsync, TestSize.Level1) 906094332d3Sopenharmony_ci{ 907094332d3Sopenharmony_ci g_isOnModeCalled = false; 908094332d3Sopenharmony_ci std::vector<DisplayModeInfo> oldModes; 909094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 910094332d3Sopenharmony_ci { 911094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 912094332d3Sopenharmony_ci .color = RED 913094332d3Sopenharmony_ci } 914094332d3Sopenharmony_ci }; 915094332d3Sopenharmony_ci 916094332d3Sopenharmony_ci // 先注册VBlankCallback 917094332d3Sopenharmony_ci auto ret = g_composerDevice->RegDisplayVBlankCallback(g_displayIds[0], TestVBlankCallback, nullptr); 918094332d3Sopenharmony_ci ASSERT_TRUE(ret == DISPLAY_SUCCESS) << "RegDisplayVBlankCallback failed"; 919094332d3Sopenharmony_ci 920094332d3Sopenharmony_ci ret = g_composerDevice->GetDisplaySupportedModes(g_displayIds[0], oldModes); 921094332d3Sopenharmony_ci ASSERT_EQ(DISPLAY_SUCCESS, ret); 922094332d3Sopenharmony_ci ASSERT_EQ(oldModes.size() > 0, true); 923094332d3Sopenharmony_ci 924094332d3Sopenharmony_ci uint32_t modeid = oldModes[0].id; 925094332d3Sopenharmony_ci ret = g_composerDevice->SetDisplayModeAsync(g_displayIds[0], modeid, OnMode); 926094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 927094332d3Sopenharmony_ci return; 928094332d3Sopenharmony_ci } 929094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 930094332d3Sopenharmony_ci if (ret == DISPLAY_SUCCESS) { 931094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 932094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 933094332d3Sopenharmony_ci g_threadCtrl = false; 934094332d3Sopenharmony_ci std::thread commitThread(LoopCommit); 935094332d3Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_CONT_100)); 936094332d3Sopenharmony_ci g_threadCtrl = true; 937094332d3Sopenharmony_ci commitThread.join(); 938094332d3Sopenharmony_ci ASSERT_EQ(g_isOnModeCalled, true); 939094332d3Sopenharmony_ci 940094332d3Sopenharmony_ci DestroyLayer(layers[0]); 941094332d3Sopenharmony_ci } 942094332d3Sopenharmony_ci} 943094332d3Sopenharmony_ci 944094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplayVBlankPeriod, TestSize.Level1) 945094332d3Sopenharmony_ci{ 946094332d3Sopenharmony_ci uint64_t period = 0; 947094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplayVBlankPeriod(g_displayIds[0], period); 948094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 949094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("GetDisplayVBlankPeriod not support"); 950094332d3Sopenharmony_ci return; 951094332d3Sopenharmony_ci } 952094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 953094332d3Sopenharmony_ci EXPECT_EQ(period != 0, true); 954094332d3Sopenharmony_ci} 955094332d3Sopenharmony_ci 956094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_RegSeamlessChangeCallback, TestSize.Level1) 957094332d3Sopenharmony_ci{ 958094332d3Sopenharmony_ci g_isOnSeamlessChangeCalled = false; 959094332d3Sopenharmony_ci auto ret = g_composerDevice->RegSeamlessChangeCallback(OnSeamlessChange, nullptr); 960094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 961094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("RegSeamlessChangeCallback not support"); 962094332d3Sopenharmony_ci return; 963094332d3Sopenharmony_ci } 964094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 965094332d3Sopenharmony_ci if (ret == DISPLAY_SUCCESS) { 966094332d3Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(5000)); 967094332d3Sopenharmony_ci ASSERT_EQ(g_isOnSeamlessChangeCalled, true); 968094332d3Sopenharmony_ci } 969094332d3Sopenharmony_ci} 970094332d3Sopenharmony_ci 971094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetLayerPerFrameParameter, TestSize.Level1) 972094332d3Sopenharmony_ci{ 973094332d3Sopenharmony_ci std::vector<LayerSettings> settings = { 974094332d3Sopenharmony_ci { 975094332d3Sopenharmony_ci .rectRatio = { 0, 0, 1.0f, 1.0f }, 976094332d3Sopenharmony_ci .color = GREEN 977094332d3Sopenharmony_ci }, 978094332d3Sopenharmony_ci }; 979094332d3Sopenharmony_ci 980094332d3Sopenharmony_ci std::vector<std::shared_ptr<HdiTestLayer>> layers = CreateLayers(settings); 981094332d3Sopenharmony_ci ASSERT_TRUE((layers.size() > 0)); 982094332d3Sopenharmony_ci auto layer = layers[0]; 983094332d3Sopenharmony_ci std::vector<std::string> ValidKeys = { "FilmFilter", "ArsrDoEnhance", "SDRBrightnessRatio", "BrightnessNit", 984094332d3Sopenharmony_ci "ViewGroupHasValidAlpha", "SourceCropTuning" }; 985094332d3Sopenharmony_ci std::string key; 986094332d3Sopenharmony_ci std::vector<int8_t> value = { 1 }; 987094332d3Sopenharmony_ci key = "NotSupportKey"; 988094332d3Sopenharmony_ci auto ret = g_composerDevice->SetLayerPerFrameParameter(g_displayIds[0], layer->GetId(), key, value); 989094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 990094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("SetLayerPerFrameParameter not support"); 991094332d3Sopenharmony_ci return; 992094332d3Sopenharmony_ci } 993094332d3Sopenharmony_ci ASSERT_EQ(ret, -1) << "key not support, ret:" << ret; 994094332d3Sopenharmony_ci key = ValidKeys[0]; 995094332d3Sopenharmony_ci ret = g_composerDevice->SetLayerPerFrameParameter(g_displayIds[0], layer->GetId(), key, value); 996094332d3Sopenharmony_ci ASSERT_EQ(ret, 0) << "key support, ret:" << ret; 997094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 998094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("SetLayerPerFrameParameter not support"); 999094332d3Sopenharmony_ci return; 1000094332d3Sopenharmony_ci } 1001094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 1002094332d3Sopenharmony_ci} 1003094332d3Sopenharmony_ci 1004094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetSupportedLayerPerFrameParameterKey, TestSize.Level1) 1005094332d3Sopenharmony_ci{ 1006094332d3Sopenharmony_ci std::vector<std::string> keys; 1007094332d3Sopenharmony_ci auto ret = g_composerDevice->GetSupportedLayerPerFrameParameterKey(keys); 1008094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 1009094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("GetSupportedLayerPerFrameParameterKey not support"); 1010094332d3Sopenharmony_ci return; 1011094332d3Sopenharmony_ci } 1012094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 1013094332d3Sopenharmony_ci} 1014094332d3Sopenharmony_ci 1015094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_SetDisplayOverlayResolution, TestSize.Level1) 1016094332d3Sopenharmony_ci{ 1017094332d3Sopenharmony_ci DisplayModeInfo mode = GetFirstDisplay()->GetCurrentMode(); 1018094332d3Sopenharmony_ci auto ret = g_composerDevice->SetDisplayOverlayResolution(g_displayIds[0], mode.width, mode.height); 1019094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 1020094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("SetDisplayOverlayResolution not support"); 1021094332d3Sopenharmony_ci return; 1022094332d3Sopenharmony_ci } 1023094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 1024094332d3Sopenharmony_ci} 1025094332d3Sopenharmony_ci 1026094332d3Sopenharmony_cistatic void TestRefreshCallback(uint32_t devId, void* data) 1027094332d3Sopenharmony_ci{ 1028094332d3Sopenharmony_ci} 1029094332d3Sopenharmony_ci 1030094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_RegRefreshCallback, TestSize.Level1) 1031094332d3Sopenharmony_ci{ 1032094332d3Sopenharmony_ci auto ret = g_composerDevice->RegRefreshCallback(TestRefreshCallback, nullptr); 1033094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 1034094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("RegRefreshCallback not support"); 1035094332d3Sopenharmony_ci return; 1036094332d3Sopenharmony_ci } 1037094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 1038094332d3Sopenharmony_ci} 1039094332d3Sopenharmony_ci 1040094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetDisplaySupportedColorGamuts, TestSize.Level1) 1041094332d3Sopenharmony_ci{ 1042094332d3Sopenharmony_ci std::vector<ColorGamut> gamuts; 1043094332d3Sopenharmony_ci auto ret = g_composerDevice->GetDisplaySupportedColorGamuts(g_displayIds[0], gamuts); 1044094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 1045094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("GetDisplaySupportedColorGamuts not support"); 1046094332d3Sopenharmony_ci return; 1047094332d3Sopenharmony_ci } 1048094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 1049094332d3Sopenharmony_ci} 1050094332d3Sopenharmony_ci 1051094332d3Sopenharmony_ciHWTEST_F(DeviceTest, test_GetHDRCapabilityInfos, TestSize.Level1) 1052094332d3Sopenharmony_ci{ 1053094332d3Sopenharmony_ci HDRCapability info = { 0 }; 1054094332d3Sopenharmony_ci auto ret = g_composerDevice->GetHDRCapabilityInfos(g_displayIds[0], info); 1055094332d3Sopenharmony_ci if (ret == DISPLAY_NOT_SUPPORT) { 1056094332d3Sopenharmony_ci DISPLAY_TEST_LOGD("GetHDRCapabilityInfos not support"); 1057094332d3Sopenharmony_ci return; 1058094332d3Sopenharmony_ci } 1059094332d3Sopenharmony_ci EXPECT_EQ(DISPLAY_SUCCESS, ret); 1060094332d3Sopenharmony_ci} 1061