• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 #include <test_header.h>
18 
19 #include "hgm_test_base.h"
20 #include "hgm_vsync_generator_controller.h"
21 #include "common/rs_common_def.h"
22 #include "pipeline/rs_render_frame_rate_linker.h"
23 #include "vsync_controller.h"
24 #include "vsync_generator.h"
25 
26 using namespace testing;
27 using namespace testing::ext;
28 
29 namespace OHOS {
30 namespace Rosen {
31 namespace {
32 sptr<VSyncGenerator> vsyncGenerator = CreateVSyncGenerator();
33 sptr<VSyncController> rsController = new VSyncController(vsyncGenerator, 0);
34 sptr<VSyncController> appController = new VSyncController(vsyncGenerator, 0);
35 std::shared_ptr<HgmVSyncGeneratorController> controller =
36     std::make_shared<HgmVSyncGeneratorController>(rsController, appController, vsyncGenerator);
37 }
38 
39 class HgmVSyncGeneratorControllerTest : public HgmTestBase {
40 public:
41     static void SetUpTestCase();
42     static void TearDownTestCase();
43     void SetUp();
44     void TearDown();
45 };
46 
SetUpTestCase()47 void HgmVSyncGeneratorControllerTest::SetUpTestCase()
48 {
49     HgmTestBase::SetUpTestCase();
50 }
TearDownTestCase()51 void HgmVSyncGeneratorControllerTest::TearDownTestCase() {}
SetUp()52 void HgmVSyncGeneratorControllerTest::SetUp() {}
TearDown()53 void HgmVSyncGeneratorControllerTest::TearDown() {}
54 
55 /*
56  * @tc.name: ChangeGeneratorRate
57  * @tc.desc: Test ChangeGeneratorRate
58  * @tc.type: FUNC
59  * @tc.require:
60  */
61 HWTEST_F(HgmVSyncGeneratorControllerTest, ChangeGeneratorRate, TestSize.Level0)
62 {
63     ASSERT_NE(controller, nullptr);
64     std::vector<std::pair<FrameRateLinkerId, uint32_t>> appChangeData = { { 1, 30 }, { 2, 60 }, { 3, 120 } };
65     uint32_t controllerRate1 = 30;
66     controller->ChangeGeneratorRate(controllerRate1, appChangeData);
67     uint32_t controllerRate2 = 60;
68     controller->ChangeGeneratorRate(controllerRate2, appChangeData);
69     uint32_t controllerRate3 = 90;
70     controller->ChangeGeneratorRate(controllerRate3, appChangeData);
71     uint32_t controllerRate4 = 120;
72     controller->currentRate_ = controllerRate4;
73     controller->ChangeGeneratorRate(controllerRate4, appChangeData);
74 }
75 
76 /*
77  * @tc.name: GetCurrentOffset
78  * @tc.desc: Test ChangeGeneratorRate
79  * @tc.type: FUNC
80  * @tc.require:
81  */
82 HWTEST_F(HgmVSyncGeneratorControllerTest, GetCurrentOffset, TestSize.Level0)
83 {
84     ASSERT_NE(controller, nullptr);
85     std::vector<std::pair<FrameRateLinkerId, uint32_t>> appChangeData = { { 1, 30 }, { 2, 60 }, { 3, 120 } };
86     controller->ChangeGeneratorRate(30, appChangeData);
87     EXPECT_EQ(controller->GetCurrentOffset(), 0);
88 
89     auto& hgm = HgmCore::Instance();
90     uint32_t savedAlignRate = hgm.GetAlignRate();
91     hgm.alignRate_ = 0;
92     EXPECT_EQ(controller->GetAppOffset(50), 0);
93     EXPECT_EQ(controller->GetAppOffset(0), 0);
94 
95     hgm.alignRate_ = savedAlignRate;
96     EXPECT_EQ(controller->GetAppOffset(savedAlignRate + 1), 0);
97     controller->GetAppOffset(savedAlignRate);
98 
99     EXPECT_EQ(controller->CalcVSyncQuickTriggerTime(0, 0), 0);
100     EXPECT_EQ(controller->CalcVSyncQuickTriggerTime(0, 1), 0);
101     controller->vsyncGenerator_ = nullptr;
102     EXPECT_EQ(controller->CalcVSyncQuickTriggerTime(0, 1), 0);
103 }
104 
105 /*
106  * @tc.name: GetCurrentRate
107  * @tc.desc: Test GetCurrentRate
108  * @tc.type: FUNC
109  * @tc.require:
110  */
111 HWTEST_F(HgmVSyncGeneratorControllerTest, GetCurrentRate, TestSize.Level0)
112 {
113     ASSERT_NE(controller, nullptr);
114     std::vector<std::pair<FrameRateLinkerId, uint32_t>> appChangeData = { { 1, 30 }, { 2, 60 }, { 3, 120 } };
115     controller->ChangeGeneratorRate(60, appChangeData);
116     EXPECT_EQ(controller->GetCurrentRate(), 30);
117     controller->ChangeGeneratorRate(60, appChangeData, 0, true);
118     controller->ChangeGeneratorRate(60, appChangeData, 0, false);
119     controller->vsyncGenerator_ = nullptr;
120     EXPECT_EQ(controller->ChangeGeneratorRate(60, appChangeData), 0);
121 }
122 
123 /*
124  * @tc.name: ChangeAdaptiveStatus
125  * @tc.desc: Test ChangeAdaptiveStatus
126  * @tc.type: FUNC
127  * @tc.require:
128  */
129 HWTEST_F(HgmVSyncGeneratorControllerTest, ChangeAdaptiveStatus, TestSize.Level0)
130 {
131     ASSERT_NE(controller, nullptr);
132     controller->rsController_->normalPhaseOffset_ = 0;
133     controller->rsController_->phaseOffset_ = 1;
134     controller->ChangeAdaptiveStatus(false);
135     ASSERT_EQ(controller->rsController_->normalPhaseOffset_, controller->rsController_->phaseOffset_);
136     controller->rsController_->phaseOffset_ = 1;
137     controller->rsController_ = nullptr;
138     controller->ChangeAdaptiveStatus(false);
139     controller->rsController_ = rsController;
140 }
141 } // namespace Rosen
142 } // namespace OHOS
143