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