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