Commit e4cf5892 authored by Andreas Gampe's avatar Andreas Gampe
Browse files

ART: Weaken size check in hprof

Dumping the heap is a two-phase process. In the first phase, all
objects are visited to fill the header tables. In the second phase,
the tables are written out and the heap is visited again to write
the object records.

Deleting global references doesn't require the mutator lock. So it
is possible to delete a global ref in-between the first and the
second phase. This leads to a smaller set of object records. The
result is still safe, as the object's class etc. is still in the
header tables, and the object won't be deleted, so will still be
dumped by itself.

Bug: 23521263
Change-Id: I019c29b13ceb9f13e362c742662f1546d52c37a0
parent eb9d1f79
......@@ -671,8 +671,9 @@ class Hprof : public SingleRootVisitor {
okay = !file_output.Errors();
if (okay) {
// Check for expected size.
CHECK_EQ(file_output.SumLength(), overall_size);
// Check for expected size. Output is expected to be less-or-equal than first phase, see
// b/23521263.
DCHECK_LE(file_output.SumLength(), overall_size);
}
output_ = nullptr;
}
......@@ -716,8 +717,8 @@ class Hprof : public SingleRootVisitor {
// Write the dump.
ProcessHeap(true);
// Check for expected size.
CHECK_EQ(net_output.SumLength(), overall_size + kChunkHeaderSize);
// Check for expected size. See DumpToFile for comment.
DCHECK_LE(net_output.SumLength(), overall_size + kChunkHeaderSize);
output_ = nullptr;
return true;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment