|  | // 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_ |