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_vsync_generator_controller.h"
20 #include "common/rs_common_def.h"
21 #include "pipeline/rs_render_frame_rate_linker.h"
22 #include "vsync_controller.h"
23 #include "vsync_generator.h"
24 
25 using namespace testing;
26 using namespace testing::ext;
27 
28 namespace OHOS {
29 namespace Rosen {
30 namespace {
31     sptr<VSyncGenerator> vsyncGenerator = CreateVSyncGenerator();
32     sptr<VSyncController> rsController = new VSyncController(vsyncGenerator, 0);
33     sptr<VSyncController> appController = new VSyncController(vsyncGenerator, 0);
34     std::shared_ptr<HgmVSyncGeneratorController> controller =
35         std::make_shared<HgmVSyncGeneratorController>(rsController, appController, vsyncGenerator);
36 }
37 class HgmVSyncGeneratorControllerTest : public testing::Test {
38 public:
39     static void SetUpTestCase();
40     static void TearDownTestCase();
41     void SetUp();
42     void TearDown();
43 };
44 
SetUpTestCase()45 void HgmVSyncGeneratorControllerTest::SetUpTestCase() {}
TearDownTestCase()46 void HgmVSyncGeneratorControllerTest::TearDownTestCase() {}
SetUp()47 void HgmVSyncGeneratorControllerTest::SetUp() {}
TearDown()48 void HgmVSyncGeneratorControllerTest::TearDown() {}
49 
50 /*
51  * @tc.name: ChangeGeneratorRate
52  * @tc.desc: Test ChangeGeneratorRate
53  * @tc.type: FUNC
54  * @tc.require:
55  */
56 HWTEST_F(HgmVSyncGeneratorControllerTest, ChangeGeneratorRate, TestSize.Level1)
57 {
58     ASSERT_NE(controller, nullptr);
59     std::vector<std::pair<FrameRateLinkerId, uint32_t>> appChangeData = {{1, 30}, {2, 60}, {3, 120}};
60     uint32_t controllerRate1 = 30;
61     controller->ChangeGeneratorRate(controllerRate1, appChangeData);
62     uint32_t controllerRate2 = 60;
63     controller->ChangeGeneratorRate(controllerRate2, appChangeData);
64     uint32_t controllerRate3 = 90;
65     controller->ChangeGeneratorRate(controllerRate3, appChangeData);
66     uint32_t controllerRate4 = 120;
67     controller->ChangeGeneratorRate(controllerRate4, appChangeData);
68 }
69 
70 /*
71  * @tc.name: GetCurrentOffset
72  * @tc.desc: Test ChangeGeneratorRate
73  * @tc.type: FUNC
74  * @tc.require:
75  */
76 HWTEST_F(HgmVSyncGeneratorControllerTest, GetCurrentOffset, TestSize.Level1)
77 {
78     ASSERT_NE(controller, nullptr);
79     std::vector<std::pair<FrameRateLinkerId, uint32_t>> appChangeData = {{1, 30}, {2, 60}, {3, 120}};
80     controller->ChangeGeneratorRate(30, appChangeData);
81     EXPECT_EQ(controller->GetCurrentOffset(), 0);
82 }
83 
84 /*
85  * @tc.name: GetCurrentRate
86  * @tc.desc: Test GetCurrentRate
87  * @tc.type: FUNC
88  * @tc.require:
89  */
90 HWTEST_F(HgmVSyncGeneratorControllerTest, GetCurrentRate, TestSize.Level1)
91 {
92     ASSERT_NE(controller, nullptr);
93     std::vector<std::pair<FrameRateLinkerId, uint32_t>> appChangeData = {{1, 30}, {2, 60}, {3, 120}};
94     controller->ChangeGeneratorRate(60, appChangeData);
95     EXPECT_EQ(controller->GetCurrentRate(), 60);
96 }
97 } // namespace Rosen
98 } // namespace OHOS
99