1 /*
2  * Copyright (C) 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 #include <gtest/gtest.h>
16 #include <iostream>
17 #include <sstream>
18 #include <thread>
19 #include "unistd.h"
20 #include "sp_utils.h"
21 #include "ByTrace.h"
22 
23 using namespace testing::ext;
24 using namespace std;
25 
26 namespace OHOS {
27 namespace SmartPerf {
28 class ByTraceTest : public testing::Test {
29 public:
SetUpTestCase()30     static void SetUpTestCase() {}
TearDownTestCase()31     static void TearDownTestCase() {}
32 
SetUp()33     void SetUp() {}
TearDown()34     void TearDown() {}
35 };
36 
HWTEST_F(ByTraceTest, ThreadGetTraceTest, TestSize.Level1)37 HWTEST_F(ByTraceTest, ThreadGetTraceTest, TestSize.Level1)
38 {
39     ByTrace &byTrace = ByTrace::GetInstance();
40     std::string result;
41     std::string cmdString;
42     if (SPUtils::IsHmKernel()) {
43         cmdString = "hitrace --trace_clock mono -t 10 -b 102400 --overwrite idle ace app ohos ability graphic nweb ";
44     } else {
45         cmdString = "hitrace --trace_clock mono -t 10 -b 204800 --overwrite idle ace app ohos ability graphic nweb ";
46     }
47     std::string cmdStringEnd = "sched freq sync workq multimodalinput > ";
48     std::string file = "/data/local/tmp/sptrace_";
49     std::string time = std::to_string(SPUtils::GetCurTime());
50     std::string traceFile = file + time + ".ftrace";
51     std::string traceCmdExe = cmdString + cmdStringEnd + traceFile;
52     auto ret = SPUtils::LoadCmd(traceCmdExe, result);
53     byTrace.ThreadGetTrace();
54 
55     EXPECT_EQ(ret, true);
56 }
57 
HWTEST_F(ByTraceTest, CheckFpsJittersTest, TestSize.Level1)58 HWTEST_F(ByTraceTest, CheckFpsJittersTest, TestSize.Level1)
59 {
60     ByTrace &byTrace = ByTrace::GetInstance();
61     std::vector<long long> jitters = {1000000, 2000000, 3000000};
62     int cfps = 30;
63     TraceStatus result = byTrace.CheckFpsJitters(jitters, cfps);
64 
65     EXPECT_EQ(result, TraceStatus::TRACE_FINISH);
66 }
67 
HWTEST_F(ByTraceTest, CheckHitraceIdTest, TestSize.Level1)68 HWTEST_F(ByTraceTest, CheckHitraceIdTest, TestSize.Level1)
69 {
70     ByTrace &byTrace = ByTrace::GetInstance();
71     std::string result;
72     std::string cmd = "ps -ef |grep hitrace |grep -v grep";
73     SPUtils::LoadCmd(cmd, result);
74     bool resultCheck = byTrace.CheckHitraceId();
75 
76     ASSERT_FALSE(resultCheck);
77 }
78 }
79 }