1 /*
2  * Copyright (C) 2024 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 #ifndef GPU_COUNTER_CALLBACK_H
17 #define GPU_COUNTER_CALLBACK_H
18 #include "vector"
19 
20 namespace OHOS {
21     namespace SmartPerf {
22         struct GpuPerfInfo {
23             int64_t remainTime = 0;
24             int64_t startTime = 0;
25             int32_t duration = 0;
26             uint32_t gpuActive = 0;
27             uint32_t drawCalls = 0;
28             uint64_t primitives = 0;
29             uint64_t vertexCounts = 0;
30             uint64_t totalInstruments = 0;
31             uint32_t gpuLoadPercentage = 0;
32             uint32_t vertexLoadPercentage = 0;
33             uint32_t fragmentLoadPercentage = 0;
34             uint32_t computeLoadPercentage = 0;
35             uint32_t textureLoadPercentage = 0;
36             uint32_t memoryReadBandwidth = 0;
37             uint32_t memoryWriteBandwidth = 0;
38             uint32_t memoryBandwidthPercentage = 0;
39         };
40 
41         class GpuCounterCallback {
42         public:
43             GpuCounterCallback() = default;
44             virtual ~GpuCounterCallback() = default;
45             virtual int OnGpuData(std::vector <GpuPerfInfo> &gpuPerfInfos) = 0;
46         };
47 
48         class GpuCounterCallbackImpl  : public GpuCounterCallback {
49         public:
50             GpuCounterCallbackImpl();
51             int OnGpuData(std::vector <GpuPerfInfo> &gpuPerfInfos) override;
52 
53         private:
54             void GetRealTime(GpuPerfInfo *newData);
55             void JoinSocketDataValue(GpuPerfInfo *newData);
56             unsigned long long JoinSocketDataPercentFunction(uint32_t itemFirst, int32_t durationFirst,
57                 uint32_t itemSecond, int32_t durationSecond) const;
58             void JoinSocketDataPercent(GpuPerfInfo *newData);
59             void JoinSocketData(GpuPerfInfo *newData);
60             unsigned long long SplitSocketDataValueFunction(uint32_t value, int32_t interval, int32_t duration) const;
61             void SplitSocketDataValue(int32_t interval);
62             void SplitSocketDataPercent();
63             void SplitSocketData();
64             std::vector<GpuPerfInfo> gpuCounter;
65             const long long collectInterval = 50;
66             const int64_t maxTime = 10800000;
67             const int64_t restartTime = 300000;
68             const int32_t maxDuration = 1000;
69             GpuPerfInfo realtimeGpuPerfInfoData;
70         };
71     }
72 }
73 
74 #endif
75