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