OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 RUNTIME_VM_SCAVENGER_H_ | 5 #ifndef RUNTIME_VM_SCAVENGER_H_ |
6 #define RUNTIME_VM_SCAVENGER_H_ | 6 #define RUNTIME_VM_SCAVENGER_H_ |
7 | 7 |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "platform/utils.h" | 9 #include "platform/utils.h" |
10 #include "vm/dart.h" | 10 #include "vm/dart.h" |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 | 90 |
91 // Fraction of promotion candidates that survived and was thereby promoted. | 91 // Fraction of promotion candidates that survived and was thereby promoted. |
92 // Returns zero if there were no promotion candidates. | 92 // Returns zero if there were no promotion candidates. |
93 double PromoCandidatesSuccessFraction() const { | 93 double PromoCandidatesSuccessFraction() const { |
94 return promo_candidates_in_words_ > 0 | 94 return promo_candidates_in_words_ > 0 |
95 ? promoted_in_words_ / | 95 ? promoted_in_words_ / |
96 static_cast<double>(promo_candidates_in_words_) | 96 static_cast<double>(promo_candidates_in_words_) |
97 : 0.0; | 97 : 0.0; |
98 } | 98 } |
99 | 99 |
| 100 intptr_t UsedBeforeInWords() const { return before_.used_in_words; } |
| 101 |
100 int64_t DurationMicros() const { return end_micros_ - start_micros_; } | 102 int64_t DurationMicros() const { return end_micros_ - start_micros_; } |
101 | 103 |
102 private: | 104 private: |
103 int64_t start_micros_; | 105 int64_t start_micros_; |
104 int64_t end_micros_; | 106 int64_t end_micros_; |
105 SpaceUsage before_; | 107 SpaceUsage before_; |
106 SpaceUsage after_; | 108 SpaceUsage after_; |
107 intptr_t promo_candidates_in_words_; | 109 intptr_t promo_candidates_in_words_; |
108 intptr_t promoted_in_words_; | 110 intptr_t promoted_in_words_; |
109 }; | 111 }; |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 return usage; | 196 return usage; |
195 } | 197 } |
196 | 198 |
197 void VisitObjects(ObjectVisitor* visitor) const; | 199 void VisitObjects(ObjectVisitor* visitor) const; |
198 void VisitObjectPointers(ObjectPointerVisitor* visitor) const; | 200 void VisitObjectPointers(ObjectPointerVisitor* visitor) const; |
199 | 201 |
200 void AddRegionsToObjectSet(ObjectSet* set) const; | 202 void AddRegionsToObjectSet(ObjectSet* set) const; |
201 | 203 |
202 void WriteProtect(bool read_only); | 204 void WriteProtect(bool read_only); |
203 | 205 |
| 206 bool ShouldPerformIdleScavenge(int64_t deadline); |
| 207 |
204 void AddGCTime(int64_t micros) { gc_time_micros_ += micros; } | 208 void AddGCTime(int64_t micros) { gc_time_micros_ += micros; } |
205 | 209 |
206 int64_t gc_time_micros() const { return gc_time_micros_; } | 210 int64_t gc_time_micros() const { return gc_time_micros_; } |
207 | 211 |
208 void IncrementCollections() { collections_++; } | 212 void IncrementCollections() { collections_++; } |
209 | 213 |
210 intptr_t collections() const { return collections_; } | 214 intptr_t collections() const { return collections_; } |
211 | 215 |
212 #ifndef PRODUCT | 216 #ifndef PRODUCT |
213 void PrintToJSONObject(JSONObject* object) const; | 217 void PrintToJSONObject(JSONObject* object) const; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 uword object_alignment_; | 304 uword object_alignment_; |
301 | 305 |
302 // Keep track whether a scavenge is currently running. | 306 // Keep track whether a scavenge is currently running. |
303 bool scavenging_; | 307 bool scavenging_; |
304 | 308 |
305 // Keep track of pending weak properties discovered while scagenging. | 309 // Keep track of pending weak properties discovered while scagenging. |
306 RawWeakProperty* delayed_weak_properties_; | 310 RawWeakProperty* delayed_weak_properties_; |
307 | 311 |
308 int64_t gc_time_micros_; | 312 int64_t gc_time_micros_; |
309 intptr_t collections_; | 313 intptr_t collections_; |
310 static const int kStatsHistoryCapacity = 2; | 314 static const int kStatsHistoryCapacity = 4; |
311 RingBuffer<ScavengeStats, kStatsHistoryCapacity> stats_history_; | 315 RingBuffer<ScavengeStats, kStatsHistoryCapacity> stats_history_; |
312 | 316 |
| 317 intptr_t scavenge_words_per_micro_; |
| 318 intptr_t idle_scavenge_threshold_in_words_; |
| 319 |
313 // The total size of external data associated with objects in this scavenger. | 320 // The total size of external data associated with objects in this scavenger. |
314 intptr_t external_size_; | 321 intptr_t external_size_; |
315 | 322 |
316 bool failed_to_promote_; | 323 bool failed_to_promote_; |
317 | 324 |
318 friend class ScavengerVisitor; | 325 friend class ScavengerVisitor; |
319 friend class ScavengerWeakVisitor; | 326 friend class ScavengerWeakVisitor; |
320 | 327 |
321 DISALLOW_COPY_AND_ASSIGN(Scavenger); | 328 DISALLOW_COPY_AND_ASSIGN(Scavenger); |
322 }; | 329 }; |
323 | 330 |
324 } // namespace dart | 331 } // namespace dart |
325 | 332 |
326 #endif // RUNTIME_VM_SCAVENGER_H_ | 333 #endif // RUNTIME_VM_SCAVENGER_H_ |
OLD | NEW |