| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Tests for heap profiler | 3 // Tests for heap profiler |
| 4 | 4 |
| 5 #include <ctype.h> | 5 #include <ctype.h> |
| 6 | 6 |
| 7 #include "v8.h" | 7 #include "v8.h" |
| 8 | 8 |
| 9 #include "cctest.h" | 9 #include "cctest.h" |
| 10 #include "hashmap.h" | 10 #include "hashmap.h" |
| (...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 684 int eos_signaled_; | 684 int eos_signaled_; |
| 685 int updates_written_; | 685 int updates_written_; |
| 686 uint32_t entries_count_; | 686 uint32_t entries_count_; |
| 687 uint32_t entries_size_; | 687 uint32_t entries_size_; |
| 688 int intervals_count_; | 688 int intervals_count_; |
| 689 int first_interval_index_; | 689 int first_interval_index_; |
| 690 }; | 690 }; |
| 691 | 691 |
| 692 } // namespace | 692 } // namespace |
| 693 | 693 |
| 694 static TestStatsStream GetHeapStatsUpdate() { | 694 static TestStatsStream GetHeapStatsUpdate( |
| 695 v8::SnapshotObjectId* object_id = NULL) { |
| 695 TestStatsStream stream; | 696 TestStatsStream stream; |
| 696 v8::HeapProfiler::PushHeapObjectsStats(&stream); | 697 v8::SnapshotObjectId last_seen_id = |
| 698 v8::HeapProfiler::PushHeapObjectsStats(&stream); |
| 699 if (object_id) |
| 700 *object_id = last_seen_id; |
| 697 CHECK_EQ(1, stream.eos_signaled()); | 701 CHECK_EQ(1, stream.eos_signaled()); |
| 698 return stream; | 702 return stream; |
| 699 } | 703 } |
| 700 | 704 |
| 701 | 705 |
| 702 TEST(HeapSnapshotObjectsStats) { | 706 TEST(HeapSnapshotObjectsStats) { |
| 703 v8::HandleScope scope; | 707 v8::HandleScope scope; |
| 704 LocalContext env; | 708 LocalContext env; |
| 705 | 709 |
| 706 v8::HeapProfiler::StartHeapObjectsTracking(); | 710 v8::HeapProfiler::StartHeapObjectsTracking(); |
| 707 // We have to call GC 5 times. In other case the garbage will be | 711 // We have to call GC 5 times. In other case the garbage will be |
| 708 // the reason of flakiness. | 712 // the reason of flakiness. |
| 709 for (int i = 0; i < 5; ++i) { | 713 for (int i = 0; i < 5; ++i) { |
| 710 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); | 714 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| 711 } | 715 } |
| 712 | 716 |
| 717 v8::SnapshotObjectId initial_id; |
| 713 { | 718 { |
| 714 // Single chunk of data expected in update. Initial data. | 719 // Single chunk of data expected in update. Initial data. |
| 715 TestStatsStream stats_update = GetHeapStatsUpdate(); | 720 TestStatsStream stats_update = GetHeapStatsUpdate(&initial_id); |
| 716 CHECK_EQ(1, stats_update.intervals_count()); | 721 CHECK_EQ(1, stats_update.intervals_count()); |
| 717 CHECK_EQ(1, stats_update.updates_written()); | 722 CHECK_EQ(1, stats_update.updates_written()); |
| 718 CHECK_LT(0, stats_update.entries_size()); | 723 CHECK_LT(0, stats_update.entries_size()); |
| 719 CHECK_EQ(0, stats_update.first_interval_index()); | 724 CHECK_EQ(0, stats_update.first_interval_index()); |
| 720 } | 725 } |
| 721 | 726 |
| 722 // No data expected in update because nothing has happened. | 727 // No data expected in update because nothing has happened. |
| 723 CHECK_EQ(0, GetHeapStatsUpdate().updates_written()); | 728 v8::SnapshotObjectId same_id; |
| 729 CHECK_EQ(0, GetHeapStatsUpdate(&same_id).updates_written()); |
| 730 CHECK_EQ_SNAPSHOT_OBJECT_ID(initial_id, same_id); |
| 731 |
| 724 { | 732 { |
| 733 v8::SnapshotObjectId additional_string_id; |
| 725 v8::HandleScope inner_scope_1; | 734 v8::HandleScope inner_scope_1; |
| 726 v8_str("string1"); | 735 v8_str("string1"); |
| 727 { | 736 { |
| 728 // Single chunk of data with one new entry expected in update. | 737 // Single chunk of data with one new entry expected in update. |
| 729 TestStatsStream stats_update = GetHeapStatsUpdate(); | 738 TestStatsStream stats_update = GetHeapStatsUpdate(&additional_string_id); |
| 739 CHECK_LT(same_id, additional_string_id); |
| 730 CHECK_EQ(1, stats_update.intervals_count()); | 740 CHECK_EQ(1, stats_update.intervals_count()); |
| 731 CHECK_EQ(1, stats_update.updates_written()); | 741 CHECK_EQ(1, stats_update.updates_written()); |
| 732 CHECK_LT(0, stats_update.entries_size()); | 742 CHECK_LT(0, stats_update.entries_size()); |
| 733 CHECK_EQ(1, stats_update.entries_count()); | 743 CHECK_EQ(1, stats_update.entries_count()); |
| 734 CHECK_EQ(2, stats_update.first_interval_index()); | 744 CHECK_EQ(2, stats_update.first_interval_index()); |
| 735 } | 745 } |
| 736 | 746 |
| 737 // No data expected in update because nothing happened. | 747 // No data expected in update because nothing happened. |
| 738 CHECK_EQ(0, GetHeapStatsUpdate().updates_written()); | 748 v8::SnapshotObjectId last_id; |
| 749 CHECK_EQ(0, GetHeapStatsUpdate(&last_id).updates_written()); |
| 750 CHECK_EQ_SNAPSHOT_OBJECT_ID(additional_string_id, last_id); |
| 739 | 751 |
| 740 { | 752 { |
| 741 v8::HandleScope inner_scope_2; | 753 v8::HandleScope inner_scope_2; |
| 742 v8_str("string2"); | 754 v8_str("string2"); |
| 743 | 755 |
| 744 uint32_t entries_size; | 756 uint32_t entries_size; |
| 745 { | 757 { |
| 746 v8::HandleScope inner_scope_3; | 758 v8::HandleScope inner_scope_3; |
| 747 v8_str("string3"); | 759 v8_str("string3"); |
| 748 v8_str("string4"); | 760 v8_str("string4"); |
| (...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1601 const v8::HeapGraphNode* global_object = | 1613 const v8::HeapGraphNode* global_object = |
| 1602 GetProperty(global, v8::HeapGraphEdge::kProperty, "global_object"); | 1614 GetProperty(global, v8::HeapGraphEdge::kProperty, "global_object"); |
| 1603 CHECK_NE(NULL, global_object); | 1615 CHECK_NE(NULL, global_object); |
| 1604 const v8::HeapGraphNode* properties = | 1616 const v8::HeapGraphNode* properties = |
| 1605 GetProperty(global_object, v8::HeapGraphEdge::kInternal, "properties"); | 1617 GetProperty(global_object, v8::HeapGraphEdge::kInternal, "properties"); |
| 1606 CHECK_EQ(NULL, properties); | 1618 CHECK_EQ(NULL, properties); |
| 1607 const v8::HeapGraphNode* elements = | 1619 const v8::HeapGraphNode* elements = |
| 1608 GetProperty(global_object, v8::HeapGraphEdge::kInternal, "elements"); | 1620 GetProperty(global_object, v8::HeapGraphEdge::kInternal, "elements"); |
| 1609 CHECK_EQ(NULL, elements); | 1621 CHECK_EQ(NULL, elements); |
| 1610 } | 1622 } |
| OLD | NEW |