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