/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: set ts=8 sts=2 et sw=2 tw=80: * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* * GC-internal enum definitions. */ #ifndef gc_GCEnum_h #define gc_GCEnum_h #include #include "js/MemoryFunctions.h" // JS_FOR_EACH_PUBLIC_MEMORY_USE namespace js { namespace gc { // The phases of an incremental GC. #define GCSTATES(D) \ D(NotActive) \ D(Prepare) \ D(MarkRoots) \ D(Mark) \ D(Sweep) \ D(Finalize) \ D(Compact) \ D(Decommit) \ D(Finish) enum class State { #define MAKE_STATE(name) name, GCSTATES(MAKE_STATE) #undef MAKE_STATE }; #define JS_FOR_EACH_ZEAL_MODE(D) \ D(RootsChange, 1) \ D(Alloc, 2) \ D(VerifierPre, 4) \ D(YieldBeforeRootMarking, 6) \ D(GenerationalGC, 7) \ D(YieldBeforeMarking, 8) \ D(YieldBeforeSweeping, 9) \ D(IncrementalMultipleSlices, 10) \ D(IncrementalMarkingValidator, 11) \ D(ElementsBarrier, 12) \ D(CheckHashTablesOnMinorGC, 13) \ D(Compact, 14) \ D(CheckHeapAfterGC, 15) \ D(YieldBeforeSweepingAtoms, 17) \ D(CheckGrayMarking, 18) \ D(YieldBeforeSweepingCaches, 19) \ D(YieldBeforeSweepingObjects, 21) \ D(YieldBeforeSweepingNonObjects, 22) \ D(YieldBeforeSweepingPropMapTrees, 23) \ D(CheckWeakMapMarking, 24) \ D(YieldWhileGrayMarking, 25) enum class ZealMode { #define ZEAL_MODE(name, value) name = value, JS_FOR_EACH_ZEAL_MODE(ZEAL_MODE) #undef ZEAL_MODE Count, Limit = Count - 1 }; } /* namespace gc */ // Reasons we reset an ongoing incremental GC or perform a non-incremental GC. #define GC_ABORT_REASONS(D) \ D(None, 0) \ D(NonIncrementalRequested, 1) \ D(AbortRequested, 2) \ D(Unused1, 3) \ D(IncrementalDisabled, 4) \ D(ModeChange, 5) \ D(MallocBytesTrigger, 6) \ D(GCBytesTrigger, 7) \ D(ZoneChange, 8) \ D(CompartmentRevived, 9) \ D(GrayRootBufferingFailed, 10) \ D(JitCodeBytesTrigger, 11) enum class GCAbortReason { #define MAKE_REASON(name, num) name = num, GC_ABORT_REASONS(MAKE_REASON) #undef MAKE_REASON }; #define JS_FOR_EACH_INTERNAL_MEMORY_USE(_) \ _(ArrayBufferContents) \ _(StringContents) \ _(ObjectElements) \ _(ObjectSlots) \ _(ScriptPrivateData) \ _(MapObjectTable) \ _(BigIntDigits) \ _(ScopeData) \ _(WeakMapObject) \ _(ShapeSetForAdd) \ _(PropMapChildren) \ _(PropMapTable) \ _(ModuleBindingMap) \ _(ModuleCyclicFields) \ _(ModuleExports) \ _(BaselineScript) \ _(IonScript) \ _(ArgumentsData) \ _(RareArgumentsData) \ _(RegExpSharedBytecode) \ _(RegExpSharedNamedCaptureData) \ _(TypedArrayElements) \ _(NativeIterator) \ _(JitScript) \ _(ScriptDebugScript) \ _(BreakpointSite) \ _(Breakpoint) \ _(ForOfPIC) \ _(ForOfPICStub) \ _(WasmInstanceExports) \ _(WasmInstanceScopes) \ _(WasmInstanceGlobals) \ _(WasmInstanceInstance) \ _(WasmMemoryObservers) \ _(WasmGlobalCell) \ _(WasmResolveResponseClosure) \ _(WasmModule) \ _(WasmTableTable) \ _(WasmExceptionData) \ _(WasmTagType) \ _(FileObjectFile) \ _(Debugger) \ _(DebuggerFrameGeneratorInfo) \ _(DebuggerFrameIterData) \ _(DebuggerOnStepHandler) \ _(DebuggerOnPopHandler) \ _(ICUObject) \ _(FinalizationRegistryRecordVector) \ _(FinalizationRegistryRegistrations) \ _(FinalizationRecordVector) \ _(TrackedAllocPolicy) \ _(SharedArrayRawBuffer) \ _(XDRBufferElements) \ _(GlobalObjectData) \ _(ProxyExternalValueArray) #define JS_FOR_EACH_MEMORY_USE(_) \ JS_FOR_EACH_PUBLIC_MEMORY_USE(_) \ JS_FOR_EACH_INTERNAL_MEMORY_USE(_) enum class MemoryUse : uint8_t { #define DEFINE_MEMORY_USE(Name) Name, JS_FOR_EACH_MEMORY_USE(DEFINE_MEMORY_USE) #undef DEFINE_MEMORY_USE }; } /* namespace js */ #endif /* gc_GCEnum_h */