1 /* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved. 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 #include <gtest/gtest.h> 16 #include <fstream> 17 #include <string> 18 #include <iostream> 19 #include <regex> 20 #include <cmath> 21 #include <unordered_set> 22 #include "stalling_rate_trace.h" 23 #include "sp_log.h" 24 #include "sp_utils.h" 25 26 using namespace testing::ext; 27 using namespace std; 28 29 namespace OHOS { 30 namespace SmartPerf { 31 class StallingRateTraceTest : public testing::Test { 32 public: SetUpTestCase()33 static void SetUpTestCase() {} TearDownTestCase()34 static void TearDownTestCase() {} 35 SetUp()36 void SetUp() {} TearDown()37 void TearDown() {} 38 39 double nowFrameRate = 0; 40 double nowSwiperFrameRate = 0; 41 double nowTabsFrameRate = 0; 42 double oneThousand = 1000; 43 double roundTime = 0; 44 double roundSwiperTime = 0; 45 double roundTabsTime = 0; 46 int fenceId = 0; 47 int fenceIdSwiper = 0; 48 int fenceIdTabs = 0; 49 double nowTime = 0; 50 double nowSwiperTime = 0; 51 double nowTabsTime = 0; 52 double lastTime = 0; 53 double lastSwiperTime = 0; 54 double lastTabsTime = 0; 55 double frameLossTime = 0; 56 double frameLossRate = 0; 57 double frameLossSwiperTime = 0; 58 double frameLossTabsTime = 0; 59 double swiperFrameLossRate = 0; 60 double appFrameLossRate = 0; 61 double tabsFrameLossRate = 0; 62 double appListDynamicStartTime = 0; 63 double appListDynamicFinishTime = 0; 64 double appTabsDynamicStartTime = 0; 65 double appTabsDynamicFinishTime = 0; 66 double swiperDynamicStartTime = 0; 67 double swiperDynamicFinishTime = 0; 68 bool upperScreenFlag = false; 69 bool upperScreenSwiperFlag = false; 70 bool upperScreenTabsFlag = false; 71 int swiperScrollFlag = 0; 72 int swiperFlingFlag = 0; 73 bool listFlag = false; 74 bool tabsFlag = false; 75 bool swiperFlag = false; 76 }; 77 78 HWTEST_F(StallingRateTraceTest, StallingRateResultTest01, TestSize.Level1) 79 { 80 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 81 std::string file = "non_existent_file.txt"; 82 double result = stallingRateTrace.StallingRateResult(file); 83 EXPECT_EQ(result, 0); 84 } 85 86 HWTEST_F(StallingRateTraceTest, StallingRateResultTest02, TestSize.Level1) 87 { 88 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 89 EXPECT_EQ(stallingRateTrace.CalculateTime(), -1); 90 } 91 92 HWTEST_F(StallingRateTraceTest, StallingRateResultTest03, TestSize.Level1) 93 { 94 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 95 std::string filename = "test_input.txt"; 96 std::ifstream infile(filename); 97 EXPECT_NE(stallingRateTrace.CalculateTime(), 0); 98 } 99 100 HWTEST_F(StallingRateTraceTest, StallingRateResultTest04, TestSize.Level1) 101 { 102 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 103 std::string filename = "valid_input.txt"; 104 std::ifstream infile(filename); 105 double correctValue = -1; 106 EXPECT_EQ(stallingRateTrace.CalculateTime(), correctValue); 107 } 108 109 HWTEST_F(StallingRateTraceTest, CalcFrameRate01, TestSize.Level1) 110 { 111 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 112 appListDynamicStartTime = 100; 113 appListDynamicFinishTime= 200; 114 frameLossTime = 50; 115 stallingRateTrace.CalcFrameRate(); 116 EXPECT_EQ(appFrameLossRate, 0); 117 } 118 119 HWTEST_F(StallingRateTraceTest, CalcFrameRate02, TestSize.Level1) 120 { 121 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 122 appListDynamicStartTime = 0; 123 appListDynamicFinishTime= 200; 124 stallingRateTrace.CalcFrameRate(); 125 EXPECT_EQ(appFrameLossRate, 0); 126 } 127 128 HWTEST_F(StallingRateTraceTest, CalcFrameRate03, TestSize.Level1) 129 { 130 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 131 appListDynamicStartTime = 100; 132 appListDynamicFinishTime= 200; 133 frameLossSwiperTime = 50; 134 stallingRateTrace.CalcFrameRate(); 135 EXPECT_EQ(swiperFrameLossRate, 0); 136 } 137 138 HWTEST_F(StallingRateTraceTest, CalcFrameRate04, TestSize.Level1) 139 { 140 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 141 appListDynamicStartTime = 0; 142 appListDynamicFinishTime= 200; 143 stallingRateTrace.CalcFrameRate(); 144 EXPECT_EQ(swiperFrameLossRate, 0); 145 } 146 147 HWTEST_F(StallingRateTraceTest, CalcFrameRate05, TestSize.Level1) 148 { 149 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 150 appListDynamicStartTime = 100; 151 appListDynamicFinishTime= 200; 152 frameLossTabsTime = 50; 153 stallingRateTrace.CalcFrameRate(); 154 EXPECT_EQ(tabsFrameLossRate, 0); 155 } 156 157 HWTEST_F(StallingRateTraceTest, CalcFrameRate06, TestSize.Level1) 158 { 159 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 160 appListDynamicStartTime = 0; 161 appListDynamicFinishTime= 200; 162 stallingRateTrace.CalcFrameRate(); 163 EXPECT_EQ(tabsFrameLossRate, 0); 164 } 165 166 HWTEST_F(StallingRateTraceTest, JudgFrameRate01, TestSize.Level1) 167 { 168 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 169 appListDynamicFinishTime= 0; 170 swiperFlag = true; 171 tabsFlag = false; 172 stallingRateTrace.JudgFrameRate(); 173 EXPECT_EQ(frameLossRate, swiperFrameLossRate); 174 } 175 176 HWTEST_F(StallingRateTraceTest, JudgFrameRate02, TestSize.Level1) 177 { 178 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 179 appListDynamicFinishTime= 0; 180 swiperFlag = false; 181 tabsFlag = true; 182 stallingRateTrace.JudgFrameRate(); 183 EXPECT_EQ(frameLossRate, tabsFrameLossRate); 184 } 185 186 HWTEST_F(StallingRateTraceTest, JudgFrameRate03, TestSize.Level1) 187 { 188 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 189 appListDynamicFinishTime= 0; 190 swiperFlag = false; 191 tabsFlag = false; 192 stallingRateTrace.JudgFrameRate(); 193 EXPECT_EQ(frameLossRate, 0); 194 } 195 196 HWTEST_F(StallingRateTraceTest, JudgFrameRate04, TestSize.Level1) 197 { 198 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 199 appListDynamicFinishTime= 1; 200 swiperFlag = false; 201 tabsFlag = false; 202 stallingRateTrace.JudgFrameRate(); 203 EXPECT_EQ(frameLossRate, 0); 204 } 205 206 HWTEST_F(StallingRateTraceTest, AppList01, TestSize.Level1) 207 { 208 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 209 listFlag = false; 210 stallingRateTrace.AppList("test_line", "test_signS", "test_signF"); 211 EXPECT_EQ(appListDynamicFinishTime, stallingRateTrace.GetTimes("test_line", "test_signF")); 212 EXPECT_FALSE(listFlag); 213 } 214 215 HWTEST_F(StallingRateTraceTest, AppList02, TestSize.Level1) 216 { 217 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 218 listFlag = true; 219 stallingRateTrace.AppList("test_line", "test_signS", "test_signF"); 220 EXPECT_EQ(appListDynamicFinishTime, stallingRateTrace.GetTimes("test_line", "test_signS")); 221 EXPECT_TRUE(listFlag); 222 EXPECT_EQ(frameLossTime, 0); 223 } 224 225 HWTEST_F(StallingRateTraceTest, GetFrameLossTime01, TestSize.Level1) 226 { 227 double curTime = 10.0; 228 double prevTime = 5.0; 229 double drawTime = 3.0; 230 double totalFrameLossTime = 0.0; 231 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 232 stallingRateTrace.GetFrameLossTime(curTime, prevTime, drawTime, totalFrameLossTime); 233 EXPECT_EQ(totalFrameLossTime, 2.0); 234 } 235 236 HWTEST_F(StallingRateTraceTest, GetFrameLossTime02, TestSize.Level1) 237 { 238 double curTime = 5.0; 239 double prevTime = 5.0; 240 double drawTime = 3.0; 241 double totalFrameLossTime = 0.0; 242 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 243 stallingRateTrace.GetFrameLossTime(curTime, prevTime, drawTime, totalFrameLossTime); 244 EXPECT_EQ(totalFrameLossTime, 0.0); 245 } 246 247 HWTEST_F(StallingRateTraceTest, GetFrameLossTime03, TestSize.Level1) 248 { 249 double curTime = 10.0; 250 double prevTime = 0.0; 251 double drawTime = 3.0; 252 double totalFrameLossTime = 0.0; 253 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 254 stallingRateTrace.GetFrameLossTime(curTime, prevTime, drawTime, totalFrameLossTime); 255 EXPECT_EQ(totalFrameLossTime, 0.0); 256 } 257 258 HWTEST_F(StallingRateTraceTest, GetRsHardWareRate01, TestSize.Level1) 259 { 260 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 261 double curFrameRate = 10.0; 262 upperScreenFlag = true; 263 std::string line = "H:RSHardwareThread::CommitAndReleaseLayers"; 264 OHOS::SmartPerf::StallingRateTrace::SWIM_TYPE type = OHOS::SmartPerf::StallingRateTrace::SWIM_APPLIST; 265 stallingRateTrace.GetRsHardWareRate(curFrameRate, line, type); 266 EXPECT_TRUE(upperScreenFlag); 267 } 268 269 HWTEST_F(StallingRateTraceTest, GetRsHardWareRate02, TestSize.Level1) 270 { 271 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 272 double curFrameRate = 10.0; 273 upperScreenSwiperFlag = true; 274 std::string line = "H:RSHardwareThread::PerformSetActiveMode setting active mode"; 275 OHOS::SmartPerf::StallingRateTrace::SWIM_TYPE type = OHOS::SmartPerf::StallingRateTrace::SWIM_APPSWIPER; 276 stallingRateTrace.GetRsHardWareRate(curFrameRate, line, type); 277 EXPECT_TRUE(upperScreenSwiperFlag); 278 } 279 280 HWTEST_F(StallingRateTraceTest, GetRsHardWareRate03, TestSize.Level1) 281 { 282 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 283 double curFrameRate = 10.0; 284 upperScreenTabsFlag = true; 285 std::string line = "H:RSHardwareThread::CommitAndReleaseLayers"; 286 OHOS::SmartPerf::StallingRateTrace::SWIM_TYPE type = OHOS::SmartPerf::StallingRateTrace::SWIM_APPTABS; 287 stallingRateTrace.GetRsHardWareRate(curFrameRate, line, type); 288 EXPECT_TRUE(upperScreenTabsFlag); 289 } 290 291 HWTEST_F(StallingRateTraceTest, UpdateRoundTime01, TestSize.Level1) 292 { 293 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 294 stallingRateTrace.UpdateRoundTime(10, OHOS::SmartPerf::StallingRateTrace::SWIM_APPLIST); 295 EXPECT_EQ(roundTime, 0); 296 } 297 298 HWTEST_F(StallingRateTraceTest, UpdateRoundTime02, TestSize.Level1) 299 { 300 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 301 stallingRateTrace.UpdateRoundTime(10, OHOS::SmartPerf::StallingRateTrace::SWIM_APPSWIPER); 302 EXPECT_EQ(roundTime, 0); 303 } 304 305 HWTEST_F(StallingRateTraceTest, UpdateRoundTime03, TestSize.Level1) 306 { 307 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 308 stallingRateTrace.UpdateRoundTime(10, OHOS::SmartPerf::StallingRateTrace::SWIM_APPTABS); 309 EXPECT_EQ(roundTime, 0); 310 } 311 312 HWTEST_F(StallingRateTraceTest, UpdateRoundTime04, TestSize.Level1) 313 { 314 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 315 stallingRateTrace.UpdateRoundTime(0, OHOS::SmartPerf::StallingRateTrace::SWIM_APPLIST); 316 EXPECT_EQ(roundTime, 0); 317 } 318 319 HWTEST_F(StallingRateTraceTest, AppSwiperScroll01, TestSize.Level1) 320 { 321 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 322 std::string line = "some line"; 323 std::string signS = "some signS"; 324 std::string signF = "some signF"; 325 stallingRateTrace.AppSwiperScroll(line, signS, signF); 326 EXPECT_EQ(swiperScrollFlag, 0); 327 EXPECT_EQ(swiperFlag, false); 328 } 329 330 HWTEST_F(StallingRateTraceTest, AppSwiperScroll02, TestSize.Level1) 331 { 332 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 333 std::string line = "some line"; 334 std::string signS = "some signS"; 335 std::string signF = "some signF"; 336 swiperScrollFlag = 0; 337 swiperDynamicStartTime = -1; 338 stallingRateTrace.AppSwiperScroll(line, signS, signF); 339 EXPECT_NE(swiperDynamicStartTime, 0); 340 } 341 342 HWTEST_F(StallingRateTraceTest, AppSwiperScroll03, TestSize.Level1) 343 { 344 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 345 std::string line = "some line"; 346 std::string signS = "some signS"; 347 std::string signF = "some signF"; 348 swiperFlingFlag = 1; 349 swiperDynamicFinishTime = -1; 350 stallingRateTrace.AppSwiperScroll(line, signS, signF); 351 EXPECT_NE(swiperDynamicFinishTime, 0); 352 } 353 354 HWTEST_F(StallingRateTraceTest, APPTabs01, TestSize.Level1) 355 { 356 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 357 tabsFlag = false; 358 stallingRateTrace.APPTabs("test_line", "test_signS", "test_signF"); 359 EXPECT_EQ(appTabsDynamicFinishTime, stallingRateTrace.GetTimes("test_line", "test_signF")); 360 EXPECT_FALSE(tabsFlag); 361 } 362 363 HWTEST_F(StallingRateTraceTest, APPTabs02, TestSize.Level1) 364 { 365 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 366 tabsFlag = true; 367 stallingRateTrace.APPTabs("test_line", "test_signS", "test_signF"); 368 EXPECT_EQ(appTabsDynamicFinishTime, stallingRateTrace.GetTimes("test_line", "test_signS")); 369 EXPECT_TRUE(tabsFlag); 370 EXPECT_EQ(frameLossTabsTime, 0); 371 } 372 373 HWTEST_F(StallingRateTraceTest, APPTabs03, TestSize.Level1) 374 { 375 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 376 tabsFlag = false; 377 stallingRateTrace.APPTabs("test_line", "test_signS", "test_signF"); 378 EXPECT_EQ(appTabsDynamicFinishTime, stallingRateTrace.GetTimes("test_line", "test_signF")); 379 EXPECT_FALSE(tabsFlag); 380 } 381 382 HWTEST_F(StallingRateTraceTest, GetFrameRate01, TestSize.Level1) 383 { 384 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 385 std::string line = "rate: 60.0"; 386 double expectedRate = 60.0; 387 double actualRate = stallingRateTrace.GetFrameRate(line); 388 EXPECT_DOUBLE_EQ(expectedRate, actualRate); 389 } 390 391 HWTEST_F(StallingRateTraceTest, GetFrameRate02, TestSize.Level1) 392 { 393 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 394 std::string line = "now: 123456"; 395 double expectedRate = 0.0; 396 double actualRate = stallingRateTrace.GetFrameRate(line); 397 EXPECT_DOUBLE_EQ(expectedRate, actualRate); 398 } 399 400 HWTEST_F(StallingRateTraceTest, GetFrameRate03, TestSize.Level1) 401 { 402 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 403 std::string line = "now: 123456, rate: 60.0"; 404 double expectedRate = 60.0; 405 double actualRate = stallingRateTrace.GetFrameRate(line); 406 EXPECT_DOUBLE_EQ(expectedRate, actualRate); 407 } 408 409 HWTEST_F(StallingRateTraceTest, GetFenceId01, TestSize.Level1) 410 { 411 std::string line = "H:Present Fence 12345"; 412 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 413 int fenceId = stallingRateTrace.GetFenceId(line); 414 EXPECT_EQ(fenceId, 12345); 415 } 416 417 HWTEST_F(StallingRateTraceTest, GetFenceId02, TestSize.Level1) 418 { 419 std::string line = "H:Present Fence "; 420 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 421 int fenceId = stallingRateTrace.GetFenceId(line); 422 EXPECT_EQ(fenceId, 0); 423 } 424 425 HWTEST_F(StallingRateTraceTest, IsAppLaunchPatternMatched01, TestSize.Level1) 426 { 427 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 428 std::string line = "H:LAUNCHER_APP_LAUNCH_FROM_ICON,"; 429 EXPECT_TRUE(stallingRateTrace.IsAppLaunchPatternMatched(line)); 430 } 431 432 HWTEST_F(StallingRateTraceTest, IsAppLaunchPatternMatched02, TestSize.Level1) 433 { 434 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 435 std::string line = "H:NOT_A_MATCH"; 436 EXPECT_FALSE(stallingRateTrace.IsAppLaunchPatternMatched(line)); 437 } 438 439 HWTEST_F(StallingRateTraceTest, IsAppLaunchPatternMatched03, TestSize.Level1) 440 { 441 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 442 std::string line = "START H:LAUNCHER_APP_LAUNCH_FROM_ICON,"; 443 EXPECT_FALSE(stallingRateTrace.IsAppLaunchPatternMatched(line)); 444 } 445 446 HWTEST_F(StallingRateTraceTest, IsAppLaunchPatternMatched04, TestSize.Level1) 447 { 448 OHOS::SmartPerf::StallingRateTrace stallingRateTrace; 449 std::string line = "START H:LAUNCHER_APP_LAUNCH_FROM_ICON"; 450 EXPECT_FALSE(stallingRateTrace.IsAppLaunchPatternMatched(line)); 451 } 452 453 } 454 }