| Index: test/cctest/test-heap-profiler.cc
|
| diff --git a/test/cctest/test-heap-profiler.cc b/test/cctest/test-heap-profiler.cc
|
| index 7e48a87a7ee10e7d015543da3a6a4e80cdc1f69d..8e3ebc3ac4c7dc52501f63c97b9c331ec1afd46d 100644
|
| --- a/test/cctest/test-heap-profiler.cc
|
| +++ b/test/cctest/test-heap-profiler.cc
|
| @@ -704,6 +704,7 @@ class TestStatsStream : public v8::OutputStream {
|
| : eos_signaled_(0),
|
| numbers_written_(0),
|
| entries_count_(0),
|
| + entries_size_(0),
|
| intervals_count_(0),
|
| first_interval_index_(-1) { }
|
| TestStatsStream(const TestStatsStream& stream)
|
| @@ -711,6 +712,7 @@ class TestStatsStream : public v8::OutputStream {
|
| eos_signaled_(stream.eos_signaled_),
|
| numbers_written_(stream.numbers_written_),
|
| entries_count_(stream.entries_count_),
|
| + entries_size_(stream.entries_size_),
|
| intervals_count_(stream.intervals_count_),
|
| first_interval_index_(stream.first_interval_index_) { }
|
| virtual ~TestStatsStream() {}
|
| @@ -726,14 +728,17 @@ class TestStatsStream : public v8::OutputStream {
|
| entries_count_ = 0;
|
| if (first_interval_index_ == -1 && numbers_written != 0)
|
| first_interval_index_ = buffer[0];
|
| - for (int i = 1; i < numbers_written; i += 2)
|
| - entries_count_ += buffer[i];
|
| + for (int i = 0; i < numbers_written; i += 3) {
|
| + entries_count_ += buffer[i+1];
|
| + entries_size_ += buffer[i+2];
|
| + }
|
|
|
| return kContinue;
|
| }
|
| int eos_signaled() { return eos_signaled_; }
|
| int numbers_written() { return numbers_written_; }
|
| uint32_t entries_count() const { return entries_count_; }
|
| + uint32_t entries_size() const { return entries_size_; }
|
| int intervals_count() const { return intervals_count_; }
|
| int first_interval_index() const { return first_interval_index_; }
|
|
|
| @@ -741,6 +746,7 @@ class TestStatsStream : public v8::OutputStream {
|
| int eos_signaled_;
|
| int numbers_written_;
|
| uint32_t entries_count_;
|
| + uint32_t entries_size_;
|
| int intervals_count_;
|
| int first_interval_index_;
|
| };
|
| @@ -770,7 +776,8 @@ TEST(HeapSnapshotObjectsStats) {
|
| // Single chunk of data expected in update. Initial data.
|
| TestStatsStream stats_update = GetHeapStatsUpdate();
|
| CHECK_EQ(1, stats_update.intervals_count());
|
| - CHECK_EQ(2, stats_update.numbers_written());
|
| + CHECK_EQ(3, stats_update.numbers_written());
|
| + CHECK_LT(0, stats_update.entries_size());
|
| CHECK_EQ(0, stats_update.first_interval_index());
|
| }
|
|
|
| @@ -783,7 +790,8 @@ TEST(HeapSnapshotObjectsStats) {
|
| // Single chunk of data with one new entry expected in update.
|
| TestStatsStream stats_update = GetHeapStatsUpdate();
|
| CHECK_EQ(1, stats_update.intervals_count());
|
| - CHECK_EQ(2, stats_update.numbers_written());
|
| + CHECK_EQ(3, stats_update.numbers_written());
|
| + CHECK_LT(0, stats_update.entries_size());
|
| CHECK_EQ(1, stats_update.entries_count());
|
| CHECK_EQ(2, stats_update.first_interval_index());
|
| }
|
| @@ -795,6 +803,7 @@ TEST(HeapSnapshotObjectsStats) {
|
| v8::HandleScope inner_scope_2;
|
| v8::Local<v8::String> string2 = v8_str("string2");
|
|
|
| + uint32_t entries_size;
|
| {
|
| v8::HandleScope inner_scope_3;
|
| v8::Handle<v8::String> string3 = v8::String::New("string3");
|
| @@ -804,7 +813,8 @@ TEST(HeapSnapshotObjectsStats) {
|
| // Single chunk of data with three new entries expected in update.
|
| TestStatsStream stats_update = GetHeapStatsUpdate();
|
| CHECK_EQ(1, stats_update.intervals_count());
|
| - CHECK_EQ(2, stats_update.numbers_written());
|
| + CHECK_EQ(3, stats_update.numbers_written());
|
| + CHECK_LT(0, entries_size = stats_update.entries_size());
|
| CHECK_EQ(3, stats_update.entries_count());
|
| CHECK_EQ(4, stats_update.first_interval_index());
|
| }
|
| @@ -814,7 +824,8 @@ TEST(HeapSnapshotObjectsStats) {
|
| // Single chunk of data with two left entries expected in update.
|
| TestStatsStream stats_update = GetHeapStatsUpdate();
|
| CHECK_EQ(1, stats_update.intervals_count());
|
| - CHECK_EQ(2, stats_update.numbers_written());
|
| + CHECK_EQ(3, stats_update.numbers_written());
|
| + CHECK_GT(entries_size, stats_update.entries_size());
|
| CHECK_EQ(1, stats_update.entries_count());
|
| // Two strings from forth interval were released.
|
| CHECK_EQ(4, stats_update.first_interval_index());
|
| @@ -825,7 +836,8 @@ TEST(HeapSnapshotObjectsStats) {
|
| // Single chunk of data with 0 left entries expected in update.
|
| TestStatsStream stats_update = GetHeapStatsUpdate();
|
| CHECK_EQ(1, stats_update.intervals_count());
|
| - CHECK_EQ(2, stats_update.numbers_written());
|
| + CHECK_EQ(3, stats_update.numbers_written());
|
| + CHECK_EQ(0, stats_update.entries_size());
|
| CHECK_EQ(0, stats_update.entries_count());
|
| // The last string from forth interval was released.
|
| CHECK_EQ(4, stats_update.first_interval_index());
|
| @@ -835,12 +847,45 @@ TEST(HeapSnapshotObjectsStats) {
|
| // Single chunk of data with 0 left entries expected in update.
|
| TestStatsStream stats_update = GetHeapStatsUpdate();
|
| CHECK_EQ(1, stats_update.intervals_count());
|
| - CHECK_EQ(2, stats_update.numbers_written());
|
| + CHECK_EQ(3, stats_update.numbers_written());
|
| + CHECK_EQ(0, stats_update.entries_size());
|
| CHECK_EQ(0, stats_update.entries_count());
|
| // The only string from the second interval was released.
|
| CHECK_EQ(2, stats_update.first_interval_index());
|
| }
|
|
|
| + v8::Local<v8::Array> array = v8::Array::New();
|
| + CHECK_EQ(0, array->Length());
|
| + // Force array's buffer allocation.
|
| + array->Set(2, v8_num(7));
|
| +
|
| + uint32_t entries_size;
|
| + {
|
| + // Single chunk of data with 2 entries expected in update.
|
| + TestStatsStream stats_update = GetHeapStatsUpdate();
|
| + CHECK_EQ(1, stats_update.intervals_count());
|
| + CHECK_EQ(3, stats_update.numbers_written());
|
| + CHECK_LT(0, entries_size = stats_update.entries_size());
|
| + // They are the array and its buffer.
|
| + CHECK_EQ(2, stats_update.entries_count());
|
| + CHECK_EQ(8, stats_update.first_interval_index());
|
| + }
|
| +
|
| + for (int i = 0; i < 100; ++i)
|
| + array->Set(i, v8_num(i));
|
| +
|
| + {
|
| + // Single chunk of data with 1 entry expected in update.
|
| + TestStatsStream stats_update = GetHeapStatsUpdate();
|
| + CHECK_EQ(1, stats_update.intervals_count());
|
| + // The first interval was changed because old buffer was collected.
|
| + // The second interval was changed because new buffer was allocated.
|
| + CHECK_EQ(6, stats_update.numbers_written());
|
| + CHECK_LT(entries_size, stats_update.entries_size());
|
| + CHECK_EQ(2, stats_update.entries_count());
|
| + CHECK_EQ(8, stats_update.first_interval_index());
|
| + }
|
| +
|
| v8::HeapProfiler::StopHeapObjectsTracking();
|
| }
|
|
|
|
|