[static-roots] Use operator== in HeapObject::Is##Type
Replace SafeEquals with normal equals operator in `IsUndefined` and friends. This will allow us to have more efficient checks with static roots, since pointers do not need to be decompressed. After this change calling Is##Type on CodeObjects is no longer possible. This is ensured by dchecks in operator==. The change might reveal more callers that need to be fixed. Bug: v8:13466 Change-Id: I3353d10aebb7a192a77281c44e4159f0da336297 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4106849 Reviewed-by: Camillo Bruni <cbruni@chromium.org> Commit-Queue: Camillo Bruni <cbruni@chromium.org> Reviewed-by: Dominik Inführ <dinfuehr@chromium.org> Auto-Submit: Olivier Flückiger <olivf@chromium.org> Cr-Commit-Position: refs/heads/main@{#84974}
This commit is contained in:
parent
53e7cf253a
commit
f6d85958e0
@ -53,6 +53,7 @@ class Utils;
|
|||||||
namespace internal {
|
namespace internal {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class CustomArguments;
|
class CustomArguments;
|
||||||
|
class SamplingHeapProfiler;
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
|
||||||
namespace api_internal {
|
namespace api_internal {
|
||||||
@ -313,6 +314,7 @@ class Local {
|
|||||||
friend class BasicTracedReference;
|
friend class BasicTracedReference;
|
||||||
template <class F>
|
template <class F>
|
||||||
friend class TracedReference;
|
friend class TracedReference;
|
||||||
|
friend class v8::internal::SamplingHeapProfiler;
|
||||||
|
|
||||||
explicit V8_INLINE Local(T* that) : val_(that) {}
|
explicit V8_INLINE Local(T* that) : val_(that) {}
|
||||||
V8_INLINE static Local<T> New(Isolate* isolate, T* that) {
|
V8_INLINE static Local<T> New(Isolate* isolate, T* that) {
|
||||||
|
@ -110,7 +110,7 @@ IS_TYPE_FUNCTION_DEF(CodeT)
|
|||||||
return Is##Type(ReadOnlyRoots(isolate)); \
|
return Is##Type(ReadOnlyRoots(isolate)); \
|
||||||
} \
|
} \
|
||||||
bool Object::Is##Type(ReadOnlyRoots roots) const { \
|
bool Object::Is##Type(ReadOnlyRoots roots) const { \
|
||||||
return SafeEquals(roots.Value()); \
|
return (*this) == roots.Value(); \
|
||||||
} \
|
} \
|
||||||
bool Object::Is##Type() const { \
|
bool Object::Is##Type() const { \
|
||||||
return IsHeapObject() && HeapObject::cast(*this).Is##Type(); \
|
return IsHeapObject() && HeapObject::cast(*this).Is##Type(); \
|
||||||
|
@ -81,7 +81,12 @@ void SamplingHeapProfiler::SampleObject(Address soon_object, size_t size) {
|
|||||||
HeapObject heap_object = HeapObject::FromAddress(soon_object);
|
HeapObject heap_object = HeapObject::FromAddress(soon_object);
|
||||||
Handle<Object> obj(heap_object, isolate_);
|
Handle<Object> obj(heap_object, isolate_);
|
||||||
|
|
||||||
Local<v8::Value> loc = v8::Utils::ToLocal(obj);
|
// Since soon_object can be in code space we can't use v8::Utils::ToLocal.
|
||||||
|
DCHECK(obj.is_null() ||
|
||||||
|
(obj->IsSmi() ||
|
||||||
|
(V8_EXTERNAL_CODE_SPACE_BOOL && IsCodeSpaceObject(heap_object)) ||
|
||||||
|
!obj->IsTheHole()));
|
||||||
|
Local<v8::Value> loc(reinterpret_cast<v8::Value*>(obj.location()));
|
||||||
|
|
||||||
AllocationNode* node = AddStack();
|
AllocationNode* node = AddStack();
|
||||||
node->allocations_[size]++;
|
node->allocations_[size]++;
|
||||||
|
Loading…
Reference in New Issue
Block a user