Index: runtime/vm/stub_code_x64.cc |
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc |
index dac3e5c84fcd92211df5e3a43890964c3e7909b5..a752cb1be6cb9051de5f0afbe63ee59b5d784fc6 100644 |
--- a/runtime/vm/stub_code_x64.cc |
+++ b/runtime/vm/stub_code_x64.cc |
@@ -591,6 +591,10 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
// R13: Points to new space object. |
__ movq(Address(R13, Scavenger::top_offset()), R12); |
__ addq(RAX, Immediate(kHeapObjectTag)); |
+ // R13: Size of allocation in bytes. |
+ __ movq(R13, R12); |
+ __ subq(R13, RAX); |
+ __ UpdateAllocationStatsWithSize(kArrayCid, R13); |
// RAX: new object start as a tagged pointer. |
// R12: new object end address. |
@@ -945,6 +949,9 @@ void StubCode::GenerateAllocateContextStub(Assembler* assembler) { |
__ movq(RDI, Immediate(heap->TopAddress())); |
__ movq(Address(RDI, 0), R13); |
__ addq(RAX, Immediate(kHeapObjectTag)); |
+ // R13: Size of allocation in bytes. |
+ __ subq(R13, RAX); |
+ __ UpdateAllocationStatsWithSize(context_class.id(), R13); |
// Calculate the size tag. |
// RAX: new object. |
@@ -1144,6 +1151,7 @@ void StubCode::GenerateAllocationStubForClass(Assembler* assembler, |
// next object start and initialize the object. |
__ movq(RDI, Immediate(heap->TopAddress())); |
__ movq(Address(RDI, 0), RBX); |
+ __ UpdateAllocationStats(cls.id()); |
if (is_cls_parameterized) { |
// Initialize the type arguments field in the object. |
@@ -1307,6 +1315,8 @@ void StubCode::GenerateAllocationStubForClosure(Assembler* assembler, |
// next object start and initialize the object. |
__ movq(RDI, Immediate(heap->TopAddress())); |
__ movq(Address(RDI, 0), R13); |
+ __ subq(RDI, RAX); |
+ __ UpdateAllocationStatsWithSize(cls.id(), RDI); |
// RAX: new closure object. |
// RBX: new context object (only if is_implicit_closure). |