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

Side by Side Diff: runtime/vm/pages.h

Issue 27802002: Disconnects code objects from infrequently used unoptimized functions. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/pages.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_PAGES_H_ 5 #ifndef VM_PAGES_H_
6 #define VM_PAGES_H_ 6 #define VM_PAGES_H_
7 7
8 #include "vm/freelist.h" 8 #include "vm/freelist.h"
9 #include "vm/globals.h" 9 #include "vm/globals.h"
10 #include "vm/virtual_memory.h" 10 #include "vm/virtual_memory.h"
11 11
12 namespace dart { 12 namespace dart {
13 13
14 DECLARE_FLAG(bool, collect_code);
15 DECLARE_FLAG(bool, log_code_drop);
16
14 // Forward declarations. 17 // Forward declarations.
15 class Heap; 18 class Heap;
16 class ObjectPointerVisitor; 19 class ObjectPointerVisitor;
17 20
18 // An aligned page containing old generation objects. Alignment is used to be 21 // An aligned page containing old generation objects. Alignment is used to be
19 // able to get to a HeapPage header quickly based on a pointer to an object. 22 // able to get to a HeapPage header quickly based on a pointer to an object.
20 class HeapPage { 23 class HeapPage {
21 public: 24 public:
22 enum PageType { 25 enum PageType {
23 kData = 0, 26 kData = 0,
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 117
115 bool CanGrowPageSpace(intptr_t size_in_bytes); 118 bool CanGrowPageSpace(intptr_t size_in_bytes);
116 119
117 // A garbage collection is considered as successful if more than 120 // A garbage collection is considered as successful if more than
118 // heap_growth_ratio % of memory got deallocated by the garbage collector. 121 // heap_growth_ratio % of memory got deallocated by the garbage collector.
119 // In this case garbage collection will be performed next time. Otherwise 122 // In this case garbage collection will be performed next time. Otherwise
120 // the heap will grow. 123 // the heap will grow.
121 void EvaluateGarbageCollection(intptr_t in_use_before, intptr_t in_use_after, 124 void EvaluateGarbageCollection(intptr_t in_use_before, intptr_t in_use_after,
122 int64_t start, int64_t end); 125 int64_t start, int64_t end);
123 126
127 int64_t last_code_collection_in_us() { return last_code_collection_in_us_; }
128 void set_last_code_collection_in_us(int64_t t) {
129 last_code_collection_in_us_ = t;
130 }
131
124 void set_is_enabled(bool state) { 132 void set_is_enabled(bool state) {
125 is_enabled_ = state; 133 is_enabled_ = state;
126 } 134 }
127 bool is_enabled() { 135 bool is_enabled() {
128 return is_enabled_; 136 return is_enabled_;
129 } 137 }
130 138
131 private: 139 private:
132 bool is_enabled_; 140 bool is_enabled_;
133 141
134 // Heap growth control variable. 142 // Heap growth control variable.
135 intptr_t grow_heap_; 143 intptr_t grow_heap_;
136 144
137 // If the garbage collector was not able to free more than heap_growth_ratio_ 145 // If the garbage collector was not able to free more than heap_growth_ratio_
138 // memory, then the heap is grown. Otherwise garbage collection is performed. 146 // memory, then the heap is grown. Otherwise garbage collection is performed.
139 int heap_growth_ratio_; 147 int heap_growth_ratio_;
140 148
141 // The desired percent of heap in-use after a garbage collection. 149 // The desired percent of heap in-use after a garbage collection.
142 // Equivalent to \frac{100-heap_growth_ratio_}{100}. 150 // Equivalent to \frac{100-heap_growth_ratio_}{100}.
143 double desired_utilization_; 151 double desired_utilization_;
144 152
145 // Number of pages we grow. 153 // Number of pages we grow.
146 int heap_growth_rate_; 154 int heap_growth_rate_;
147 155
148 // If the relative GC time stays below garbage_collection_time_ratio_ 156 // If the relative GC time stays below garbage_collection_time_ratio_
149 // garbage collection can be performed. 157 // garbage collection can be performed.
150 int garbage_collection_time_ratio_; 158 int garbage_collection_time_ratio_;
151 159
160 // The time in microseconds of the last time we tried to collect unused
161 // code.
162 int64_t last_code_collection_in_us_;
163
152 PageSpaceGarbageCollectionHistory history_; 164 PageSpaceGarbageCollectionHistory history_;
153 165
154 DISALLOW_IMPLICIT_CONSTRUCTORS(PageSpaceController); 166 DISALLOW_IMPLICIT_CONSTRUCTORS(PageSpaceController);
155 }; 167 };
156 168
157 169
158 class PageSpace { 170 class PageSpace {
159 public: 171 public:
160 // TODO(iposva): Determine heap sizes and tune the page size accordingly. 172 // TODO(iposva): Determine heap sizes and tune the page size accordingly.
161 static const intptr_t kPageSize = 256 * KB; 173 static const intptr_t kPageSize = 256 * KB;
(...skipping 19 matching lines...) Expand all
181 bool IsValidAddress(uword addr) const { 193 bool IsValidAddress(uword addr) const {
182 return Contains(addr); 194 return Contains(addr);
183 } 195 }
184 196
185 void VisitObjects(ObjectVisitor* visitor) const; 197 void VisitObjects(ObjectVisitor* visitor) const;
186 void VisitObjectPointers(ObjectPointerVisitor* visitor) const; 198 void VisitObjectPointers(ObjectPointerVisitor* visitor) const;
187 199
188 RawObject* FindObject(FindObjectVisitor* visitor, 200 RawObject* FindObject(FindObjectVisitor* visitor,
189 HeapPage::PageType type) const; 201 HeapPage::PageType type) const;
190 202
203 // Runs a visitor that attempts to drop references to code that has not
204 // been run in awhile.
205 void TryDetachingCode();
206
191 // Collect the garbage in the page space using mark-sweep. 207 // Collect the garbage in the page space using mark-sweep.
192 void MarkSweep(bool invoke_api_callbacks); 208 void MarkSweep(bool invoke_api_callbacks);
193 209
194 void StartEndAddress(uword* start, uword* end) const; 210 void StartEndAddress(uword* start, uword* end) const;
195 211
196 void SetGrowthControlState(bool state) { 212 void SetGrowthControlState(bool state) {
197 page_space_controller_.set_is_enabled(state); 213 page_space_controller_.set_is_enabled(state);
198 } 214 }
199 215
200 bool GrowthControlState() { 216 bool GrowthControlState() {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 PageSpaceController page_space_controller_; 268 PageSpaceController page_space_controller_;
253 269
254 friend class PageSpaceController; 270 friend class PageSpaceController;
255 271
256 DISALLOW_IMPLICIT_CONSTRUCTORS(PageSpace); 272 DISALLOW_IMPLICIT_CONSTRUCTORS(PageSpace);
257 }; 273 };
258 274
259 } // namespace dart 275 } // namespace dart
260 276
261 #endif // VM_PAGES_H_ 277 #endif // VM_PAGES_H_
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/pages.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698