• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 "vsync_generator.h"
17 #include "vsync_controller.h"
18 #include "vsync_distributor.h"
19 #include "vsync_receiver.h"
20 #include "vsync_iconnection_token.h"
21 #include <event_handler.h>
22 
23 #include <gtest/gtest.h>
24 
25 using namespace testing;
26 using namespace testing::ext;
27 
28 namespace OHOS {
29 namespace Rosen {
SystemTime()30 static int64_t SystemTime()
31 {
32     timespec t = {};
33     clock_gettime(CLOCK_MONOTONIC, &t);
34     return int64_t(t.tv_sec) * 1000000000LL + t.tv_nsec; // 1000000000ns == 1s
35 }
36 
37 class VSyncGeneratorTest : public testing::Test {
38 public:
39     static void SetUpTestCase();
40     static void TearDownTestCase();
OnVSync(int64_t now,void * data)41     static inline void OnVSync(int64_t now, void* data) {}
42 
43     static inline sptr<VSyncGenerator> vsyncGenerator_;
44     static constexpr const int32_t WAIT_SYSTEM_ABILITY_REPORT_DATA_SECONDS = 5;
45     static inline sptr<VSyncController> appController;
46     static inline sptr<VSyncController> rsController;
47     static inline sptr<VSyncDistributor> appDistributor;
48     static inline sptr<VSyncDistributor> rsDistributor;
49     static inline std::shared_ptr<VSyncReceiver> receiver;
50     static inline std::shared_ptr<AppExecFwk::EventRunner> runner_ = nullptr;
51     static inline std::shared_ptr<AppExecFwk::EventHandler> handler_ = nullptr;
52 };
53 
SetUpTestCase()54 void VSyncGeneratorTest::SetUpTestCase()
55 {
56     vsyncGenerator_ = CreateVSyncGenerator();
57     appController = new VSyncController(vsyncGenerator_, 0);
58     rsController = new VSyncController(vsyncGenerator_, 0);
59     appDistributor = new VSyncDistributor(appController, "app");
60     rsDistributor = new VSyncDistributor(rsController, "rs");
61     vsyncGenerator_->SetRSDistributor(rsDistributor);
62     vsyncGenerator_->SetAppDistributor(appDistributor);
63     sptr<VSyncIConnectionToken> token = new IRemoteStub<VSyncIConnectionToken>();
64     sptr<VSyncConnection> conn = new VSyncConnection(rsDistributor, "generator_test", token->AsObject());
65     rsDistributor->AddConnection(conn);
66     runner_ = AppExecFwk::EventRunner::Create(false);
67     handler_ = std::make_shared<AppExecFwk::EventHandler>(runner_);
68     receiver = std::make_shared<VSyncReceiver>(conn, token->AsObject(), handler_, "generator_test");
69     receiver->Init();
70 }
71 
TearDownTestCase()72 void VSyncGeneratorTest::TearDownTestCase()
73 {
74     sleep(WAIT_SYSTEM_ABILITY_REPORT_DATA_SECONDS);
75     vsyncGenerator_ = nullptr;
76     DestroyVSyncGenerator();
77     receiver->looper_->RemoveFileDescriptorListener(receiver->fd_);
78     receiver->looper_ = nullptr;
79     receiver->fd_ = -1;
80 }
81 
82 class VSyncGeneratorTestCallback : public VSyncGenerator::Callback {
83 public:
84     void OnVSyncEvent(int64_t now, int64_t period,
85         uint32_t refreshRate, VSyncMode vsyncMode, uint32_t vsyncMaxRefreshRate) override;
86     void OnPhaseOffsetChanged(int64_t phaseOffset) override;
87     void OnConnsRefreshRateChanged(const std::vector<std::pair<uint64_t, uint32_t>> &refreshRates) override;
88 };
89 
OnVSyncEvent(int64_t now,int64_t period,uint32_t refreshRate,VSyncMode vsyncMode,uint32_t vsyncMaxRefreshRate)90 void VSyncGeneratorTestCallback::OnVSyncEvent(int64_t now, int64_t period,
91     uint32_t refreshRate, VSyncMode vsyncMode, uint32_t vsyncMaxRefreshRate)
92 {
93 }
94 
OnPhaseOffsetChanged(int64_t phaseOffset)95 void VSyncGeneratorTestCallback::OnPhaseOffsetChanged(int64_t phaseOffset)
96 {
97 }
98 
OnConnsRefreshRateChanged(const std::vector<std::pair<uint64_t,uint32_t>> & refreshRates)99 void VSyncGeneratorTestCallback::OnConnsRefreshRateChanged(
100     const std::vector<std::pair<uint64_t, uint32_t>> &refreshRates)
101 {
102 }
103 
104 namespace {
105 /*
106 * Function: CheckAndUpdateReferenceTimeTest001
107 * Type: Function
108 * Rank: Important(2)
109 * EnvConditions: N/A
110 * CaseDescription: 1. Test CheckAndUpdateReferenceTime
111  */
112 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest001, Function | MediumTest| Level0)
113 {
114     ASSERT_EQ(vsyncGenerator_->CheckAndUpdateReferenceTime(-1, -1), VSYNC_ERROR_INVALID_ARGUMENTS);
115     // 2000000000ns
116     ASSERT_EQ(vsyncGenerator_->CheckAndUpdateReferenceTime(-1, 2000000000), VSYNC_ERROR_INVALID_ARGUMENTS);
117     ASSERT_EQ(vsyncGenerator_->CheckAndUpdateReferenceTime(8333333, -1), VSYNC_ERROR_INVALID_ARGUMENTS); // 8333333ns
118     // 8333333ns, 2000000000ns
119     ASSERT_EQ(vsyncGenerator_->CheckAndUpdateReferenceTime(8333333, 2000000000), VSYNC_ERROR_API_FAILED);
120 }
121 
122 /*
123 * Function: CheckAndUpdateReferenceTimeTest002
124 * Type: Function
125 * Rank: Important(2)
126 * EnvConditions: N/A
127 * CaseDescription: 1. Test CheckAndUpdateReferenceTime
128  */
129 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest002, Function | MediumTest| Level0)
130 {
131     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
132     ASSERT_EQ(ret, VSYNC_ERROR_OK);
133     vsyncGenerator_->SetPendingMode(16666667, 1000000000); // 16666667ns, 1000000000ns
134     ret = vsyncGenerator_->UpdateMode(8333333, 0, 1000000000); // 8333333ns, 1000000000ns
135     ASSERT_EQ(ret, VSYNC_ERROR_OK);
136     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
137     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
138     int64_t refreshRate = 120; // 120hz
139     int64_t rsVsyncCount = 0;
140     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
141         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
142     ASSERT_EQ(ret, VSYNC_ERROR_OK);
143     usleep(100000); // 100000us
144     ret = vsyncGenerator_->CheckAndUpdateReferenceTime(8333333, 2000000000); // 8333333ns, 2000000000ns
145     ASSERT_EQ(ret, VSYNC_ERROR_OK);
146 }
147 
148 /*
149 * Function: CheckAndUpdateReferenceTimeTest003
150 * Type: Function
151 * Rank: Important(2)
152 * EnvConditions: N/A
153 * CaseDescription: 1. Test CheckAndUpdateReferenceTime
154  */
155 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest003, Function | MediumTest| Level0)
156 {
157     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
158     ASSERT_EQ(ret, VSYNC_ERROR_OK);
159     vsyncGenerator_->SetPendingMode(8333333, 1000000000); // 8333333ns, 1000000000ns
160     ret = vsyncGenerator_->UpdateMode(8333333, 0, 1000000000); // 8333333ns, 1000000000ns
161     ASSERT_EQ(ret, VSYNC_ERROR_OK);
162     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
163     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
164     int64_t refreshRate = 60; // 60hz
165     int64_t rsVsyncCount = 0;
166     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
167         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
168     ASSERT_EQ(ret, VSYNC_ERROR_OK);
169     VSyncReceiver::FrameCallback fcb = {
170         .userData_ = this,
171         .callback_ = OnVSync,
172     };
173     ret = receiver->RequestNextVSync(fcb);
174     ASSERT_EQ(ret, VSYNC_ERROR_OK);
175     usleep(100000); // 100000us
176     ret = vsyncGenerator_->CheckAndUpdateReferenceTime(8333333, 2000000000); // 8333333ns, 2000000000ns
177     ASSERT_EQ(ret, VSYNC_ERROR_OK);
178 }
179 
180 /*
181 * Function: CheckAndUpdateReferenceTimeTest004
182 * Type: Function
183 * Rank: Important(2)
184 * EnvConditions: N/A
185 * CaseDescription: 1. Test CheckAndUpdateReferenceTime
186  */
187 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest004, Function | MediumTest| Level0)
188 {
189     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
190     ASSERT_EQ(ret, VSYNC_ERROR_OK);
191     vsyncGenerator_->SetPendingMode(16666667, 1000000000); // 16666667ns, 1000000000ns
192     int64_t refreshRate = 120; // 120hz
193     int64_t rsVsyncCount = 0;
194     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
195     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
196     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
197         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
198     ASSERT_EQ(ret, VSYNC_ERROR_OK);
199     VSyncReceiver::FrameCallback fcb = {
200         .userData_ = this,
201         .callback_ = OnVSync,
202     };
203     ret = receiver->RequestNextVSync(fcb);
204     ASSERT_EQ(ret, VSYNC_ERROR_OK);
205     usleep(100000); // 100000us
206     ret = vsyncGenerator_->UpdateMode(8333333, 0, 1000000000); // 8333333ns, 1000000000ns
207     ASSERT_EQ(ret, VSYNC_ERROR_OK);
208     ret = vsyncGenerator_->CheckAndUpdateReferenceTime(8333333, 2000000000); // 8333333ns, 2000000000ns
209     ASSERT_EQ(ret, VSYNC_ERROR_OK);
210 }
211 
212 /*
213 * Function: CheckAndUpdateReferenceTimeTest005
214 * Type: Function
215 * Rank: Important(2)
216 * EnvConditions: N/A
217 * CaseDescription: 1. Test CheckAndUpdateReferenceTime and set pendingPeriod_ 8.3ms
218  */
219 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest005, Function | MediumTest| Level0)
220 {
221     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
222     ASSERT_EQ(ret, VSYNC_ERROR_OK);
223     vsyncGenerator_->SetPendingMode(8333333, 1000000000); // 8333333ns, 1000000000ns
224     int64_t refreshRate = 120; // 120hz
225     int64_t rsVsyncCount = 0;
226     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
227     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
228     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
229         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
230     ASSERT_EQ(ret, VSYNC_ERROR_OK);
231     VSyncReceiver::FrameCallback fcb = {
232         .userData_ = this,
233         .callback_ = OnVSync,
234     };
235     ret = receiver->RequestNextVSync(fcb);
236     ASSERT_EQ(ret, VSYNC_ERROR_OK);
237     usleep(100000); // 100000us
238     ret = vsyncGenerator_->UpdateMode(8333333, 0, 1000000000); // 8333333ns, 1000000000ns
239     ASSERT_EQ(ret, VSYNC_ERROR_OK);
240     ret = vsyncGenerator_->CheckAndUpdateReferenceTime(8333333, 2000000000); // 8333333ns, 2000000000ns
241     ASSERT_EQ(ret, VSYNC_ERROR_OK);
242 }
243 
244 /*
245 * Function: CheckAndUpdateReferenceTimeTest006
246 * Type: Function
247 * Rank: Important(2)
248 * EnvConditions: N/A
249 * CaseDescription: 1. Test CheckAndUpdateReferenceTime and set pendingPeriod_ 11.1ms
250  */
251 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest006, Function | MediumTest| Level0)
252 {
253     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
254     ASSERT_EQ(ret, VSYNC_ERROR_OK);
255     vsyncGenerator_->SetPendingMode(11111111, 1000000000); // 11111111ns, 1000000000ns
256     int64_t refreshRate = 90; // 90hz
257     int64_t rsVsyncCount = 0;
258     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
259     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
260     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
261         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
262     ASSERT_EQ(ret, VSYNC_ERROR_OK);
263     VSyncReceiver::FrameCallback fcb = {
264         .userData_ = this,
265         .callback_ = OnVSync,
266     };
267     ret = receiver->RequestNextVSync(fcb);
268     ASSERT_EQ(ret, VSYNC_ERROR_OK);
269     usleep(100000); // 100000us
270     ret = vsyncGenerator_->UpdateMode(11111111, 0, 1000000000); // 11111111ns, 1000000000ns
271     ASSERT_EQ(ret, VSYNC_ERROR_OK);
272     ret = vsyncGenerator_->CheckAndUpdateReferenceTime(11111111, 2000000000); // 11111111ns, 2000000000ns
273     ASSERT_EQ(ret, VSYNC_ERROR_OK);
274 }
275 
276 /*
277 * Function: CheckAndUpdateReferenceTimeTest007
278 * Type: Function
279 * Rank: Important(2)
280 * EnvConditions: N/A
281 * CaseDescription: 1. Test CheckAndUpdateReferenceTime and set pendingPeriod_ 16.6ms
282  */
283 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest007, Function | MediumTest| Level0)
284 {
285     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
286     ASSERT_EQ(ret, VSYNC_ERROR_OK);
287     vsyncGenerator_->SetPendingMode(16666667, 1000000000); // 16666667ns, 1000000000ns
288     int64_t refreshRate = 60; // 60hz
289     int64_t rsVsyncCount = 0;
290     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
291     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
292     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
293         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
294     ASSERT_EQ(ret, VSYNC_ERROR_OK);
295     VSyncReceiver::FrameCallback fcb = {
296         .userData_ = this,
297         .callback_ = OnVSync,
298     };
299     ret = receiver->RequestNextVSync(fcb);
300     ASSERT_EQ(ret, VSYNC_ERROR_OK);
301     usleep(100000); // 100000us
302     ret = vsyncGenerator_->UpdateMode(16666667, 0, 1000000000); // 16666667ns, 1000000000ns
303     ASSERT_EQ(ret, VSYNC_ERROR_OK);
304     ret = vsyncGenerator_->CheckAndUpdateReferenceTime(16666667, 2000000000); // 16666667ns, 2000000000ns
305     ASSERT_EQ(ret, VSYNC_ERROR_OK);
306 }
307 
308 /*
309 * Function: CheckAndUpdateReferenceTimeTest008
310 * Type: Function
311 * Rank: Important(2)
312 * EnvConditions: N/A
313 * CaseDescription: 1. Test CheckAndUpdateReferenceTime and set pendingPeriod_ 33.3ms
314  */
315 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest008, Function | MediumTest| Level0)
316 {
317     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
318     ASSERT_EQ(ret, VSYNC_ERROR_OK);
319     vsyncGenerator_->SetPendingMode(33333333, 1000000000); // 33333333ns, 1000000000ns
320     int64_t refreshRate = 30; // 30hz
321     int64_t rsVsyncCount = 0;
322     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
323     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
324     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
325         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
326     ASSERT_EQ(ret, VSYNC_ERROR_OK);
327     VSyncReceiver::FrameCallback fcb = {
328         .userData_ = this,
329         .callback_ = OnVSync,
330     };
331     ret = receiver->RequestNextVSync(fcb);
332     ASSERT_EQ(ret, VSYNC_ERROR_OK);
333     usleep(100000); // 100000us
334     ret = vsyncGenerator_->UpdateMode(33333333, 0, 1000000000); // 33333333ns, 1000000000ns
335     ASSERT_EQ(ret, VSYNC_ERROR_OK);
336     ret = vsyncGenerator_->CheckAndUpdateReferenceTime(33333333, 2000000000); // 33333333ns, 2000000000ns
337     ASSERT_EQ(ret, VSYNC_ERROR_OK);
338 }
339 
340 /*
341 * Function: CheckAndUpdateReferenceTimeTest009
342 * Type: Function
343 * Rank: Important(2)
344 * EnvConditions: N/A
345 * CaseDescription: 1. Test CheckAndUpdateReferenceTime and StartRefresh
346  */
347 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest009, Function | MediumTest| Level0)
348 {
349     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
350     ASSERT_EQ(ret, VSYNC_ERROR_OK);
351     vsyncGenerator_->SetPendingMode(33333333, 1000000000); // 33333333ns, 1000000000ns
352     int64_t refreshRate = 30; // 30hz
353     int64_t rsVsyncCount = 0;
354     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
355     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
356     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
357         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
358     ASSERT_EQ(ret, VSYNC_ERROR_OK);
359     VSyncReceiver::FrameCallback fcb = {
360         .userData_ = this,
361         .callback_ = OnVSync,
362     };
363     ret = receiver->RequestNextVSync(fcb);
364     ASSERT_EQ(ret, VSYNC_ERROR_OK);
365     usleep(100000); // 100000us
366     ret = vsyncGenerator_->UpdateMode(33333333, 0, 1000000000); // 33333333ns, 1000000000ns
367     ASSERT_EQ(ret, VSYNC_ERROR_OK);
368     ret = vsyncGenerator_->StartRefresh();
369     ASSERT_EQ(ret, VSYNC_ERROR_OK);
370     ret = vsyncGenerator_->CheckAndUpdateReferenceTime(33333333, 2000000000); // 33333333ns, 2000000000ns
371     ASSERT_EQ(ret, VSYNC_ERROR_OK);
372 }
373 
374 /*
375 * Function: CheckAndUpdateReferenceTimeTest010
376 * Type: Function
377 * Rank: Important(2)
378 * EnvConditions: N/A
379 * CaseDescription: 1. Test CheckAndUpdateReferenceTime and SetVSyncPhaseByPulseNum
380  */
381 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest010, Function | MediumTest| Level0)
382 {
383     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
384     ASSERT_EQ(ret, VSYNC_ERROR_OK);
385     vsyncGenerator_->SetPendingMode(33333333, 1000000000); // 33333333ns, 1000000000ns
386     int64_t refreshRate = 30; // 30hz
387     int64_t rsVsyncCount = 0;
388     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
389     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
390     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
391         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
392     ASSERT_EQ(ret, VSYNC_ERROR_OK);
393     VSyncReceiver::FrameCallback fcb = {
394         .userData_ = this,
395         .callback_ = OnVSync,
396     };
397     ret = receiver->RequestNextVSync(fcb);
398     ASSERT_EQ(ret, VSYNC_ERROR_OK);
399     usleep(100000); // 100000us
400     ret = vsyncGenerator_->UpdateMode(33333333, 0, 1000000000); // 33333333ns, 1000000000ns
401     ASSERT_EQ(ret, VSYNC_ERROR_OK);
402     ret = vsyncGenerator_->SetReferenceTimeOffset(1);
403     ASSERT_EQ(ret, VSYNC_ERROR_OK);
404     ret = vsyncGenerator_->SetVSyncPhaseByPulseNum(1);
405     ASSERT_EQ(ret, VSYNC_ERROR_OK);
406     ret = vsyncGenerator_->CheckAndUpdateReferenceTime(33333333, 2000000000); // 33333333ns, 2000000000ns
407     ASSERT_EQ(ret, VSYNC_ERROR_OK);
408 }
409 
410 /*
411 * Function: CheckAndUpdateReferenceTimeTest011
412 * Type: Function
413 * Rank: Important(2)
414 * EnvConditions: N/A
415 * CaseDescription: 1. Test CheckAndUpdateReferenceTime and StartRefresh, SetVSyncPhaseByPulseNum
416  */
417 HWTEST_F(VSyncGeneratorTest, CheckAndUpdateReferenceTimeTest011, Function | MediumTest| Level0)
418 {
419     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
420     ASSERT_EQ(ret, VSYNC_ERROR_OK);
421     vsyncGenerator_->SetPendingMode(33333333, 1000000000); // 33333333ns, 1000000000ns
422     int64_t refreshRate = 30; // 30hz
423     int64_t rsVsyncCount = 0;
424     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
425     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
426     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
427         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
428     ASSERT_EQ(ret, VSYNC_ERROR_OK);
429     VSyncReceiver::FrameCallback fcb = {
430         .userData_ = this,
431         .callback_ = OnVSync,
432     };
433     ret = receiver->RequestNextVSync(fcb);
434     ASSERT_EQ(ret, VSYNC_ERROR_OK);
435     usleep(100000); // 100000us
436     ret = vsyncGenerator_->UpdateMode(33333333, 0, 1000000000); // 33333333ns, 1000000000ns
437     ASSERT_EQ(ret, VSYNC_ERROR_OK);
438     ret = vsyncGenerator_->SetReferenceTimeOffset(1);
439     ASSERT_EQ(ret, VSYNC_ERROR_OK);
440     ret = vsyncGenerator_->SetVSyncPhaseByPulseNum(1);
441     ASSERT_EQ(ret, VSYNC_ERROR_OK);
442     ret = vsyncGenerator_->StartRefresh();
443     ASSERT_EQ(ret, VSYNC_ERROR_OK);
444     ret = vsyncGenerator_->CheckAndUpdateReferenceTime(33333333, 2000000000); // 33333333ns, 2000000000ns
445     ASSERT_EQ(ret, VSYNC_ERROR_OK);
446 }
447 
448 /*
449 * Function: PeriodCheckLockedTest
450 * Type: Function
451 * Rank: Important(2)
452 * EnvConditions: N/A
453 * CaseDescription: 1. Test PeriodCheckLocked
454  */
455 HWTEST_F(VSyncGeneratorTest, PeriodCheckLockedTest, Function | MediumTest| Level0)
456 {
457     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
458     ASSERT_EQ(ret, VSYNC_ERROR_OK);
459     for (int i = 0; i < 20; i++) { // test 20 times
460         int64_t testPeriod = i < 2 ? 8333333 : 16666667; // 2, 8333333ns, 16666667ns
461         vsyncGenerator_->SetPendingMode(testPeriod, 1000000000); // 1000000000ns
462         int64_t refreshRate = 120; // 120hz
463         int64_t rsVsyncCount = 0;
464         VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
465         VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
466         ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
467             listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
468         ASSERT_EQ(ret, VSYNC_ERROR_OK);
469         VSyncReceiver::FrameCallback fcb = {
470             .userData_ = this,
471             .callback_ = OnVSync,
472         };
473         ret = receiver->RequestNextVSync(fcb);
474         ASSERT_EQ(ret, VSYNC_ERROR_OK);
475         usleep(100000); // 100000us
476         ret = vsyncGenerator_->UpdateMode(8333333, 0, 1000000000); // 8333333ns, 1000000000ns
477         ASSERT_EQ(ret, VSYNC_ERROR_OK);
478         ret = vsyncGenerator_->CheckAndUpdateReferenceTime(testPeriod, 2000000000); // 2000000000ns
479         ASSERT_EQ(ret, VSYNC_ERROR_OK);
480     }
481 }
482 
483 /*
484 * Function: NowLessThanReferenceTimeTest
485 * Type: Function
486 * Rank: Important(2)
487 * EnvConditions: N/A
488 * CaseDescription: 1. Test now is less than referenceTime
489  */
490 HWTEST_F(VSyncGeneratorTest, NowLessThanReferenceTimeTest, Function | MediumTest| Level0)
491 {
492     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPS);
493     ASSERT_EQ(ret, VSYNC_ERROR_OK);
494     VSyncReceiver::FrameCallback fcb = {
495         .userData_ = this,
496         .callback_ = OnVSync,
497     };
498     ret = receiver->RequestNextVSync(fcb);
499     ASSERT_EQ(ret, VSYNC_ERROR_OK);
500     usleep(100000); // 100000us
501     ASSERT_EQ(vsyncGenerator_->GetVSyncMode(), VSYNC_MODE_LTPS);
502     int64_t refreshRate = 120; // 120hz
503     int64_t rsVsyncCount = 0;
504     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
505     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
506     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
507         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
508     ASSERT_EQ(ret, VSYNC_ERROR_NOT_SUPPORT);
509     ret = vsyncGenerator_->UpdateMode(8333333, 0, 1000000000000000); // 8333333ns, 1000000000000000ns
510     ASSERT_EQ(ret, VSYNC_ERROR_OK);
511     ret = receiver->RequestNextVSync(fcb);
512     ASSERT_EQ(ret, VSYNC_ERROR_OK);
513     usleep(100000); // 100000us
514 }
515 
516 /*
517 * Function: ChangeGeneratorRefreshRateModelTest001
518 * Type: Function
519 * Rank: Important(2)
520 * EnvConditions: N/A
521 * CaseDescription: 1. Test ChangeGeneratorRefreshRateModel for LTPO
522  */
523 HWTEST_F(VSyncGeneratorTest, ChangeGeneratorRefreshRateModelTest001, Function | MediumTest| Level0)
524 {
525     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
526     ASSERT_EQ(ret, VSYNC_ERROR_OK);
527     VSyncReceiver::FrameCallback fcb = {
528         .userData_ = this,
529         .callback_ = OnVSync,
530     };
531     ret = receiver->RequestNextVSync(fcb);
532     ASSERT_EQ(ret, VSYNC_ERROR_OK);
533     int64_t refreshRate = 120; // 120hz
534     int64_t rsVsyncCount = 0;
535     std::vector<std::pair<uint64_t, uint32_t>> refreshRates = {};
536     refreshRates.push_back({0, 60});
537     refreshRates.push_back({1, 120});
538     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {
539         .cb = appController,
540         .refreshRates = refreshRates,
541     };
542     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {
543         .cb = rsController,
544         .phaseByPulseNum = 3,
545     };
546     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
547         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
548     ASSERT_EQ(ret, VSYNC_ERROR_OK);
549     ret = vsyncGenerator_->UpdateMode(8333333, 0, 1000000000000); // 8333333ns, 1000000000000ns
550     ASSERT_EQ(ret, VSYNC_ERROR_OK);
551     usleep(100000); // 100000us
552     ASSERT_EQ(vsyncGenerator_->GetVSyncMode(), VSYNC_MODE_LTPO);
553     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
554         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
555     ASSERT_EQ(ret, VSYNC_ERROR_OK);
556 }
557 
558 /*
559 * Function: ChangeGeneratorRefreshRateModelTest002
560 * Type: Function
561 * Rank: Important(2)
562 * EnvConditions: N/A
563 * CaseDescription: 1. Test ChangeGeneratorRefreshRateModel for LTPS
564  */
565 HWTEST_F(VSyncGeneratorTest, ChangeGeneratorRefreshRateModelTest002, Function | MediumTest| Level0)
566 {
567     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPS);
568     ASSERT_EQ(ret, VSYNC_ERROR_OK);
569     VSyncReceiver::FrameCallback fcb = {
570         .userData_ = this,
571         .callback_ = OnVSync,
572     };
573     ret = receiver->RequestNextVSync(fcb);
574     ASSERT_EQ(ret, VSYNC_ERROR_OK);
575     usleep(100000); // 100000us
576     ASSERT_EQ(vsyncGenerator_->GetVSyncMode(), VSYNC_MODE_LTPS);
577     int64_t refreshRate = 120; // 120hz
578     int64_t rsVsyncCount = 0;
579     std::vector<std::pair<uint64_t, uint32_t>> refreshRates = {};
580     refreshRates.push_back({0, 60});
581     refreshRates.push_back({1, 120});
582     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {
583         .cb = appController,
584         .refreshRates = refreshRates,
585     };
586     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {
587         .cb = rsController,
588         .phaseByPulseNum = 3,
589     };
590     ret = vsyncGenerator_->ChangeGeneratorRefreshRateModel(
591         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
592     ASSERT_EQ(ret, VSYNC_ERROR_NOT_SUPPORT);
593     ret = vsyncGenerator_->UpdateMode(8333333, 0, 1000000000000); // 8333333ns, 1000000000000ns
594     ASSERT_EQ(ret, VSYNC_ERROR_OK);
595 }
596 
597 /*
598 * Function: SetVSyncModeTest
599 * Type: Function
600 * Rank: Important(2)
601 * EnvConditions: N/A
602 * CaseDescription: 1. Test SetVSyncMode and GetVSyncMode
603  */
604 HWTEST_F(VSyncGeneratorTest, SetVSyncModeTest, Function | MediumTest| Level0)
605 {
606     VsyncError ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPS);
607     ASSERT_EQ(ret, VSYNC_ERROR_OK);
608     VSyncReceiver::FrameCallback fcb = {
609         .userData_ = this,
610         .callback_ = OnVSync,
611     };
612     ret = receiver->RequestNextVSync(fcb);
613     ASSERT_EQ(ret, VSYNC_ERROR_OK);
614     usleep(100000); // 100000us
615     ASSERT_EQ(vsyncGenerator_->GetVSyncMode(), VSYNC_MODE_LTPS);
616     ret = vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
617     ASSERT_EQ(ret, VSYNC_ERROR_OK);
618 }
619 
620 /*
621 * Function: SetVSyncMaxRefreshRateTest
622 * Type: Function
623 * Rank: Important(2)
624 * EnvConditions: N/A
625 * CaseDescription: 1. Test SetVSyncMaxRefreshRateTest and GetVSyncMaxRefreshRateTest
626  */
627 HWTEST_F(VSyncGeneratorTest, SetVSyncMaxRefreshRateTest, Function | MediumTest| Level0)
628 {
629     // set invalid value 30 smaller than VSYNC_MAX_REFRESHRATE_RANGE_MIN
630     VsyncError ret = vsyncGenerator_->SetVSyncMaxRefreshRate(30);
631     ASSERT_EQ(ret, VSYNC_ERROR_INVALID_ARGUMENTS);
632 
633     // set invalid value 600 greater than VSYNC_MAX_REFRESHRATE_RANGE_MAX
634     ret = vsyncGenerator_->SetVSyncMaxRefreshRate(600);
635     ASSERT_EQ(ret, VSYNC_ERROR_INVALID_ARGUMENTS);
636 
637     // set valid value
638     ret = vsyncGenerator_->SetVSyncMaxRefreshRate(240);
639     ASSERT_EQ(ret, VSYNC_ERROR_OK);
640     uint32_t vsyncMaxRefreshRate = vsyncGenerator_->GetVSyncMaxRefreshRate();
641     ASSERT_EQ(vsyncMaxRefreshRate, 240);
642 }
643 
644 /*
645 * Function: SetHighPriorityVSyncRateTest
646 * Type: Function
647 * Rank: Important(2)
648 * EnvConditions: N/A
649 * CaseDescription: 1. Test SetHighPriorityVSyncRate
650  */
651 HWTEST_F(VSyncGeneratorTest, SetHighPriorityVSyncRateTest, Function | MediumTest| Level0)
652 {
653     sptr<VSyncConnection> conn = new VSyncConnection(rsDistributor, "SetHighPriorityVSyncRateTest");
654     rsDistributor->AddConnection(conn);
655     VsyncError ret = rsDistributor->SetHighPriorityVSyncRate(2, conn); // rate is 2
656     ASSERT_EQ(ret, VSYNC_ERROR_OK);
657     VSyncReceiver::FrameCallback fcb = {
658         .userData_ = this,
659         .callback_ = OnVSync,
660     };
661     for (int i = 0; i < 10; i++) {
662         ret = receiver->RequestNextVSync(fcb);
663         ASSERT_EQ(ret, VSYNC_ERROR_OK);
664         usleep(10000); // 10000us
665     }
666     usleep(100000); // 100000us
667 }
668 
669 /*
670 * Function: UpdateMode001
671 * Type: Function
672 * Rank: Important(2)
673 * EnvConditions: N/A
674 * CaseDescription: 1. call UpdateMode
675  */
676 HWTEST_F(VSyncGeneratorTest, UpdateMode001, Function | MediumTest| Level0)
677 {
678     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->UpdateMode(2, 0, 0), VSYNC_ERROR_OK);
679 }
680 
681 /*
682 * Function: UpdateMode002
683 * Type: Function
684 * Rank: Important(2)
685 * EnvConditions: N/A
686 * CaseDescription: 1. call UpdateMode
687  */
688 HWTEST_F(VSyncGeneratorTest, UpdateMode002, Function | MediumTest| Level0)
689 {
690     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->UpdateMode(2, 0, -1), VSYNC_ERROR_INVALID_ARGUMENTS);
691 }
692 
693 /*
694 * Function: UpdateMode003
695 * Type: Function
696 * Rank: Important(2)
697 * EnvConditions: N/A
698 * CaseDescription: 1. call UpdateMode
699  */
700 HWTEST_F(VSyncGeneratorTest, UpdateMode003, Function | MediumTest| Level0)
701 {
702     VSyncGeneratorTest::vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
703     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->UpdateMode(0, 0, 0), VSYNC_ERROR_OK);
704     // 25000000 is period, refreshRate is 40hz,for JudgeRefreshRateLocked test
705     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->UpdateMode(25000000, 0, 0), VSYNC_ERROR_OK);
706 }
707 
708 /*
709 * Function: AddListener001
710 * Type: Function
711 * Rank: Important(2)
712 * EnvConditions: N/A
713 * CaseDescription: 1. call AddListener
714  */
715 HWTEST_F(VSyncGeneratorTest, AddListener001, Function | MediumTest| Level0)
716 {
717     sptr<VSyncGeneratorTestCallback> callback1 = new VSyncGeneratorTestCallback;
718     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->AddListener(2, callback1), VSYNC_ERROR_OK);
719 }
720 
721 /*
722 * Function: AddListener002
723 * Type: Function
724 * Rank: Important(2)
725 * EnvConditions: N/A
726 * CaseDescription: 1. call AddListener
727  */
728 HWTEST_F(VSyncGeneratorTest, AddListener002, Function | MediumTest| Level0)
729 {
730     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->AddListener(2, nullptr), VSYNC_ERROR_INVALID_ARGUMENTS);
731 }
732 
733 /*
734 * Function: AddListener003
735 * Type: Function
736 * Rank: Important(2)
737 * EnvConditions: N/A
738 * CaseDescription: 1. call AddListener
739  */
740 HWTEST_F(VSyncGeneratorTest, AddListener003, Function | MediumTest| Level0)
741 {
742     VSyncGeneratorTest::vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
743     VSyncGeneratorTest::vsyncGenerator_->UpdateMode(2, 0, 0);
744     sptr<VSyncGeneratorTestCallback> callback = new VSyncGeneratorTestCallback;
745     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->AddListener(2, callback), VSYNC_ERROR_OK);
746 }
747 
748 /*
749 * Function: AddListener004
750 * Type: Function
751 * Rank: Important(2)
752 * EnvConditions: N/A
753 * CaseDescription: 1. call AddListener
754  */
755 HWTEST_F(VSyncGeneratorTest, AddListener004, Function | MediumTest| Level0)
756 {
757     auto generatorImpl = static_cast<impl::VSyncGenerator*>(VSyncGeneratorTest::vsyncGenerator_.GetRefPtr());
758     generatorImpl->listeners_.clear();
759     sptr<VSyncGeneratorTestCallback> callback = new VSyncGeneratorTestCallback;
760     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->AddListener(0, callback), VSYNC_ERROR_OK);
761     ASSERT_EQ(generatorImpl->listeners_.size(), 1);
762     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->AddListener(0, callback), VSYNC_ERROR_OK);
763     ASSERT_EQ(generatorImpl->listeners_.size(), 1);
764 }
765 
766 /*
767 * Function: RemoveListener001
768 * Type: Function
769 * Rank: Important(2)
770 * EnvConditions: N/A
771 * CaseDescription: 1. call RemoveListener
772  */
773 HWTEST_F(VSyncGeneratorTest, RemoveListener001, Function | MediumTest| Level0)
774 {
775     sptr<VSyncGeneratorTestCallback> callback2 = new VSyncGeneratorTestCallback;
776     VSyncGeneratorTest::vsyncGenerator_->AddListener(2, callback2);
777     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->RemoveListener(callback2), VSYNC_ERROR_OK);
778 }
779 
780 /*
781 * Function: RemoveListener002
782 * Type: Function
783 * Rank: Important(2)
784 * EnvConditions: N/A
785 * CaseDescription: 1. call RemoveListener
786  */
787 HWTEST_F(VSyncGeneratorTest, RemoveListener002, Function | MediumTest| Level0)
788 {
789     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->RemoveListener(nullptr), VSYNC_ERROR_INVALID_ARGUMENTS);
790 }
791 
792 /*
793 * Function: RemoveListener003
794 * Type: Function
795 * Rank: Important(2)
796 * EnvConditions: N/A
797 * CaseDescription: 1. call RemoveListener
798  */
799 HWTEST_F(VSyncGeneratorTest, RemoveListener003, Function | MediumTest| Level0)
800 {
801     sptr<VSyncGeneratorTestCallback> callback3 = new VSyncGeneratorTestCallback;
802     VSyncGeneratorTest::vsyncGenerator_->AddListener(2, callback3);
803     sptr<VSyncGeneratorTestCallback> callback4 = new VSyncGeneratorTestCallback;
804     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->RemoveListener(callback4), VSYNC_ERROR_OK);
805 }
806 
807 /*
808 * Function: ChangePhaseOffset001
809 * Type: Function
810 * Rank: Important(2)
811 * EnvConditions: N/A
812 * CaseDescription: 1. call ChangePhaseOffset
813  */
814 HWTEST_F(VSyncGeneratorTest, ChangePhaseOffset001, Function | MediumTest| Level0)
815 {
816     sptr<VSyncGeneratorTestCallback> callback5 = new VSyncGeneratorTestCallback;
817     VSyncGeneratorTest::vsyncGenerator_->AddListener(2, callback5);
818     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->ChangePhaseOffset(callback5, 1), VSYNC_ERROR_OK);
819 }
820 
821 /*
822 * Function: ChangePhaseOffset002
823 * Type: Function
824 * Rank: Important(2)
825 * EnvConditions: N/A
826 * CaseDescription: 1. call ChangePhaseOffset
827  */
828 HWTEST_F(VSyncGeneratorTest, ChangePhaseOffset002, Function | MediumTest| Level0)
829 {
830     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->ChangePhaseOffset(nullptr, 1), VSYNC_ERROR_INVALID_ARGUMENTS);
831 }
832 
833 /*
834 * Function: ChangePhaseOffset003
835 * Type: Function
836 * Rank: Important(2)
837 * EnvConditions: N/A
838 * CaseDescription: 1. call ChangePhaseOffset
839  */
840 HWTEST_F(VSyncGeneratorTest, ChangePhaseOffset003, Function | MediumTest| Level0)
841 {
842     sptr<VSyncGeneratorTestCallback> callback6 = new VSyncGeneratorTestCallback;
843     VSyncGeneratorTest::vsyncGenerator_->AddListener(2, callback6);
844     sptr<VSyncGeneratorTestCallback> callback7 = new VSyncGeneratorTestCallback;
845     ASSERT_EQ(VSyncGeneratorTest::vsyncGenerator_->ChangePhaseOffset(callback7, 1), VSYNC_ERROR_INVALID_OPERATING);
846 }
847 
848 /*
849 * Function: expectNextVsyncTimeTest001
850 * Type: Function
851 * Rank: Important(2)
852 * EnvConditions: N/A
853 * CaseDescription: Test expectNextVsyncTime 0
854  */
855 HWTEST_F(VSyncGeneratorTest, expectNextVsyncTimeTest001, Function | MediumTest| Level0)
856 {
857     int64_t period = 8333333; // 8333333ns
858     int64_t referenceTime = SystemTime();
859     vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
860     vsyncGenerator_->UpdateMode(period, 0, referenceTime);
861     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
862     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
863     int64_t refreshRate = 120; // 120hz
864     int64_t rsVsyncCount = 0;
865     auto ret = VSyncGeneratorTest::vsyncGenerator_->ChangeGeneratorRefreshRateModel(
866         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0); // expectNextVsyncTime 0
867     ASSERT_EQ(ret, VSYNC_ERROR_OK);
868 }
869 
870 /*
871 * Function: expectNextVsyncTimeTest002
872 * Type: Function
873 * Rank: Important(2)
874 * EnvConditions: N/A
875 * CaseDescription: Test expectNextVsyncTime -1
876  */
877 HWTEST_F(VSyncGeneratorTest, expectNextVsyncTimeTest002, Function | MediumTest| Level0)
878 {
879     int64_t period = 8333333; // 8333333ns
880     int64_t referenceTime = SystemTime();
881     vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
882     vsyncGenerator_->UpdateMode(period, 0, referenceTime);
883     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
884     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
885     int64_t refreshRate = 120; // 120hz
886     int64_t rsVsyncCount = 0;
887     auto ret = VSyncGeneratorTest::vsyncGenerator_->ChangeGeneratorRefreshRateModel(
888         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, -1); // expectNextVsyncTime -1
889     ASSERT_EQ(ret, VSYNC_ERROR_OK);
890 }
891 
892 /*
893 * Function: expectNextVsyncTimeTest003
894 * Type: Function
895 * Rank: Important(2)
896 * EnvConditions: N/A
897 * CaseDescription: Test expectNextVsyncTime earlier than referenceTime.
898  */
899 HWTEST_F(VSyncGeneratorTest, expectNextVsyncTimeTest003, Function | MediumTest| Level0)
900 {
901     int64_t period = 8333333; // 8333333ns
902     int64_t referenceTime = SystemTime();
903     vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
904     VsyncError ret = vsyncGenerator_->UpdateMode(period, 0, referenceTime);
905     ASSERT_EQ(ret, VSYNC_ERROR_OK);
906     int64_t refreshRate = 120; // 120hz
907     int64_t rsVsyncCount = 0;
908     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
909     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
910     ret = VSyncGeneratorTest::vsyncGenerator_->ChangeGeneratorRefreshRateModel(
911         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 0);
912     ASSERT_EQ(ret, VSYNC_ERROR_OK);
913     VSyncReceiver::FrameCallback fcb = {
914         .userData_ = this,
915         .callback_ = OnVSync,
916     };
917     ret = receiver->RequestNextVSync(fcb);
918     ASSERT_EQ(ret, VSYNC_ERROR_OK);
919     usleep(100000); // 100000us
920     ret = vsyncGenerator_->UpdateMode(period, 0, referenceTime);
921     ASSERT_EQ(ret, VSYNC_ERROR_OK);
922     ret = VSyncGeneratorTest::vsyncGenerator_->ChangeGeneratorRefreshRateModel(
923         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, 10000000); // 10ms == 10000000ns
924     ASSERT_EQ(ret, VSYNC_ERROR_INVALID_ARGUMENTS);
925 }
926 
927 /*
928 * Function: expectNextVsyncTimeTest004
929 * Type: Function
930 * Rank: Important(2)
931 * EnvConditions: N/A
932 * CaseDescription: Test expectNextVsyncTime current system time.
933  */
934 HWTEST_F(VSyncGeneratorTest, expectNextVsyncTimeTest004, Function | MediumTest| Level0)
935 {
936     int64_t period = 8333333; // 8333333ns
937     int64_t referenceTime = SystemTime();
938     vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
939     vsyncGenerator_->UpdateMode(period, 0, referenceTime);
940     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
941     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
942     int64_t refreshRate = 120; // 120hz
943     int64_t now = SystemTime();
944     int64_t rsVsyncCount = 0;
945     auto ret = VSyncGeneratorTest::vsyncGenerator_->ChangeGeneratorRefreshRateModel(
946         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, now);
947     ASSERT_EQ(ret, VSYNC_ERROR_OK);
948 }
949 
950 /*
951 * Function: expectNextVsyncTimeTest005
952 * Type: Function
953 * Rank: Important(2)
954 * EnvConditions: N/A
955 * CaseDescription: Test expectNextVsyncTime current system time plus 5ms.
956  */
957 HWTEST_F(VSyncGeneratorTest, expectNextVsyncTimeTest005, Function | MediumTest| Level0)
958 {
959     int64_t period = 8333333; // 8333333ns
960     int64_t referenceTime = SystemTime();
961     vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
962     vsyncGenerator_->UpdateMode(period, 0, referenceTime);
963     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
964     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
965     int64_t refreshRate = 120; // 120hz
966     int64_t now = SystemTime();
967     int64_t rsVsyncCount = 0;
968     auto ret = VSyncGeneratorTest::vsyncGenerator_->ChangeGeneratorRefreshRateModel(
969         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, now + 5000000); // 5ms == 5000000ns
970     ASSERT_EQ(ret, VSYNC_ERROR_OK);
971 }
972 
973 /*
974 * Function: expectNextVsyncTimeTest006
975 * Type: Function
976 * Rank: Important(2)
977 * EnvConditions: N/A
978 * CaseDescription: Test expectNextVsyncTime current system time plus 5.5ms.
979  */
980 HWTEST_F(VSyncGeneratorTest, expectNextVsyncTimeTest006, Function | MediumTest| Level0)
981 {
982     int64_t period = 8333333; // 8333333ns
983     int64_t referenceTime = SystemTime();
984     vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
985     vsyncGenerator_->UpdateMode(period, 0, referenceTime);
986     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
987     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
988     int64_t refreshRate = 120; // 120hz
989     int64_t now = SystemTime();
990     int64_t rsVsyncCount = 0;
991     auto ret = VSyncGeneratorTest::vsyncGenerator_->ChangeGeneratorRefreshRateModel(
992         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, now + 5500000); // 5.5ms == 5500000ns
993     ASSERT_EQ(ret, VSYNC_ERROR_OK);
994 }
995 
996 /*
997 * Function: expectNextVsyncTimeTest007
998 * Type: Function
999 * Rank: Important(2)
1000 * EnvConditions: N/A
1001 * CaseDescription: Test expectNextVsyncTime current system time plus 90ms.
1002  */
1003 HWTEST_F(VSyncGeneratorTest, expectNextVsyncTimeTest007, Function | MediumTest| Level0)
1004 {
1005     int64_t period = 8333333; // 8333333ns
1006     int64_t referenceTime = SystemTime();
1007     vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
1008     vsyncGenerator_->UpdateMode(period, 0, referenceTime);
1009     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
1010     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
1011     int64_t refreshRate = 120; // 120hz
1012     int64_t now = SystemTime();
1013     int64_t rsVsyncCount = 0;
1014     auto ret = VSyncGeneratorTest::vsyncGenerator_->ChangeGeneratorRefreshRateModel(
1015         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, now + 90000000); // 90ms == 90000000ns
1016     ASSERT_EQ(ret, VSYNC_ERROR_OK);
1017 }
1018 
1019 /*
1020 * Function: expectNextVsyncTimeTest008
1021 * Type: Function
1022 * Rank: Important(2)
1023 * EnvConditions: N/A
1024 * CaseDescription: Test expectNextVsyncTime current system time plus 110ms.
1025  */
1026 HWTEST_F(VSyncGeneratorTest, expectNextVsyncTimeTest008, Function | MediumTest| Level0)
1027 {
1028     int64_t period = 8333333; // 8333333ns
1029     int64_t referenceTime = SystemTime();
1030     vsyncGenerator_->SetVSyncMode(VSYNC_MODE_LTPO);
1031     vsyncGenerator_->UpdateMode(period, 0, referenceTime);
1032     VSyncGenerator::ListenerRefreshRateData listenerRefreshRates = {};
1033     VSyncGenerator::ListenerPhaseOffsetData listenerPhaseOffset = {};
1034     int64_t refreshRate = 120; // 120hz
1035     int64_t now = SystemTime();
1036     int64_t rsVsyncCount = 0;
1037     auto ret = VSyncGeneratorTest::vsyncGenerator_->ChangeGeneratorRefreshRateModel(
1038         listenerRefreshRates, listenerPhaseOffset, refreshRate, rsVsyncCount, now + 110000000); // 110ms == 110000000ns
1039     ASSERT_EQ(ret, VSYNC_ERROR_INVALID_ARGUMENTS);
1040 }
1041 
1042 /*
1043 * Function: SetCurrentRefreshRateTest001
1044 * Type: Function
1045 * Rank: Important(2)
1046 * EnvConditions: N/A
1047 * CaseDescription: Test SetCurrentRefreshRate
1048  */
1049 HWTEST_F(VSyncGeneratorTest, SetCurrentRefreshRateTest001, Function | MediumTest| Level0)
1050 {
1051     uint32_t currRefreshRate = 60;
1052     uint32_t lastRefreshRate = 30;
1053     int64_t delayTime = VSyncGeneratorTest::vsyncGenerator_->SetCurrentRefreshRate(currRefreshRate, lastRefreshRate);
1054     ASSERT_EQ(delayTime, 0);
1055 }
1056 
1057 /*
1058 * Function: DVSyncRateChangedTest001
1059 * Type: Function
1060 * Rank: Important(2)
1061 * EnvConditions: N/A
1062 * CaseDescription: Test DVSyncRateChanged
1063  */
1064 HWTEST_F(VSyncGeneratorTest, DVSyncRateChangedTest001, Function | MediumTest| Level0)
1065 {
1066     uint32_t currRefreshRate = 60;
1067     bool frameRateChanged = false;
1068     VSyncGeneratorTest::vsyncGenerator_->DVSyncRateChanged(currRefreshRate, frameRateChanged);
1069     ASSERT_EQ(frameRateChanged, false);
1070 }
1071 
1072 /*
1073 * Function: AddDVSyncListenerTest001
1074 * Type: Function
1075 * Rank: Important(2)
1076 * EnvConditions: N/A
1077 * CaseDescription: Test AddDVSyncListener
1078  */
1079 HWTEST_F(VSyncGeneratorTest, AddDVSyncListenerTest001, Function | MediumTest| Level0)
1080 {
1081     sptr<VSyncGenerator::Callback> cb = nullptr;
1082     int64_t phase = 0;
1083     VsyncError error = VSyncGeneratorTest::vsyncGenerator_->AddDVSyncListener(phase, cb);
1084     ASSERT_EQ(error, VSYNC_ERROR_INVALID_ARGUMENTS);
1085 }
1086 
1087 /*
1088 * Function: RemoveDVSyncListenerTest001
1089 * Type: Function
1090 * Rank: Important(2)
1091 * EnvConditions: N/A
1092 * CaseDescription: Test RemoveDVSyncListener
1093  */
1094 HWTEST_F(VSyncGeneratorTest, RemoveDVSyncListenerTest001, Function | MediumTest| Level0)
1095 {
1096     sptr<VSyncGenerator::Callback> cb = nullptr;
1097     VsyncError error = VSyncGeneratorTest::vsyncGenerator_->RemoveDVSyncListener(cb);
1098     ASSERT_EQ(error, VSYNC_ERROR_INVALID_ARGUMENTS);
1099 }
1100 } // namespace
1101 } // namespace Rosen
1102 } // namespace OHOS