• 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_core.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 class HgmVSyncGeneratorControllerTest : public testing::Test {
39 public:
40     static void SetUpTestCase();
41     static void TearDownTestCase();
42     void SetUp();
43     void TearDown();
44 };
45 
SetUpTestCase()46 void HgmVSyncGeneratorControllerTest::SetUpTestCase() {}
TearDownTestCase()47 void HgmVSyncGeneratorControllerTest::TearDownTestCase() {}
SetUp()48 void HgmVSyncGeneratorControllerTest::SetUp() {}
TearDown()49 void HgmVSyncGeneratorControllerTest::TearDown() {}
50 
51 /*
52  * @tc.name: ChangeGeneratorRate
53  * @tc.desc: Test ChangeGeneratorRate
54  * @tc.type: FUNC
55  * @tc.require:
56  */
57 HWTEST_F(HgmVSyncGeneratorControllerTest, ChangeGeneratorRate, TestSize.Level1)
58 {
59     ASSERT_NE(controller, nullptr);
60     std::vector<std::pair<FrameRateLinkerId, uint32_t>> appChangeData = {{1, 30}, {2, 60}, {3, 120}};
61     uint32_t controllerRate1 = 30;
62     controller->ChangeGeneratorRate(controllerRate1, appChangeData);
63     uint32_t controllerRate2 = 60;
64     controller->ChangeGeneratorRate(controllerRate2, appChangeData);
65     uint32_t controllerRate3 = 90;
66     controller->ChangeGeneratorRate(controllerRate3, appChangeData);
67     uint32_t controllerRate4 = 120;
68     controller->ChangeGeneratorRate(controllerRate4, appChangeData);
69 }
70 
71 /*
72  * @tc.name: GetCurrentOffset
73  * @tc.desc: Test ChangeGeneratorRate
74  * @tc.type: FUNC
75  * @tc.require:
76  */
77 HWTEST_F(HgmVSyncGeneratorControllerTest, GetCurrentOffset, TestSize.Level1)
78 {
79     ASSERT_NE(controller, nullptr);
80     std::vector<std::pair<FrameRateLinkerId, uint32_t>> appChangeData = {{1, 30}, {2, 60}, {3, 120}};
81     controller->ChangeGeneratorRate(30, appChangeData);
82     EXPECT_EQ(controller->GetCurrentOffset(), 0);
83 
84     auto &hgm = HgmCore::Instance();
85     uint32_t savedAlignRate = hgm.GetAlignRate();
86     hgm.alignRate_ = 0;
87     EXPECT_EQ(controller->GetAppOffset(50), 0);
88     EXPECT_EQ(controller->GetAppOffset(0), 0);
89 
90     hgm.alignRate_ = savedAlignRate;
91     EXPECT_EQ(controller->GetAppOffset(savedAlignRate + 1), 0);
92     controller->GetAppOffset(savedAlignRate);
93 
94     EXPECT_EQ(controller->CalcVSyncQuickTriggerTime(0, 0), 0);
95     EXPECT_EQ(controller->CalcVSyncQuickTriggerTime(0, 1), 0);
96     controller->vsyncGenerator_ = nullptr;
97     EXPECT_EQ(controller->CalcVSyncQuickTriggerTime(0, 0), 0);
98 }
99 
100 /*
101  * @tc.name: GetCurrentRate
102  * @tc.desc: Test GetCurrentRate
103  * @tc.type: FUNC
104  * @tc.require:
105  */
106 HWTEST_F(HgmVSyncGeneratorControllerTest, GetCurrentRate, TestSize.Level1)
107 {
108     ASSERT_NE(controller, nullptr);
109     std::vector<std::pair<FrameRateLinkerId, uint32_t>> appChangeData = {{1, 30}, {2, 60}, {3, 120}};
110     controller->ChangeGeneratorRate(60, appChangeData);
111     EXPECT_EQ(controller->GetCurrentRate(), 30);
112     controller->ChangeGeneratorRate(60, appChangeData, 0, true);
113     controller->ChangeGeneratorRate(60, appChangeData, 0, false);
114     controller->vsyncGenerator_ = nullptr;
115     EXPECT_EQ(controller->ChangeGeneratorRate(60, appChangeData), 0);
116 }
117 } // namespace Rosen
118 } // namespace OHOS
119