Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(271)

Unified Diff: test/cctest/test-heap-profiler.cc

Issue 10086004: Add size metric into Heap Stats. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: comments addressed Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/profile-generator.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
}
« no previous file with comments | « src/profile-generator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698