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

Side by Side Diff: src/heap/heap.cc

Issue 1404523002: [heap] inline allocation steps refactor (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Use virtual functions instead of callbacks Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/heap/heap.h" 5 #include "src/heap/heap.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 namespace v8 { 45 namespace v8 {
46 namespace internal { 46 namespace internal {
47 47
48 48
49 struct Heap::StrongRootsList { 49 struct Heap::StrongRootsList {
50 Object** start; 50 Object** start;
51 Object** end; 51 Object** end;
52 StrongRootsList* next; 52 StrongRootsList* next;
53 }; 53 };
54 54
55 class IdleScavengeObserver : public InlineAllocationObserver {
56 public:
57 IdleScavengeObserver(Heap& heap, intptr_t step_size)
58 : InlineAllocationObserver(step_size), heap_(heap) {}
59
60 virtual void Step(int bytes_allocated) {
61 heap_.ScheduleIdleScavengeIfNeeded(bytes_allocated);
62 }
63
64 private:
65 Heap& heap_;
66 };
67
55 68
56 Heap::Heap() 69 Heap::Heap()
57 : amount_of_external_allocated_memory_(0), 70 : amount_of_external_allocated_memory_(0),
58 amount_of_external_allocated_memory_at_last_global_gc_(0), 71 amount_of_external_allocated_memory_at_last_global_gc_(0),
59 isolate_(NULL), 72 isolate_(NULL),
60 code_range_size_(0), 73 code_range_size_(0),
61 // semispace_size_ should be a power of 2 and old_generation_size_ should 74 // semispace_size_ should be a power of 2 and old_generation_size_ should
62 // be a multiple of Page::kPageSize. 75 // be a multiple of Page::kPageSize.
63 reserved_semispace_size_(8 * (kPointerSize / 4) * MB), 76 reserved_semispace_size_(8 * (kPointerSize / 4) * MB),
64 max_semi_space_size_(8 * (kPointerSize / 4) * MB), 77 max_semi_space_size_(8 * (kPointerSize / 4) * MB),
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 last_idle_notification_time_(0.0), 135 last_idle_notification_time_(0.0),
123 last_gc_time_(0.0), 136 last_gc_time_(0.0),
124 scavenge_collector_(nullptr), 137 scavenge_collector_(nullptr),
125 mark_compact_collector_(nullptr), 138 mark_compact_collector_(nullptr),
126 store_buffer_(this), 139 store_buffer_(this),
127 incremental_marking_(nullptr), 140 incremental_marking_(nullptr),
128 gc_idle_time_handler_(nullptr), 141 gc_idle_time_handler_(nullptr),
129 memory_reducer_(nullptr), 142 memory_reducer_(nullptr),
130 object_stats_(nullptr), 143 object_stats_(nullptr),
131 scavenge_job_(nullptr), 144 scavenge_job_(nullptr),
145 idle_scavenge_observer_(nullptr),
132 full_codegen_bytes_generated_(0), 146 full_codegen_bytes_generated_(0),
133 crankshaft_codegen_bytes_generated_(0), 147 crankshaft_codegen_bytes_generated_(0),
134 new_space_allocation_counter_(0), 148 new_space_allocation_counter_(0),
135 old_generation_allocation_counter_(0), 149 old_generation_allocation_counter_(0),
136 old_generation_size_at_last_gc_(0), 150 old_generation_size_at_last_gc_(0),
137 gcs_since_last_deopt_(0), 151 gcs_since_last_deopt_(0),
138 allocation_sites_scratchpad_length_(0), 152 allocation_sites_scratchpad_length_(0),
139 ring_buffer_full_(false), 153 ring_buffer_full_(false),
140 ring_buffer_end_(0), 154 ring_buffer_end_(0),
141 promotion_queue_(this), 155 promotion_queue_(this),
(...skipping 4822 matching lines...) Expand 10 before | Expand all | Expand 10 after
4964 4978
4965 // Update inline allocation limit for old spaces. 4979 // Update inline allocation limit for old spaces.
4966 PagedSpaces spaces(this); 4980 PagedSpaces spaces(this);
4967 for (PagedSpace* space = spaces.next(); space != NULL; 4981 for (PagedSpace* space = spaces.next(); space != NULL;
4968 space = spaces.next()) { 4982 space = spaces.next()) {
4969 space->EmptyAllocationInfo(); 4983 space->EmptyAllocationInfo();
4970 } 4984 }
4971 } 4985 }
4972 4986
4973 4987
4974 void Heap::LowerInlineAllocationLimit(intptr_t step) {
4975 new_space()->LowerInlineAllocationLimit(step);
4976 }
4977
4978
4979 void Heap::ResetInlineAllocationLimit() {
4980 new_space()->LowerInlineAllocationLimit(
4981 ScavengeJob::kBytesAllocatedBeforeNextIdleTask);
4982 }
4983
4984
4985 V8_DECLARE_ONCE(initialize_gc_once); 4988 V8_DECLARE_ONCE(initialize_gc_once);
4986 4989
4987 static void InitializeGCOnce() { 4990 static void InitializeGCOnce() {
4988 Scavenger::Initialize(); 4991 Scavenger::Initialize();
4989 StaticScavengeVisitor::Initialize(); 4992 StaticScavengeVisitor::Initialize();
4990 MarkCompactCollector::Initialize(); 4993 MarkCompactCollector::Initialize();
4991 } 4994 }
4992 4995
4993 4996
4994 bool Heap::SetUp() { 4997 bool Heap::SetUp() {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
5083 5086
5084 array_buffer_tracker_ = new ArrayBufferTracker(this); 5087 array_buffer_tracker_ = new ArrayBufferTracker(this);
5085 5088
5086 LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity())); 5089 LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity()));
5087 LOG(isolate_, IntPtrTEvent("heap-available", Available())); 5090 LOG(isolate_, IntPtrTEvent("heap-available", Available()));
5088 5091
5089 store_buffer()->SetUp(); 5092 store_buffer()->SetUp();
5090 5093
5091 mark_compact_collector()->SetUp(); 5094 mark_compact_collector()->SetUp();
5092 5095
5093 ResetInlineAllocationLimit(); 5096 idle_scavenge_observer_ = new IdleScavengeObserver(
5097 *this, ScavengeJob::kBytesAllocatedBeforeNextIdleTask);
5098 new_space()->AddInlineAllocationObserver(idle_scavenge_observer_);
5094 5099
5095 return true; 5100 return true;
5096 } 5101 }
5097 5102
5098 5103
5099 bool Heap::CreateHeapObjects() { 5104 bool Heap::CreateHeapObjects() {
5100 // Create initial maps. 5105 // Create initial maps.
5101 if (!CreateInitialMaps()) return false; 5106 if (!CreateInitialMaps()) return false;
5102 CreateApiObjects(); 5107 CreateApiObjects();
5103 5108
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
5182 map_space_->MaximumCommittedMemory()); 5187 map_space_->MaximumCommittedMemory());
5183 PrintF("maximum_committed_by_lo_space=%" V8_PTR_PREFIX "d ", 5188 PrintF("maximum_committed_by_lo_space=%" V8_PTR_PREFIX "d ",
5184 lo_space_->MaximumCommittedMemory()); 5189 lo_space_->MaximumCommittedMemory());
5185 PrintF("\n\n"); 5190 PrintF("\n\n");
5186 } 5191 }
5187 5192
5188 if (FLAG_verify_predictable) { 5193 if (FLAG_verify_predictable) {
5189 PrintAlloctionsHash(); 5194 PrintAlloctionsHash();
5190 } 5195 }
5191 5196
5197 new_space()->RemoveInlineAllocationObserver(idle_scavenge_observer_);
5198 delete idle_scavenge_observer_;
5199 idle_scavenge_observer_ = nullptr;
5200
5192 delete scavenge_collector_; 5201 delete scavenge_collector_;
5193 scavenge_collector_ = nullptr; 5202 scavenge_collector_ = nullptr;
5194 5203
5195 if (mark_compact_collector_ != nullptr) { 5204 if (mark_compact_collector_ != nullptr) {
5196 mark_compact_collector_->TearDown(); 5205 mark_compact_collector_->TearDown();
5197 delete mark_compact_collector_; 5206 delete mark_compact_collector_;
5198 mark_compact_collector_ = nullptr; 5207 mark_compact_collector_ = nullptr;
5199 } 5208 }
5200 5209
5201 delete incremental_marking_; 5210 delete incremental_marking_;
(...skipping 918 matching lines...) Expand 10 before | Expand all | Expand 10 after
6120 } 6129 }
6121 6130
6122 6131
6123 // static 6132 // static
6124 int Heap::GetStaticVisitorIdForMap(Map* map) { 6133 int Heap::GetStaticVisitorIdForMap(Map* map) {
6125 return StaticVisitorBase::GetVisitorId(map); 6134 return StaticVisitorBase::GetVisitorId(map);
6126 } 6135 }
6127 6136
6128 } // namespace internal 6137 } // namespace internal
6129 } // namespace v8 6138 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/incremental-marking.h » ('j') | src/heap/incremental-marking.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698