• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 ECMASCRIPT_MEM_LONG_GC_STATS_H
17 #define ECMASCRIPT_MEM_LONG_GC_STATS_H
18 #include <cstddef>
19 #include "ecmascript/mem/mem_common.h"
20 
21 namespace panda::ecmascript {
22 class LongGCStats {
23 public:
24     ~LongGCStats() = default;
25 
Reset()26     void Reset()
27     {
28         gcType_ = 0;
29         gcReason_ = 0;
30         gcIsSensitive_ = false;
31         gcIsInBackground_ = false;
32         gcTotalTime_ = 0.0f;
33         gcMarkTime_ = 0.0f;
34         gcEvacuateTime_ = 0.0f;
35         gcUpdateRootTime_ = 0.0f;
36         gcUpdateWeekRefTime_ = 0.0f;
37         gcUpdateReferenceTime_ = 0.0f;
38         gcSweepNewToOldTime_ = 0.0f;
39         gcFinalizeTime_ = 0.0f;
40         gcInvokeCallbackTime_ = 0.0f;
41         beforeGCTotalMemUsed_ = 0;
42         beforeGCTotalMemCommitted_ = 0;
43         beforeGCActiveMemUsed_ = 0;
44         beforeGCActiveMemCommitted_ = 0;
45         beforeGCOldMemUsed_ = 0;
46         beforeGCOldMemCommitted_ = 0;
47         beforeGCHugeMemUsed_ = 0;
48         beforeGCHugeMemCommitted_ = 0;
49         beforeGCNativeBindingSize_ = 0;
50         beforeGCNativeLimit_ = 0;
51         afterGCTotalMemUsed_ = 0;
52         afterGCTotalMemCommitted_ = 0;
53         afterGCActiveMemUsed_ = 0;
54         afterGCActiveMemCommitted_ = 0;
55         afterGCOldMemUsed_ = 0;
56         afterGCOldMemCommitted_ = 0;
57         afterGCHugeMemUsed_ = 0;
58         afterGCHugeMemCommitted_ = 0;
59         afterGCNativeBindingSize_ = 0;
60         afterGCNativeLimit_ = 0;
61         cpuLoad_ = 0.0;
62     }
SizeToIntKB(size_t size)63     static int SizeToIntKB(size_t size)
64     {
65         return static_cast<int>(size / 1_KB);
66     }
GetGCType()67     size_t GetGCType() const
68     {
69         return gcType_;
70     }
SetGCType(size_t gcType)71     void SetGCType(size_t gcType)
72     {
73         gcType_ = gcType;
74     }
75 
GetGCReason()76     size_t GetGCReason() const
77     {
78         return gcReason_;
79     }
SetGCReason(size_t gcReason)80     void SetGCReason(size_t gcReason)
81     {
82         gcReason_ = gcReason;
83     }
84 
GetGCIsSensitive()85     bool GetGCIsSensitive() const
86     {
87         return gcIsSensitive_;
88     }
SetGCIsSensitive(bool gcIsSensitive)89     void SetGCIsSensitive(bool gcIsSensitive)
90     {
91         gcIsSensitive_ = gcIsSensitive;
92     }
93 
GetGCIsInBackground()94     bool GetGCIsInBackground() const
95     {
96         return gcIsInBackground_;
97     }
SetGCIsInBackground(bool gcIsInBackground)98     void SetGCIsInBackground(bool gcIsInBackground)
99     {
100         gcIsInBackground_ = gcIsInBackground;
101     }
102 
GetGCTotalTime()103     float GetGCTotalTime() const
104     {
105         return gcTotalTime_;
106     }
SetGCTotalTime(float gcTotalTime)107     void SetGCTotalTime(float gcTotalTime)
108     {
109         gcTotalTime_ = gcTotalTime;
110     }
111 
GetGCMarkTime()112     float GetGCMarkTime() const
113     {
114         return gcMarkTime_;
115     }
SetGCMarkTime(float gcMarkTime)116     void SetGCMarkTime(float gcMarkTime)
117     {
118         gcMarkTime_ = gcMarkTime;
119     }
120 
GetGCEvacuateTime()121     float GetGCEvacuateTime() const
122     {
123         return gcEvacuateTime_;
124     }
SetGCEvacuateTime(float gcEvacuateTime)125     void SetGCEvacuateTime(float gcEvacuateTime)
126     {
127         gcEvacuateTime_ = gcEvacuateTime;
128     }
129 
GetGCUpdateRootTime()130     float GetGCUpdateRootTime() const
131     {
132         return gcUpdateRootTime_;
133     }
SetGCUpdateRootTime(float gcUpdateRootTime)134     void SetGCUpdateRootTime(float gcUpdateRootTime)
135     {
136         gcUpdateRootTime_ = gcUpdateRootTime;
137     }
138 
GetGCUpdateWeekRefTime()139     float GetGCUpdateWeekRefTime() const
140     {
141         return gcUpdateWeekRefTime_;
142     }
SetGCUpdateWeekRefTime(float gcUpdateWeekRefTime)143     void SetGCUpdateWeekRefTime(float gcUpdateWeekRefTime)
144     {
145         gcUpdateWeekRefTime_ = gcUpdateWeekRefTime;
146     }
147 
GetGCUpdateReferenceTime()148     float GetGCUpdateReferenceTime() const
149     {
150         return gcUpdateReferenceTime_;
151     }
SetGCUpdateReferenceTime(float gcUpdateReferenceTime)152     void SetGCUpdateReferenceTime(float gcUpdateReferenceTime)
153     {
154         gcUpdateReferenceTime_ = gcUpdateReferenceTime;
155     }
156 
GetGCSweepNewToOldTime()157     float GetGCSweepNewToOldTime() const
158     {
159         return gcSweepNewToOldTime_;
160     }
SetGCSweepNewToOldTime(float gcSweepNewToOldTime)161     void SetGCSweepNewToOldTime(float gcSweepNewToOldTime)
162     {
163         gcSweepNewToOldTime_ = gcSweepNewToOldTime;
164     }
165 
GetGCFinalizeTime()166     float GetGCFinalizeTime() const
167     {
168         return gcFinalizeTime_;
169     }
SetGCFinalizeTime(float gcFinalizeTime)170     void SetGCFinalizeTime(float gcFinalizeTime)
171     {
172         gcFinalizeTime_ = gcFinalizeTime;
173     }
174 
GetGCInvokeCallbackTime()175     float GetGCInvokeCallbackTime() const
176     {
177         return gcInvokeCallbackTime_;
178     }
SetGCInvokeCallbackTime(float gcInvokeCallbackTime)179     void SetGCInvokeCallbackTime(float gcInvokeCallbackTime)
180     {
181         gcInvokeCallbackTime_ = gcInvokeCallbackTime;
182     }
183 
GetBeforeGCTotalMemUsed()184     size_t GetBeforeGCTotalMemUsed() const
185     {
186         return beforeGCTotalMemUsed_;
187     }
SetBeforeGCTotalMemUsed(size_t beforeGCTotalMemUsed)188     void SetBeforeGCTotalMemUsed(size_t beforeGCTotalMemUsed)
189     {
190         beforeGCTotalMemUsed_ = beforeGCTotalMemUsed;
191     }
192 
GetBeforeGCTotalMemCommitted()193     size_t GetBeforeGCTotalMemCommitted() const
194     {
195         return beforeGCTotalMemCommitted_;
196     }
SetBeforeGCTotalMemCommitted(size_t beforeGCTotalMemCommitted)197     void SetBeforeGCTotalMemCommitted(size_t beforeGCTotalMemCommitted)
198     {
199         beforeGCTotalMemCommitted_ = beforeGCTotalMemCommitted;
200     }
201 
GetBeforeGCActiveMemUsed()202     size_t GetBeforeGCActiveMemUsed() const
203     {
204         return beforeGCActiveMemUsed_;
205     }
SetBeforeGCActiveMemUsed(size_t beforeGCActiveMemUsed)206     void SetBeforeGCActiveMemUsed(size_t beforeGCActiveMemUsed)
207     {
208         beforeGCActiveMemUsed_ = beforeGCActiveMemUsed;
209     }
210 
GetBeforeGCActiveMemCommitted()211     size_t GetBeforeGCActiveMemCommitted() const
212     {
213         return beforeGCActiveMemCommitted_;
214     }
SetBeforeGCActiveMemCommitted(size_t beforeGCActiveMemCommitted)215     void SetBeforeGCActiveMemCommitted(size_t beforeGCActiveMemCommitted)
216     {
217         beforeGCActiveMemCommitted_ = beforeGCActiveMemCommitted;
218     }
219 
GetBeforeGCOldMemUsed()220     size_t GetBeforeGCOldMemUsed() const
221     {
222         return beforeGCOldMemUsed_;
223     }
SetBeforeGCOldMemUsed(size_t beforeGCOldMemUsed)224     void SetBeforeGCOldMemUsed(size_t beforeGCOldMemUsed)
225     {
226         beforeGCOldMemUsed_ = beforeGCOldMemUsed;
227     }
228 
GetBeforeGCOldMemCommitted()229     size_t GetBeforeGCOldMemCommitted() const
230     {
231         return beforeGCOldMemCommitted_;
232     }
SetBeforeGCOldMemCommitted(size_t beforeGCOldMemCommitted)233     void SetBeforeGCOldMemCommitted(size_t beforeGCOldMemCommitted)
234     {
235         beforeGCOldMemCommitted_ = beforeGCOldMemCommitted;
236     }
237 
GetBeforeGCHugeMemUsed()238     size_t GetBeforeGCHugeMemUsed() const
239     {
240         return beforeGCHugeMemUsed_;
241     }
SetBeforeGCHugeMemUsed(size_t beforeGCHugeMemUsed)242     void SetBeforeGCHugeMemUsed(size_t beforeGCHugeMemUsed)
243     {
244         beforeGCHugeMemUsed_ = beforeGCHugeMemUsed;
245     }
246 
GetBeforeGCHugeMemCommitted()247     size_t GetBeforeGCHugeMemCommitted() const
248     {
249         return beforeGCHugeMemCommitted_;
250     }
SetBeforeGCHugeMemCommitted(size_t beforeGCHugeMemCommitted)251     void SetBeforeGCHugeMemCommitted(size_t beforeGCHugeMemCommitted)
252     {
253         beforeGCHugeMemCommitted_ = beforeGCHugeMemCommitted;
254     }
255 
GetBeforeGCNativeBindingSize()256     size_t GetBeforeGCNativeBindingSize() const
257     {
258         return beforeGCNativeBindingSize_;
259     }
SetBeforeGCNativeBindingSize(size_t beforeGCNativeBindingSize)260     void SetBeforeGCNativeBindingSize(size_t beforeGCNativeBindingSize)
261     {
262         beforeGCNativeBindingSize_ = beforeGCNativeBindingSize;
263     }
264 
GetBeforeGCNativeLimit()265     size_t GetBeforeGCNativeLimit() const
266     {
267         return beforeGCNativeLimit_;
268     }
SetBeforeGCNativeLimit(size_t beforeGCNativeLimit)269     void SetBeforeGCNativeLimit(size_t beforeGCNativeLimit)
270     {
271         beforeGCNativeLimit_ = beforeGCNativeLimit;
272     }
273 
GetAfterGCTotalMemUsed()274     size_t GetAfterGCTotalMemUsed() const
275     {
276         return afterGCTotalMemUsed_;
277     }
SetAfterGCTotalMemUsed(size_t afterGCTotalMemUsed)278     void SetAfterGCTotalMemUsed(size_t afterGCTotalMemUsed)
279     {
280         afterGCTotalMemUsed_ = afterGCTotalMemUsed;
281     }
282 
GetAfterGCTotalMemCommitted()283     size_t GetAfterGCTotalMemCommitted() const
284     {
285         return afterGCTotalMemCommitted_;
286     }
SetAfterGCTotalMemCommitted(size_t afterGCTotalMemCommitted)287     void SetAfterGCTotalMemCommitted(size_t afterGCTotalMemCommitted)
288     {
289         afterGCTotalMemCommitted_ = afterGCTotalMemCommitted;
290     }
291 
GetAfterGCActiveMemUsed()292     size_t GetAfterGCActiveMemUsed() const
293     {
294         return afterGCActiveMemUsed_;
295     }
SetAfterGCActiveMemUsed(size_t afterGCActiveMemUsed)296     void SetAfterGCActiveMemUsed(size_t afterGCActiveMemUsed)
297     {
298         afterGCActiveMemUsed_ = afterGCActiveMemUsed;
299     }
300 
GetAfterGCActiveMemCommitted()301     size_t GetAfterGCActiveMemCommitted() const
302     {
303         return afterGCActiveMemCommitted_;
304     }
SetAfterGCActiveMemCommitted(size_t afterGCActiveMemCommitted)305     void SetAfterGCActiveMemCommitted(size_t afterGCActiveMemCommitted)
306     {
307         afterGCActiveMemCommitted_ = afterGCActiveMemCommitted;
308     }
309 
GetAfterGCOldMemUsed()310     size_t GetAfterGCOldMemUsed() const
311     {
312         return afterGCOldMemUsed_;
313     }
SetAfterGCOldMemUsed(size_t afterGCOldMemUsed)314     void SetAfterGCOldMemUsed(size_t afterGCOldMemUsed)
315     {
316         afterGCOldMemUsed_ = afterGCOldMemUsed;
317     }
318 
GetAfterGCOldMemCommitted()319     size_t GetAfterGCOldMemCommitted() const
320     {
321         return afterGCOldMemCommitted_;
322     }
SetAfterGCOldMemCommitted(size_t afterGCOldMemCommitted)323     void SetAfterGCOldMemCommitted(size_t afterGCOldMemCommitted)
324     {
325         afterGCOldMemCommitted_ = afterGCOldMemCommitted;
326     }
327 
GetAfterGCHugeMemUsed()328     size_t GetAfterGCHugeMemUsed() const
329     {
330         return afterGCHugeMemUsed_;
331     }
SetAfterGCHugeMemUsed(size_t afterGCHugeMemUsed)332     void SetAfterGCHugeMemUsed(size_t afterGCHugeMemUsed)
333     {
334         afterGCHugeMemUsed_ = afterGCHugeMemUsed;
335     }
336 
GetAfterGCHugeMemCommitted()337     size_t GetAfterGCHugeMemCommitted() const
338     {
339         return afterGCHugeMemCommitted_;
340     }
SetAfterGCHugeMemCommitted(size_t afterGCHugeMemCommitted)341     void SetAfterGCHugeMemCommitted(size_t afterGCHugeMemCommitted)
342     {
343         afterGCHugeMemCommitted_ = afterGCHugeMemCommitted;
344     }
345 
GetAfterGCNativeBindingSize()346     size_t GetAfterGCNativeBindingSize() const
347     {
348         return afterGCNativeBindingSize_;
349     }
SetAfterGCNativeBindingSize(size_t afterGCNativeBindingSize)350     void SetAfterGCNativeBindingSize(size_t afterGCNativeBindingSize)
351     {
352         afterGCNativeBindingSize_ = afterGCNativeBindingSize;
353     }
354 
GetAfterGCNativeLimit()355     size_t GetAfterGCNativeLimit() const
356     {
357         return afterGCNativeLimit_;
358     }
SetAfterGCNativeLimit(size_t afterGCNativeLimit)359     void SetAfterGCNativeLimit(size_t afterGCNativeLimit)
360     {
361         afterGCNativeLimit_ = afterGCNativeLimit;
362     }
363 
GetCpuLoad()364     double GetCpuLoad() const
365     {
366         return cpuLoad_;
367     }
SetCpuLoad(double cpuLoad)368     void SetCpuLoad(double cpuLoad)
369     {
370         cpuLoad_ = cpuLoad;
371     }
372 
373 private:
374     size_t gcType_ = 0;
375     size_t gcReason_ = 0;
376     bool gcIsSensitive_ = false;
377     bool gcIsInBackground_ = false;
378     float gcTotalTime_ = 0.0f;
379     float gcMarkTime_ = 0.0f;
380     float gcEvacuateTime_ = 0.0f;
381     float gcUpdateRootTime_ = 0.0f;
382     float gcUpdateWeekRefTime_ = 0.0f;
383     float gcUpdateReferenceTime_ = 0.0f;
384     float gcSweepNewToOldTime_ = 0.0f;
385     float gcFinalizeTime_ = 0.0f;
386     float gcInvokeCallbackTime_ = 0.0f;
387     size_t beforeGCTotalMemUsed_ = 0;
388     size_t beforeGCTotalMemCommitted_ = 0;
389     size_t beforeGCActiveMemUsed_ = 0;
390     size_t beforeGCActiveMemCommitted_ = 0;
391     size_t beforeGCOldMemUsed_ = 0;
392     size_t beforeGCOldMemCommitted_ = 0;
393     size_t beforeGCHugeMemUsed_ = 0;
394     size_t beforeGCHugeMemCommitted_ = 0;
395     size_t beforeGCNativeBindingSize_ = 0;
396     size_t beforeGCNativeLimit_ = 0;
397     size_t afterGCTotalMemUsed_ = 0;
398     size_t afterGCTotalMemCommitted_ = 0;
399     size_t afterGCActiveMemUsed_ = 0;
400     size_t afterGCActiveMemCommitted_ = 0;
401     size_t afterGCOldMemUsed_ = 0;
402     size_t afterGCOldMemCommitted_ = 0;
403     size_t afterGCHugeMemUsed_ = 0;
404     size_t afterGCHugeMemCommitted_ = 0;
405     size_t afterGCNativeBindingSize_ = 0;
406     size_t afterGCNativeLimit_ = 0;
407     double cpuLoad_ = 0.0;
408 };
409 }  // namespace panda::ecmascript
410 
411 #endif  // ECMASCRIPT_MEM_LONG_GC_STATS_H