| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index c484eabe9183401b1b3cce2e571efb85d66ae879..45c695213ad5e6b69e0a8799f6bcfdfb2732a6a7 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -9185,19 +9185,20 @@ Handle<String> SeqString::Truncate(Handle<SeqString> string, int new_length) {
|
|
|
|
|
| AllocationMemento* AllocationMemento::FindForHeapObject(HeapObject* object,
|
| + Heap* heap,
|
| bool in_GC) {
|
| // AllocationMemento objects are only allocated immediately after objects in
|
| // NewSpace. Detecting whether a memento is present involves carefully
|
| // checking the object immediately after the current object (if there is one)
|
| // to see if it's an AllocationMemento.
|
| - ASSERT(object->GetHeap()->InNewSpace(object));
|
| + ASSERT(heap->InNewSpace(object));
|
| Address ptr_end = (reinterpret_cast<Address>(object) - kHeapObjectTag) +
|
| object->Size();
|
| Address top;
|
| if (in_GC) {
|
| - top = object->GetHeap()->new_space()->FromSpacePageHigh();
|
| + top = heap->new_space()->FromSpacePageHigh();
|
| } else {
|
| - top = object->GetHeap()->NewSpaceTop();
|
| + top = heap->NewSpaceTop();
|
| }
|
| if ((ptr_end + AllocationMemento::kSize) <= top) {
|
| // There is room in newspace for allocation info. Do we have some?
|
| @@ -12775,6 +12776,24 @@ void JSObject::TransitionElementsKind(Handle<JSObject> object,
|
| const double AllocationSite::kPretenureRatio = 0.60;
|
|
|
|
|
| +void AllocationSite::ResetPretenureDecision() {
|
| + dependent_code()->DeoptimizeDependentCodeGroup(
|
| + GetIsolate(),
|
| + DependentCode::kAllocationSiteTenuringChangedGroup);
|
| + set_pretenure_decision(Smi::FromInt(kUndecided));
|
| + set_memento_found_count(Smi::FromInt(0));
|
| + set_memento_create_count(Smi::FromInt(0));
|
| +}
|
| +
|
| +
|
| +PretenureFlag AllocationSite::GetPretenureMode() {
|
| + int mode = pretenure_decision()->value();
|
| + // Zombie objects "decide" to be untenured.
|
| + return (mode == kTenure && GetHeap()->GetPretenureMode() == TENURED)
|
| + ? TENURED : NOT_TENURED;
|
| +}
|
| +
|
| +
|
| bool AllocationSite::IsNestedSite() {
|
| ASSERT(FLAG_trace_track_allocation_sites);
|
| Object* current = GetHeap()->allocation_sites_list();
|
| @@ -12873,9 +12892,10 @@ MaybeObject* JSObject::UpdateAllocationSite(ElementsKind to_kind) {
|
| return this;
|
| }
|
|
|
| - if (!GetHeap()->InNewSpace(this)) return this;
|
| + Heap* heap = GetHeap();
|
| + if (!heap->InNewSpace(this)) return this;
|
|
|
| - AllocationMemento* memento = AllocationMemento::FindForHeapObject(this);
|
| + AllocationMemento* memento = AllocationMemento::FindForHeapObject(this, heap);
|
| if (memento == NULL || !memento->IsValid()) {
|
| return this;
|
| }
|
|
|