| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index 9a520b24bdce619240668700a82d4829b1b004f2..b638abda25c391586db996429557a47096ccaaf1 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -1296,6 +1296,44 @@ void JSObject::ValidateElements() {
|
| }
|
|
|
|
|
| +bool JSObject::ShouldTrackAllocationInfo() {
|
| + if (map()->CanTrackAllocationSite()) {
|
| + if (!IsJSArray()) {
|
| + return true;
|
| + }
|
| +
|
| + return AllocationSiteInfo::GetMode(GetElementsKind()) ==
|
| + TRACK_ALLOCATION_SITE;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +
|
| +// Heuristic: We only need to create allocation site info if the boilerplate
|
| +// elements kind is the initial elements kind.
|
| +AllocationSiteMode AllocationSiteInfo::GetMode(
|
| + ElementsKind boilerplate_elements_kind) {
|
| + if (FLAG_track_allocation_sites &&
|
| + IsFastSmiElementsKind(boilerplate_elements_kind)) {
|
| + return TRACK_ALLOCATION_SITE;
|
| + }
|
| +
|
| + return DONT_TRACK_ALLOCATION_SITE;
|
| +}
|
| +
|
| +
|
| +AllocationSiteMode AllocationSiteInfo::GetMode(ElementsKind from,
|
| + ElementsKind to) {
|
| + if (FLAG_track_allocation_sites &&
|
| + IsFastSmiElementsKind(from) &&
|
| + (IsFastObjectElementsKind(to) || IsFastDoubleElementsKind(to))) {
|
| + return TRACK_ALLOCATION_SITE;
|
| + }
|
| +
|
| + return DONT_TRACK_ALLOCATION_SITE;
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::EnsureCanContainHeapObjectElements() {
|
| ValidateElements();
|
| ElementsKind elements_kind = map()->elements_kind();
|
|
|