1 // Copyright 2019 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef V8_HEAP_MEMORY_MEASUREMENT_INL_H_
6 #define V8_HEAP_MEMORY_MEASUREMENT_INL_H_
7
8 #include "src/heap/memory-measurement.h"
9 #include "src/objects/contexts-inl.h"
10 #include "src/objects/contexts.h"
11 #include "src/objects/instance-type-inl.h"
12 #include "src/objects/instance-type.h"
13 #include "src/objects/map-inl.h"
14 #include "src/objects/map.h"
15
16 namespace v8 {
17 namespace internal {
18
Infer(Isolate * isolate,Map map,HeapObject object,Address * native_context)19 bool NativeContextInferrer::Infer(Isolate* isolate, Map map, HeapObject object,
20 Address* native_context) {
21 switch (map.visitor_id()) {
22 case kVisitContext:
23 return InferForContext(isolate, Context::cast(object), native_context);
24 case kVisitNativeContext:
25 *native_context = object.ptr();
26 return true;
27 case kVisitJSFunction:
28 return InferForJSFunction(isolate, JSFunction::cast(object),
29 native_context);
30 case kVisitJSApiObject:
31 case kVisitJSArrayBuffer:
32 case kVisitJSFinalizationRegistry:
33 case kVisitJSObject:
34 case kVisitJSObjectFast:
35 case kVisitJSTypedArray:
36 case kVisitJSWeakCollection:
37 return InferForJSObject(isolate, map, JSObject::cast(object),
38 native_context);
39 default:
40 return false;
41 }
42 }
43
HasExternalBytes(Map map)44 V8_INLINE bool NativeContextStats::HasExternalBytes(Map map) {
45 InstanceType instance_type = map.instance_type();
46 return (instance_type == JS_ARRAY_BUFFER_TYPE ||
47 InstanceTypeChecker::IsExternalString(instance_type));
48 }
49
IncrementSize(Address context,Map map,HeapObject object,size_t size)50 V8_INLINE void NativeContextStats::IncrementSize(Address context, Map map,
51 HeapObject object,
52 size_t size) {
53 size_by_context_[context] += size;
54 if (HasExternalBytes(map)) {
55 IncrementExternalSize(context, map, object);
56 }
57 }
58
59 } // namespace internal
60 } // namespace v8
61
62 #endif // V8_HEAP_MEMORY_MEASUREMENT_INL_H_
63