| Index: Source/platform/heap/ThreadState.h
|
| diff --git a/Source/platform/heap/ThreadState.h b/Source/platform/heap/ThreadState.h
|
| index 5269820c6417a1cff55af4d7d8237da95eed2fb1..df0f32fecff1a6b7b878546f8f8f38bf0bf3410a 100644
|
| --- a/Source/platform/heap/ThreadState.h
|
| +++ b/Source/platform/heap/ThreadState.h
|
| @@ -33,6 +33,7 @@
|
|
|
| #include "platform/PlatformExport.h"
|
| #include "platform/heap/AddressSanitizer.h"
|
| +#include "platform/heap/Profiling.h"
|
| #include "wtf/HashSet.h"
|
| #include "wtf/OwnPtr.h"
|
| #include "wtf/PassOwnPtr.h"
|
| @@ -41,6 +42,10 @@
|
| #include "wtf/ThreadingPrimitives.h"
|
| #include "wtf/Vector.h"
|
|
|
| +#if GC_PROFILE_HEAP
|
| +#include "wtf/HashMap.h"
|
| +#endif
|
| +
|
| namespace WebCore {
|
|
|
| class BaseHeap;
|
| @@ -495,11 +500,40 @@ public:
|
| // the object to which it points.
|
| bool checkAndMarkPointer(Visitor*, Address);
|
|
|
| -#if ENABLE(GC_TRACING)
|
| +#if GC_PROFILE_MARKING
|
| const GCInfo* findGCInfo(Address);
|
| static const GCInfo* findGCInfoFromAllThreads(Address);
|
| #endif
|
|
|
| +#if GC_PROFILE_HEAP
|
| + struct SnapshotInfo {
|
| + ThreadState* state;
|
| +
|
| + size_t liveSize;
|
| + size_t deadSize;
|
| + size_t freeSize;
|
| + size_t pageCount;
|
| +
|
| + // Map from base-classes to a snapshot class-ids (used as index below).
|
| + HashMap<const GCInfo*, size_t> classTags;
|
| +
|
| + // Map from class-id (index) to count.
|
| + Vector<int> liveCount;
|
| + Vector<int> deadCount;
|
| +
|
| + // Map from class-id (index) to a vector of generation counts.
|
| + // For i < 7, the count is the number of objects that died after surviving |i| GCs.
|
| + // For i == 7, the count is the number of objects that survived at least 7 GCs.
|
| + Vector<Vector<int, 8> > generations;
|
| +
|
| + SnapshotInfo(ThreadState* state) : state(state), liveSize(0), deadSize(0), freeSize(0), pageCount(0) { }
|
| +
|
| + size_t getClassTag(const GCInfo*);
|
| + };
|
| +
|
| + void snapshot();
|
| +#endif
|
| +
|
| void pushWeakObjectPointerCallback(void*, WeakPointerCallback);
|
| bool popAndInvokeWeakPointerCallback(Visitor*);
|
|
|
|
|