• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020-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 <climits>
17 #include <gtest/gtest.h>
18 
19 #include "common/graphic_startup.h"
20 #include "common/task_manager.h"
21 #include "components/root_view.h"
22 #include "components/ui_view.h"
23 #include "components/ui_view_group.h"
24 #include "window/window.h"
25 
26 using namespace testing::ext;
27 namespace OHOS {
28 static uint16_t g_measureCount = 0;
29 class RenderTest : public testing::Test {
30 public:
RenderTest()31     RenderTest() {}
~RenderTest()32     virtual ~RenderTest() {}
33 
SetUpTestCase()34     static void SetUpTestCase()
35     {
36         GraphicStartUp::Init();
37     }
TearDownTestCase()38     static void TearDownTestCase() {}
39 
CreateDefaultWindow(RootView * rootView,int x,int y)40     static void CreateDefaultWindow(RootView* rootView, int x, int y)
41     {
42         WindowConfig config = {};
43         config.rect = rootView->GetRect();
44         config.rect.SetPosition(x, y);
45         Window* window = Window::CreateWindow(config);
46         if (window != nullptr) {
47             window->BindRootView(rootView);
48         }
49     }
50 
DestoryWindow(RootView * rootView)51     static void DestoryWindow(RootView* rootView)
52     {
53         Window::DestoryWindow(rootView->GetBoundWindow());
54     }
55 };
56 
57 class UITestView : public UIView {
58 public:
UITestView()59     UITestView() {}
~UITestView()60     virtual ~UITestView() {}
61 
ReMeasure()62     void ReMeasure() override
63     {
64         g_measureCount++;
65     }
66 };
67 
68 class UITestViewGroup : public UIViewGroup {
69 public:
UITestViewGroup()70     UITestViewGroup() {}
~UITestViewGroup()71     virtual ~UITestViewGroup() {}
72 
ReMeasure()73     void ReMeasure() override
74     {
75         g_measureCount++;
76     }
77 };
78 
79 /**
80  * @tc.name: Graphic_RenderTest_Test_Measuer_001
81  * @tc.desc: Verity measure call when render
82  * @tc.type: FUNC
83  * @tc.require: SR000FH555
84  */
85 HWTEST_F(RenderTest, Graphic_RenderTest_Test_Measuer_001, TestSize.Level0)
86 {
87     RootView* rootView = RootView::GetWindowRootView();
88     rootView->SetWidth(600);  // 600: width
89     rootView->SetHeight(500); // 500: height
90     rootView->SetPosition(0, 0);
91     UITestView* view1 = new UITestView();
92     UITestViewGroup* vg1 = new UITestViewGroup();
93     rootView->Add(vg1);
94     vg1->Add(view1);
95     vg1->Invalidate();
96     rootView->Invalidate();
97     g_measureCount = 0;
98 
99     RenderTest::CreateDefaultWindow(rootView, 0, 0);
100     usleep(DEFAULT_TASK_PERIOD * 1000); // DEFAULT_TASK_PERIOD * 1000: wait next render task
101     TaskManager::GetInstance()->TaskHandler();
102     EXPECT_EQ(g_measureCount, 2); // 2: measure view
103     rootView->RemoveAll();
104     delete view1;
105     delete vg1;
106     RenderTest::DestoryWindow(rootView);
107     RootView::DestoryWindowRootView(rootView);
108 }
109 
110 /**
111  * @tc.name: Graphic_RenderTest_Test_Measuer_02
112  * @tc.desc: Verity measure call when view invisible
113  * @tc.type: FUNC
114  * @tc.require: AR000FH556
115  */
116 HWTEST_F(RenderTest, Graphic_RenderTest_Test_Measuer_02, TestSize.Level0)
117 {
118     RootView* rootView = RootView::GetWindowRootView();
119     rootView->SetWidth(600);  // 600: width
120     rootView->SetHeight(500); // 500: height
121     rootView->SetPosition(0, 0);
122     UITestView* view1 = new UITestView();
123     UITestViewGroup* vg1 = new UITestViewGroup();
124     rootView->Add(vg1);
125     vg1->Add(view1);
126     // invisible view not need to measure
127     view1->SetVisible(false);
128     rootView->Invalidate();
129     g_measureCount = 0;
130 
131     RenderTest::CreateDefaultWindow(rootView, 0, 0);
132     usleep(DEFAULT_TASK_PERIOD * 1000); // DEFAULT_TASK_PERIOD * 1000: wait next render task
133     TaskManager::GetInstance()->TaskHandler();
134     EXPECT_EQ(g_measureCount, 1);
135 
136     rootView->RemoveAll();
137     delete view1;
138     delete vg1;
139     RenderTest::DestoryWindow(rootView);
140     RootView::DestoryWindowRootView(rootView);
141 }
142 } // namespace OHOS
143