#ifndef MRT_STATS_H
#define MRT_STATS_H
#include <algorithm>
#include <atomic>
#include <list>
#include <memory>
#include <mutex>
#include "Base/ImmortalWrapper.h"
#include "Base/Panic.h"
#include "GcRequest.h"
namespace MapleRuntime {
class GCStats {
public:
GCStats() = default;
~GCStats() = default;
void Init();
size_t GetThreshold() const { return heapThreshold; }
void Dump() const;
static uint64_t GetPrevGCStartTime() { return prevGcStartTime; }
static void SetPrevGCStartTime(uint64_t timestamp) { prevGcStartTime = timestamp; }
static uint64_t GetPrevGCFinishTime() { return prevGcFinishTime; }
static void SetPrevGCFinishTime(uint64_t timestamp) { prevGcFinishTime = timestamp; }
static uint64_t prevGcStartTime;
static uint64_t prevGcFinishTime;
GCReason reason;
bool isConcurrentMark;
bool async;
uint64_t gcStartTime;
uint64_t gcEndTime;
size_t liveBytesBeforeGC;
size_t liveBytesAfterGC;
size_t fromSpaceSize;
size_t smallGarbageSize;
size_t pinnedSpaceSize;
size_t pinnedGarbageSize;
size_t largeSpaceSize;
size_t largeGarbageSize;
size_t collectedBytes;
size_t collectedObjects;
double garbageRatio;
double collectionRate;
size_t heapThreshold;
};
extern size_t g_gcCount;
extern uint64_t g_gcTotalTimeUs;
extern size_t g_gcCollectedTotalBytes;
}
#endif