1 /*
2 * Copyright (c) 2023-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 <cstdint>
17 #include <iostream>
18 #include <string>
19 #include "transaction/rs_interfaces.h"
20
21 using namespace OHOS;
22 using namespace OHOS::Rosen;
23 using namespace std;
24
25 class RSScreenModeTestCase {
26 public:
GetInstance()27 inline static RSScreenModeTestCase& GetInstance()
28 {
29 static RSScreenModeTestCase instance;
30 return instance;
31 }
32
TestRun()33 void TestRun()
34 {
35 std::cout << "Render service Client screen mode Demo.cpp testRun Start\n";
36 std::cout << "The default screen id is " << defaultDisplayId_ << std::endl;
37 while (true) {
38 decltype(supportedModes_.size()) size = supportedModes_.size();
39 if (size == 0) {
40 std::cout << "The default screen id is " << defaultDisplayId_ <<
41 ", and it dosen't spupport any screen mode." << std::endl;
42 break;
43 }
44 std::cout << "The default screen id is " << defaultDisplayId_ <<
45 ", and it spupports these screen modes:." << std::endl;
46 for (decltype(supportedModes_.size()) i = 0; i < size; i++) {
47 std::cout << "supporedMode[" << i << "]: " << supportedModes_[i].GetScreenModeId() <<", " <<
48 supportedModes_[i].GetScreenWidth() << "x" << supportedModes_[i].GetScreenHeight() <<
49 ", refreshrate=" << supportedModes_[i].GetScreenRefreshRate() << std::endl;
50 }
51 RSScreenModeInfo currScreenMode = rsInterface_.GetScreenActiveMode(defaultDisplayId_);
52 std::cout << "The current active screen mode :\n modeId: " << currScreenMode.GetScreenModeId() <<", " <<
53 currScreenMode.GetScreenWidth() << "x" << currScreenMode.GetScreenHeight() <<
54 ", refreshrate=" << currScreenMode.GetScreenRefreshRate() << std::endl;
55
56 bool ret = ChangeScreenActiveMode();
57 if (!ret) {
58 break;
59 }
60 }
61
62 rsInterface_.SetScreenActiveMode(defaultDisplayId_, defaultModeId_);
63 RSScreenModeInfo currScreenMode = rsInterface_.GetScreenActiveMode(defaultDisplayId_);
64 std::cout << "The current active screen mode :\n modeId: " << currScreenMode.GetScreenModeId() <<", " <<
65 currScreenMode.GetScreenWidth() << "x" << currScreenMode.GetScreenHeight() <<
66 ", refreshrate=" << currScreenMode.GetScreenRefreshRate() << std::endl;
67 std::cout << "Render service Client screen mode Demo.cpp testRun end\n";
68 }
69
~RSScreenModeTestCase()70 ~RSScreenModeTestCase() {};
71 private:
RSScreenModeTestCase()72 RSScreenModeTestCase() : rsInterface_(RSInterfaces::GetInstance())
73 {
74 defaultDisplayId_ = rsInterface_.GetDefaultScreenId();
75 supportedModes_ = rsInterface_.GetScreenSupportedModes(defaultDisplayId_);
76 RSScreenModeInfo defaultScreenMode = rsInterface_.GetScreenActiveMode(defaultDisplayId_);
77 defaultModeId_ = defaultScreenMode.GetScreenModeId();
78 };
79
ChangeScreenActiveMode()80 bool ChangeScreenActiveMode()
81 {
82 std::string inputStr;
83 std::cout << "\n\nPlase input screen mode id:\n";
84 std::cin >> inputStr;
85 uint32_t newScreenModeId = 0;
86 for (auto iter = inputStr.begin(); iter != inputStr.end(); iter++) {
87 if (*iter < '0' || *iter > '9') {
88 return false;
89 }
90 newScreenModeId *= 10; // 10 : decimal
91 newScreenModeId += (*iter - '0');
92 }
93
94 decltype(supportedModes_.size()) size = supportedModes_.size();
95 if (newScreenModeId >= size) {
96 std::cout << "The new screen mode id is " << newScreenModeId << ", please input correct value[0";
97 if (size == 1) {
98 std::cout << "]\n\n";
99 } else {
100 std::cout << "-" << (size - 1) << "]\n\n";
101 }
102 } else {
103 std::cout << "The new screen mode id is " << newScreenModeId << "\n\n";
104 rsInterface_.SetScreenActiveMode(defaultDisplayId_, newScreenModeId);
105 }
106 return true;
107 }
108
109 RSInterfaces& rsInterface_;
110 ScreenId defaultDisplayId_ = 0;
111 std::vector<RSScreenModeInfo> supportedModes_;
112 uint32_t defaultModeId_ = 0;
113 };
114
main()115 int main()
116 {
117 RSScreenModeTestCase::GetInstance().TestRun();
118 return 0;
119 }
120