blob: 54a7e01778c26107bf1d4cf5f935386f7a4a201d [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BlinkGC_h
#define BlinkGC_h
// BlinkGC.h is a file that defines common things used by Blink GC.
#include "platform/PlatformExport.h"
#include "wtf/Allocator.h"
namespace blink {
class Visitor;
#define PRINT_HEAP_STATS 0 // Enable this macro to print heap stats to stderr.
using Address = uint8_t*;
using FinalizationCallback = void (*)(void*);
using VisitorCallback = void (*)(Visitor*, void* self);
using TraceCallback = VisitorCallback;
using WeakCallback = VisitorCallback;
using EphemeronCallback = VisitorCallback;
using PreFinalizerCallback = bool(*)(void*);
// List of typed arenas. The list is used to generate the implementation
// of typed arena related methods.
//
// To create a new typed arena add a H(<ClassName>) to the
// FOR_EACH_TYPED_ARENA macro below.
#define FOR_EACH_TYPED_ARENA(H) \
H(Node) \
H(CSSValue)
#define TypedArenaEnumName(Type) Type##ArenaIndex,
class PLATFORM_EXPORT BlinkGC final {
STATIC_ONLY(BlinkGC);
public:
// When garbage collecting we need to know whether or not there
// can be pointers to Blink GC managed objects on the stack for
// each thread. When threads reach a safe point they record
// whether or not they have pointers on the stack.
enum StackState {
NoHeapPointersOnStack,
HeapPointersOnStack
};
enum GCType {
// Both of the marking task and the sweeping task run in
// ThreadHeap::collectGarbage().
GCWithSweep,
// Only the marking task runs in ThreadHeap::collectGarbage().
// The sweeping task is split into chunks and scheduled lazily.
GCWithoutSweep,
// Only the marking task runs just to take a heap snapshot.
// The sweeping task doesn't run. The marks added in the marking task
// are just cleared.
TakeSnapshot,
// The marking task does not mark objects outside the heap of the GCing
// thread.
ThreadTerminationGC,
// Just run thread-local weak processing. The weak processing may trace
// already marked objects but it must not trace any unmarked object.
// It's unfortunate that the thread-local weak processing requires
// a marking visitor. See TODO in HashTable::process.
ThreadLocalWeakProcessing,
};
enum GCReason {
IdleGC,
PreciseGC,
ConservativeGC,
ForcedGC,
MemoryPressureGC,
PageNavigationGC,
NumberOfGCReason,
};
enum HeapIndices {
EagerSweepArenaIndex = 0,
NormalPage1ArenaIndex,
NormalPage2ArenaIndex,
NormalPage3ArenaIndex,
NormalPage4ArenaIndex,
Vector1ArenaIndex,
Vector2ArenaIndex,
Vector3ArenaIndex,
Vector4ArenaIndex,
InlineVectorArenaIndex,
HashTableArenaIndex,
FOR_EACH_TYPED_ARENA(TypedArenaEnumName)
LargeObjectArenaIndex,
// Values used for iteration of heap segments.
NumberOfArenas,
};
enum V8GCType {
V8MinorGC,
V8MajorGC,
};
};
} // namespace blink
#endif