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 #ifndef PLUGNFPS_H
16 #define PLUGNFPS_H
17 #include <vector>
18 #include "sp_profiler.h"
19 #include <queue>
20 namespace OHOS {
21 namespace SmartPerf {
22 struct FpsInfoProfiler {
23     int fps;
24     std::vector<long long> jitters;
25     std::vector<long long> currTimeStamps;
26     int curTime;
27     long long currTimeDiff;
28     long long currTimeDump;
ClearOHOS::SmartPerf::FpsInfoProfiler29     void Clear()
30     {
31         fps = 0;
32         jitters.clear();
33         currTimeDiff = 0;
34         currTimeDump = 0;
35     }
operator ==OHOS::SmartPerf::FpsInfoProfiler36     bool operator == (const FpsInfoProfiler &other) const
37     {
38         if (fps != other.fps) {
39             return false;
40         }
41         if (jitters.size() != other.jitters.size()) {
42             return false;
43         }
44         for (size_t i = 0; i < jitters.size(); i++) {
45             if (jitters[i] != other.jitters[i]) {
46                 return false;
47             }
48         }
49         return true;
50     }
FpsInfoProfilerOHOS::SmartPerf::FpsInfoProfiler51     FpsInfoProfiler()
52     {
53         fps = 0;
54         curTime = 0;
55         currTimeDiff = 0;
56         currTimeDump = 0;
57     }
58 };
59 class ProfilerFPS : public SpProfiler {
60 public:
61     void SetTraceCatch();
62     void SetGameLayer(std::string isGameView);
63     std::string GetGameLayer();
64     void SetPackageName(std::string pName);
65     void GetFPS(std::vector<std::string> v);
66     void GetResultFPS(int sectionsNum);
67     FpsInfoProfiler GetFpsInfo();
68     FpsInfoProfiler selfRerderLayers(const std::string &gameLayer);
69     bool IsForeGround();
70     bool IsFindForeGround(std::string line) const;
71     void CalcFpsAndJitters();
72     FpsInfoProfiler GetSurfaceFrame(std::string name);
73     void PrintSections(int msCount, long long currTimeLast, long long currTimeStart, long long currLastTime) const;
74     void GetSectionsFps(FpsInfoProfiler &fpsInfoResult, int nums) const;
75     void GetSectionsPrint(int printCount, long long msStartTime, int numb, long long harTime) const;
76     void GetTimeDiff();
77     void GetCurrentTime(int sleepNum);
78     void GetOhFps(std::vector<std::string> v);
79     void SetRkFlag();
80     std::string GetSurface();
81     FpsInfoProfiler fpsInfo;
82     FpsInfoProfiler fpsInfoMax;
83     FpsInfoProfiler lastFpsInfoResult;
GetInstance()84     static ProfilerFPS &GetInstance()
85     {
86         static ProfilerFPS instance;
87         return instance;
88     }
89     std::map<std::string, std::string> ItemData() override;
90     void SetProcessId(const std::string &pid);
91 private:
ProfilerFPS()92     ProfilerFPS() {};
93     ProfilerFPS(const ProfilerFPS &);
94     ProfilerFPS &operator = (const ProfilerFPS &);
95 
96     std::string pkgName;
97     int num = 1;
98     int number = 2;
99     bool refresh = false;
100     long long mod = 1e9;
101     long long curScreenTimestamp = 0;
102     long long prevScreenTimestamp = -1;
103     long long prevlastScreenTimestamp = 0;
104     int fpsNum = 0;
105     bool isFirstResult = false;
106     long oneSec = 1000000;
107     unsigned long sleepTime = 950000;
108     unsigned long sleepNowTime = 10000;
109     int ten = 10;
110     int four = 4;
111     int fifty = 50;
112     long long lastCurrTime = 0;
113     long long oneThousand = 1000;
114     long long msClear = 1000000000;
115     long long currRealTime = 0;
116     bool isFoundAppName = false;
117     bool isFoundBundleName = false;
118     int isCatchTrace = 0;
119     std::string isGameLayer = "";
120     bool processFlag = false;
121     bool ohFlag = false;
122     std::string processId = "";
123     bool rkFlag = false;
124 };
125 }
126 }
127 #endif