void Heap::UpdateAllocationSiteFeedback(HeapObject* object) {
- if (FLAG_allocation_site_pretenuring && object->IsJSObject()) {
- AllocationMemento* memento = AllocationMemento::FindForJSObject(
- JSObject::cast(object), true);
+ if (FLAG_allocation_site_pretenuring &&
+ AllocationSite::CanTrack(object->map()->instance_type())) {
+ AllocationMemento* memento = AllocationMemento::FindForHeapObject(
+ object, true);
if (memento != NULL) {
ASSERT(memento->IsValid());
memento->GetAllocationSite()->IncrementMementoFoundCount();
}
-AllocationMemento* AllocationMemento::FindForJSObject(JSObject* object,
- bool in_GC) {
- // Currently, AllocationMemento objects are only allocated immediately
- // after JSArrays and some JSObjects 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.
- if (FLAG_track_allocation_sites && object->GetHeap()->InNewSpace(object)) {
+AllocationMemento* AllocationMemento::FindForHeapObject(HeapObject* object,
+ 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));
+ if (FLAG_track_allocation_sites) {
Address ptr_end = (reinterpret_cast<Address>(object) - kHeapObjectTag) +
object->Size();
Address top;
return this;
}
- AllocationMemento* memento = AllocationMemento::FindForJSObject(this);
+ if (!GetHeap()->InNewSpace(this)) return this;
+
+ AllocationMemento* memento = AllocationMemento::FindForHeapObject(this);
if (memento == NULL || !memento->IsValid()) {
return this;
}
DECLARE_VERIFIER(AllocationMemento)
// Returns NULL if no AllocationMemento is available for object.
- static AllocationMemento* FindForJSObject(JSObject* object,
- bool in_GC = false);
+ static AllocationMemento* FindForHeapObject(HeapObject* object,
+ bool in_GC = false);
static inline AllocationMemento* cast(Object* obj);
private: