%PDF- %PDF-
| Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/heap/ |
| Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/heap/marking-state.h |
// Copyright 2022 the V8 project 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 V8_HEAP_MARKING_STATE_H_
#define V8_HEAP_MARKING_STATE_H_
#include "src/common/globals.h"
#include "src/heap/marking.h"
#include "src/objects/heap-object.h"
namespace v8 {
namespace internal {
class BasicMemoryChunk;
class MemoryChunk;
template <typename ConcreteState, AccessMode access_mode>
class MarkingStateBase {
public:
explicit MarkingStateBase(PtrComprCageBase cage_base)
#if V8_COMPRESS_POINTERS
: cage_base_(cage_base)
#endif
{
}
// The pointer compression cage base value used for decompression of all
// tagged values except references to InstructionStream objects.
V8_INLINE PtrComprCageBase cage_base() const {
#if V8_COMPRESS_POINTERS
return cage_base_;
#else
return PtrComprCageBase{};
#endif // V8_COMPRESS_POINTERS
}
V8_INLINE bool TryMark(Tagged<HeapObject> obj);
// Helper method for fully marking an object and accounting its live bytes.
// Should be used to mark individual objects in one-off cases.
V8_INLINE bool TryMarkAndAccountLiveBytes(Tagged<HeapObject> obj);
// Same, but does not require the object to be initialized.
V8_INLINE bool TryMarkAndAccountLiveBytes(Tagged<HeapObject> obj,
int object_size);
V8_INLINE bool IsMarked(const Tagged<HeapObject> obj) const;
V8_INLINE bool IsUnmarked(const Tagged<HeapObject> obj) const;
private:
#if V8_COMPRESS_POINTERS
const PtrComprCageBase cage_base_;
#endif // V8_COMPRESS_POINTERS
};
// This is used by marking visitors.
class MarkingState final
: public MarkingStateBase<MarkingState, AccessMode::ATOMIC> {
public:
explicit MarkingState(PtrComprCageBase cage_base)
: MarkingStateBase(cage_base) {}
};
class NonAtomicMarkingState final
: public MarkingStateBase<NonAtomicMarkingState, AccessMode::NON_ATOMIC> {
public:
explicit NonAtomicMarkingState(PtrComprCageBase cage_base)
: MarkingStateBase(cage_base) {}
};
} // namespace internal
} // namespace v8
#endif // V8_HEAP_MARKING_STATE_H_