1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <cstdint> 17 #include <gtest/gtest.h> 18 #include <hilog/log.h> 19 #include <memory> 20 #include <unistd.h> 21 #include <iostream> 22 23 #include "transaction/rs_interfaces.h" 24 25 #include "accesstoken_kit.h" 26 #include "nativetoken_kit.h" 27 #include "token_setproc.h" 28 29 using namespace testing::ext; 30 31 namespace OHOS { 32 namespace Rosen { 33 class RSVirtualScreenRefreshRateTest : public testing::Test { 34 public: 35 static constexpr HiviewDFX::HiLogLabel LOG_LABEL = { LOG_CORE, 0, "RSVirtualScreenRefreshRateTest" }; 36 SetUpTestCase()37 static void SetUpTestCase() 38 { 39 rsInterfaces = &(RSInterfaces::GetInstance()); 40 uint64_t tokenId; 41 const char* perms[1]; 42 perms[0] = "ohos.permission.CAPTURE_SCREEN"; 43 NativeTokenInfoParams infoInstance = { 44 .dcapsNum = 0, 45 .permsNum = 1, 46 .aclsNum = 0, 47 .dcaps = NULL, 48 .perms = perms, 49 .acls = NULL, 50 .processName = "foundation", 51 .aplStr = "system_basic", 52 }; 53 tokenId = GetAccessTokenId(&infoInstance); 54 SetSelfTokenID(tokenId); 55 OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); 56 } 57 TearDownTestCase()58 static void TearDownTestCase() 59 { 60 rsInterfaces = nullptr; 61 } 62 63 static inline RSInterfaces* rsInterfaces = nullptr; 64 }; 65 66 /* 67 * Function: SetVirtualScreenRefreshRate 68 * Type: Function 69 * Rank: Important(1) 70 * EnvConditions: N/A 71 * CaseDescription: 1. SetVirtualScreenRefreshRate UINT32_MAX 72 */ 73 HWTEST_F(RSVirtualScreenRefreshRateTest, SetVirtualScreenRefreshRate001, Function | SmallTest | Level1) 74 { 75 auto csurface = IConsumerSurface::Create(); 76 EXPECT_NE(csurface, nullptr); 77 auto producer = csurface->GetProducer(); 78 auto psurface = Surface::CreateSurfaceAsProducer(producer); 79 uint32_t defaultWidth = 720; // 720px 80 uint32_t defaultHeight = 1280; // 1280px 81 EXPECT_NE(psurface, nullptr); 82 83 ScreenId virtualScreenId = rsInterfaces->CreateVirtualScreen( 84 "virtualScreen01", defaultWidth, defaultHeight, psurface, INVALID_SCREEN_ID, -1); 85 EXPECT_NE(virtualScreenId, INVALID_SCREEN_ID); 86 87 uint32_t maxRefreshRate = UINT32_MAX; 88 uint32_t actualRefreshRate = 0; 89 std::cout << "Set virtualScreenId:" << virtualScreenId << ", maxRefreshRate:" << maxRefreshRate << std::endl; 90 int32_t ret = rsInterfaces->SetVirtualScreenRefreshRate(virtualScreenId, maxRefreshRate, actualRefreshRate); 91 EXPECT_EQ(actualRefreshRate, 120); 92 EXPECT_EQ(ret, StatusCode::SUCCESS); 93 94 // recover 95 ret = rsInterfaces->SetVirtualScreenRefreshRate(virtualScreenId, 60, actualRefreshRate); // 60hz 96 EXPECT_EQ(actualRefreshRate, 60); // 60hz 97 EXPECT_EQ(ret, StatusCode::SUCCESS); 98 } 99 100 /* 101 * Function: SetVirtualScreenRefreshRate 102 * Type: Function 103 * Rank: Important(1) 104 * EnvConditions: N/A 105 * CaseDescription: 1. SetVirtualScreenRefreshRate 0 106 */ 107 HWTEST_F(RSVirtualScreenRefreshRateTest, SetVirtualScreenRefreshRate002, Function | SmallTest | Level1) 108 { 109 auto csurface = IConsumerSurface::Create(); 110 EXPECT_NE(csurface, nullptr); 111 auto producer = csurface->GetProducer(); 112 auto psurface = Surface::CreateSurfaceAsProducer(producer); 113 uint32_t defaultWidth = 720; // 720px 114 uint32_t defaultHeight = 1280; // 1280px 115 EXPECT_NE(psurface, nullptr); 116 117 ScreenId virtualScreenId = rsInterfaces->CreateVirtualScreen( 118 "virtualScreen01", defaultWidth, defaultHeight, psurface, INVALID_SCREEN_ID, -1); 119 EXPECT_NE(virtualScreenId, INVALID_SCREEN_ID); 120 121 uint32_t maxRefreshRate = 0; 122 uint32_t actualRefreshRate = 0; 123 std::cout << "Set virtualScreenId:" << virtualScreenId << ", maxRefreshRate:" << maxRefreshRate << std::endl; 124 int32_t ret = rsInterfaces->SetVirtualScreenRefreshRate(virtualScreenId, maxRefreshRate, actualRefreshRate); 125 EXPECT_NE(ret, StatusCode::SUCCESS); 126 127 // recover 128 ret = rsInterfaces->SetVirtualScreenRefreshRate(virtualScreenId, 60, actualRefreshRate); // 60hz 129 EXPECT_EQ(ret, StatusCode::SUCCESS); 130 } 131 132 /* 133 * Function: SetVirtualScreenRefreshRate 134 * Type: Function 135 * Rank: Important(1) 136 * EnvConditions: N/A 137 * CaseDescription: 1. SetVirtualScreenRefreshRate 61 138 */ 139 HWTEST_F(RSVirtualScreenRefreshRateTest, SetVirtualScreenRefreshRate003, Function | SmallTest | Level1) 140 { 141 auto csurface = IConsumerSurface::Create(); 142 EXPECT_NE(csurface, nullptr); 143 auto producer = csurface->GetProducer(); 144 auto psurface = Surface::CreateSurfaceAsProducer(producer); 145 uint32_t defaultWidth = 720; // 720px 146 uint32_t defaultHeight = 1280; // 1280px 147 EXPECT_NE(psurface, nullptr); 148 149 ScreenId virtualScreenId = rsInterfaces->CreateVirtualScreen( 150 "virtualScreen01", defaultWidth, defaultHeight, psurface, INVALID_SCREEN_ID, -1); 151 EXPECT_NE(virtualScreenId, INVALID_SCREEN_ID); 152 153 uint32_t maxRefreshRate = 61; // 61hz 154 uint32_t actualRefreshRate = 0; 155 std::cout << "Set virtualScreenId:" << virtualScreenId << ", maxRefreshRate:" << maxRefreshRate << std::endl; 156 int32_t ret = rsInterfaces->SetVirtualScreenRefreshRate(virtualScreenId, maxRefreshRate, actualRefreshRate); 157 EXPECT_EQ(actualRefreshRate, 61); 158 EXPECT_EQ(ret, StatusCode::SUCCESS); 159 160 // recover 161 ret = rsInterfaces->SetVirtualScreenRefreshRate(virtualScreenId, 60, actualRefreshRate); // 60hz 162 EXPECT_EQ(actualRefreshRate, 60); // 60hz 163 EXPECT_EQ(ret, StatusCode::SUCCESS); 164 } 165 166 /* 167 * Function: SetVirtualScreenRefreshRate 168 * Type: Function 169 * Rank: Important(1) 170 * EnvConditions: N/A 171 * CaseDescription: 1. SetVirtualScreenRefreshRate 1~60 172 */ 173 HWTEST_F(RSVirtualScreenRefreshRateTest, SetVirtualScreenRefreshRate004, Function | SmallTest | Level1) 174 { 175 auto csurface = IConsumerSurface::Create(); 176 EXPECT_NE(csurface, nullptr); 177 auto producer = csurface->GetProducer(); 178 auto psurface = Surface::CreateSurfaceAsProducer(producer); 179 uint32_t defaultWidth = 720; // 720px 180 uint32_t defaultHeight = 1280; // 1280px 181 EXPECT_NE(psurface, nullptr); 182 183 ScreenId virtualScreenId = rsInterfaces->CreateVirtualScreen( 184 "virtualScreen01", defaultWidth, defaultHeight, psurface, INVALID_SCREEN_ID, -1); 185 EXPECT_NE(virtualScreenId, INVALID_SCREEN_ID); 186 187 for (uint32_t maxRefreshRate = 1; maxRefreshRate <= 60; maxRefreshRate++) { // 60hz 188 uint32_t actualRefreshRate = 0; 189 std::cout << "Set virtualScreenId:" << virtualScreenId << ", maxRefreshRate:" << maxRefreshRate << std::endl; 190 int32_t ret = rsInterfaces->SetVirtualScreenRefreshRate(virtualScreenId, maxRefreshRate, actualRefreshRate); 191 EXPECT_EQ(ret, StatusCode::SUCCESS); 192 EXPECT_EQ(actualRefreshRate, maxRefreshRate); 193 } 194 195 // recover 196 uint32_t actualRefreshRate = 0; 197 int32_t ret = rsInterfaces->SetVirtualScreenRefreshRate(virtualScreenId, 60, actualRefreshRate); // 60hz 198 EXPECT_EQ(actualRefreshRate, 60); // 60hz 199 EXPECT_EQ(ret, StatusCode::SUCCESS); 200 } 201 202 /* 203 * Function: SetVirtualScreenRefreshRate 204 * Type: Function 205 * Rank: Important(1) 206 * EnvConditions: N/A 207 * CaseDescription: 1. SetVirtualScreenRefreshRate with physical screen id 208 */ 209 HWTEST_F(RSVirtualScreenRefreshRateTest, SetVirtualScreenRefreshRate005, Function | SmallTest | Level1) 210 { 211 ScreenId defaultScreenId = rsInterfaces->GetDefaultScreenId(); 212 EXPECT_NE(defaultScreenId, INVALID_SCREEN_ID); 213 uint32_t maxRefreshRate = 30; // 30hz 214 uint32_t actualRefreshRate = 0; 215 std::cout << "Set defaultScreenId:" << defaultScreenId << ", maxRefreshRate:" << maxRefreshRate << std::endl; 216 int32_t ret = rsInterfaces->SetVirtualScreenRefreshRate(defaultScreenId, maxRefreshRate, actualRefreshRate); 217 EXPECT_EQ(ret, StatusCode::SCREEN_NOT_FOUND); 218 } 219 220 /* 221 * Function: SetVirtualScreenRefreshRate 222 * Type: Function 223 * Rank: Important(1) 224 * EnvConditions: N/A 225 * CaseDescription: 1. SetVirtualScreenRefreshRate UINT32_MAX+1 226 */ 227 HWTEST_F(RSVirtualScreenRefreshRateTest, SetVirtualScreenRefreshRate006, Function | SmallTest | Level1) 228 { 229 auto csurface = IConsumerSurface::Create(); 230 auto producer = csurface->GetProducer(); 231 auto psurface = Surface::CreateSurfaceAsProducer(producer); 232 uint32_t defaultWidth = 720; // 720px 233 uint32_t defaultHeight = 1280; // 1280px 234 235 ScreenId virtualScreenId = rsInterfaces->CreateVirtualScreen( 236 "virtualScreen01", defaultWidth, defaultHeight, psurface, INVALID_SCREEN_ID, -1); 237 EXPECT_NE(virtualScreenId, INVALID_SCREEN_ID); 238 239 uint32_t maxRefreshRate = UINT32_MAX + 1; 240 uint32_t actualRefreshRate = 0; 241 std::cout << "Set virtualScreenId:" << virtualScreenId << ", maxRefreshRate:" << maxRefreshRate << std::endl; 242 int32_t ret = rsInterfaces->SetVirtualScreenRefreshRate(virtualScreenId, maxRefreshRate, actualRefreshRate); 243 EXPECT_EQ(actualRefreshRate, 0); 244 EXPECT_NE(ret, StatusCode::SUCCESS); 245 246 // recover 247 ret = rsInterfaces->SetVirtualScreenRefreshRate(virtualScreenId, 60, actualRefreshRate); // 60hz 248 EXPECT_EQ(actualRefreshRate, 60); // 60hz 249 EXPECT_EQ(ret, StatusCode::SUCCESS); 250 } 251 } // namespace Rosen 252 } // namespace OHOS 253