| // Copyright 2019 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_MEMORY_MEASUREMENT_INL_H_ |
| #define V8_HEAP_MEMORY_MEASUREMENT_INL_H_ |
| |
| #include "src/heap/memory-measurement.h" |
| #include "src/objects/contexts-inl.h" |
| #include "src/objects/contexts.h" |
| #include "src/objects/instance-type-inl.h" |
| #include "src/objects/instance-type.h" |
| #include "src/objects/map-inl.h" |
| #include "src/objects/map.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| bool NativeContextInferrer::Infer(Isolate* isolate, Map map, HeapObject object, |
| Address* native_context) { |
| switch (map.visitor_id()) { |
| case kVisitContext: |
| return InferForContext(isolate, Context::cast(object), native_context); |
| case kVisitNativeContext: |
| *native_context = object.ptr(); |
| return true; |
| case kVisitJSFunction: |
| return InferForJSFunction(isolate, JSFunction::cast(object), |
| native_context); |
| case kVisitJSApiObject: |
| case kVisitJSArrayBuffer: |
| case kVisitJSObject: |
| case kVisitJSObjectFast: |
| case kVisitJSTypedArray: |
| case kVisitJSWeakCollection: |
| return InferForJSObject(isolate, map, JSObject::cast(object), |
| native_context); |
| default: |
| return false; |
| } |
| } |
| |
| V8_INLINE bool NativeContextStats::HasExternalBytes(Map map) { |
| InstanceType instance_type = map.instance_type(); |
| return (instance_type == JS_ARRAY_BUFFER_TYPE || |
| InstanceTypeChecker::IsExternalString(instance_type)); |
| } |
| |
| V8_INLINE void NativeContextStats::IncrementSize(Address context, Map map, |
| HeapObject object, |
| size_t size) { |
| size_by_context_[context] += size; |
| if (HasExternalBytes(map)) { |
| IncrementExternalSize(context, map, object); |
| } |
| } |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_HEAP_MEMORY_MEASUREMENT_INL_H_ |