blob: f6c75b6ca68807d9f285c62ce59afa7e031d2f56 [file] [log] [blame]
// 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_