| Index: src/heap/heap-inl.h | 
| diff --git a/src/heap/heap-inl.h b/src/heap/heap-inl.h | 
| index e121db17f5729377ca7205ef24c4e4dcd69e350f..6f7c060d70c9e53f41fd9802f21389920d2aec2b 100644 | 
| --- a/src/heap/heap-inl.h | 
| +++ b/src/heap/heap-inl.h | 
| @@ -123,11 +123,12 @@ | 
| // Compute map and object size. | 
| Map* map = one_byte_internalized_string_map(); | 
| int size = SeqOneByteString::SizeFor(str.length()); | 
| +  AllocationSpace space = SelectSpace(size, TENURED); | 
|  | 
| // Allocate string. | 
| HeapObject* result = nullptr; | 
| { | 
| -    AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE); | 
| +    AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 
| if (!allocation.To(&result)) return allocation; | 
| } | 
|  | 
| @@ -154,11 +155,12 @@ | 
| // Compute map and object size. | 
| Map* map = internalized_string_map(); | 
| int size = SeqTwoByteString::SizeFor(str.length()); | 
| +  AllocationSpace space = SelectSpace(size, TENURED); | 
|  | 
| // Allocate string. | 
| HeapObject* result = nullptr; | 
| { | 
| -    AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE); | 
| +    AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 
| if (!allocation.To(&result)) return allocation; | 
| } | 
|  | 
| @@ -204,37 +206,33 @@ | 
| isolate_->counters()->objs_since_last_young()->Increment(); | 
| #endif | 
|  | 
| -  bool large_object = size_in_bytes > Page::kMaxRegularHeapObjectSize; | 
| HeapObject* object = nullptr; | 
| AllocationResult allocation; | 
| if (NEW_SPACE == space) { | 
| -    if (!large_object) { | 
| -      allocation = new_space_.AllocateRaw(size_in_bytes, alignment); | 
| -      if (always_allocate() && allocation.IsRetry() && | 
| -          retry_space != NEW_SPACE) { | 
| -        space = retry_space; | 
| +    allocation = new_space_.AllocateRaw(size_in_bytes, alignment); | 
| +    if (always_allocate() && allocation.IsRetry() && retry_space != NEW_SPACE) { | 
| +      space = retry_space; | 
| +    } else { | 
| +      if (allocation.To(&object)) { | 
| +        OnAllocationEvent(object, size_in_bytes); | 
| } | 
| -    } else { | 
| -      space = LO_SPACE; | 
| +      return allocation; | 
| } | 
| } | 
|  | 
| if (OLD_SPACE == space) { | 
| -    if (!large_object) { | 
| -      allocation = old_space_->AllocateRaw(size_in_bytes, alignment); | 
| -    } else { | 
| -      allocation = lo_space_->AllocateRaw(size_in_bytes, NOT_EXECUTABLE); | 
| -    } | 
| +    allocation = old_space_->AllocateRaw(size_in_bytes, alignment); | 
| } else if (CODE_SPACE == space) { | 
| if (size_in_bytes <= code_space()->AreaSize()) { | 
| allocation = code_space_->AllocateRawUnaligned(size_in_bytes); | 
| } else { | 
| +      // Large code objects are allocated in large object space. | 
| allocation = lo_space_->AllocateRaw(size_in_bytes, EXECUTABLE); | 
| } | 
| } else if (LO_SPACE == space) { | 
| -    DCHECK(large_object); | 
| allocation = lo_space_->AllocateRaw(size_in_bytes, NOT_EXECUTABLE); | 
| -  } else if (MAP_SPACE == space) { | 
| +  } else { | 
| +    DCHECK(MAP_SPACE == space); | 
| allocation = map_space_->AllocateRawUnaligned(size_in_bytes); | 
| } | 
| if (allocation.To(&object)) { | 
|  |