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 VM_CLASS_TABLE_H_ | 5 #ifndef VM_CLASS_TABLE_H_ |
6 #define VM_CLASS_TABLE_H_ | 6 #define VM_CLASS_TABLE_H_ |
7 | 7 |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/bitfield.h" |
9 #include "vm/globals.h" | 10 #include "vm/globals.h" |
10 | 11 |
11 namespace dart { | 12 namespace dart { |
12 | 13 |
13 class Class; | 14 class Class; |
14 class ClassStats; | 15 class ClassStats; |
15 class JSONArray; | 16 class JSONArray; |
16 class JSONObject; | 17 class JSONObject; |
17 class JSONStream; | 18 class JSONStream; |
18 template<typename T> class MallocGrowableArray; | 19 template<typename T> class MallocGrowableArray; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 OFFSET_OF(AllocStats<intptr_t>, old_count); | 96 OFFSET_OF(AllocStats<intptr_t>, old_count); |
96 } | 97 } |
97 static intptr_t allocated_size_since_gc_new_space_offset() { | 98 static intptr_t allocated_size_since_gc_new_space_offset() { |
98 return OFFSET_OF(ClassHeapStats, recent) + | 99 return OFFSET_OF(ClassHeapStats, recent) + |
99 OFFSET_OF(AllocStats<intptr_t>, new_size); | 100 OFFSET_OF(AllocStats<intptr_t>, new_size); |
100 } | 101 } |
101 static intptr_t allocated_size_since_gc_old_space_offset() { | 102 static intptr_t allocated_size_since_gc_old_space_offset() { |
102 return OFFSET_OF(ClassHeapStats, recent) + | 103 return OFFSET_OF(ClassHeapStats, recent) + |
103 OFFSET_OF(AllocStats<intptr_t>, old_size); | 104 OFFSET_OF(AllocStats<intptr_t>, old_size); |
104 } | 105 } |
| 106 static intptr_t state_offset() { |
| 107 return OFFSET_OF(ClassHeapStats, state_); |
| 108 } |
| 109 static intptr_t TraceAllocationMask() { |
| 110 return (1 << kTraceAllocationBit); |
| 111 } |
105 | 112 |
106 void Initialize(); | 113 void Initialize(); |
107 void ResetAtNewGC(); | 114 void ResetAtNewGC(); |
108 void ResetAtOldGC(); | 115 void ResetAtOldGC(); |
109 void ResetAccumulator(); | 116 void ResetAccumulator(); |
110 void UpdatePromotedAfterNewGC(); | 117 void UpdatePromotedAfterNewGC(); |
111 void UpdateSize(intptr_t instance_size); | 118 void UpdateSize(intptr_t instance_size); |
112 void PrintToJSONObject(const Class& cls, JSONObject* obj) const; | 119 void PrintToJSONObject(const Class& cls, JSONObject* obj) const; |
113 void Verify(); | 120 void Verify(); |
114 | 121 |
| 122 bool trace_allocation() const { |
| 123 return TraceAllocationBit::decode(state_); |
| 124 } |
| 125 |
| 126 void set_trace_allocation(bool trace_allocation) { |
| 127 state_ = TraceAllocationBit::update(trace_allocation, state_); |
| 128 } |
| 129 |
115 private: | 130 private: |
| 131 enum StateBits { |
| 132 kTraceAllocationBit = 0, |
| 133 }; |
| 134 |
| 135 class TraceAllocationBit : public BitField<bool, kTraceAllocationBit, 1> {}; |
| 136 |
116 // Recent old at start of last new GC (used to compute promoted_*). | 137 // Recent old at start of last new GC (used to compute promoted_*). |
117 intptr_t old_pre_new_gc_count_; | 138 intptr_t old_pre_new_gc_count_; |
118 intptr_t old_pre_new_gc_size_; | 139 intptr_t old_pre_new_gc_size_; |
| 140 intptr_t state_; |
119 }; | 141 }; |
120 | 142 |
121 | 143 |
122 class ClassTable { | 144 class ClassTable { |
123 public: | 145 public: |
124 ClassTable(); | 146 ClassTable(); |
125 // Creates a shallow copy of the original class table for some read-only | 147 // Creates a shallow copy of the original class table for some read-only |
126 // access, without support for stats data. | 148 // access, without support for stats data. |
127 explicit ClassTable(ClassTable* original); | 149 explicit ClassTable(ClassTable* original); |
128 ~ClassTable(); | 150 ~ClassTable(); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 } | 209 } |
188 | 210 |
189 ClassHeapStats* StatsWithUpdatedSize(intptr_t cid); | 211 ClassHeapStats* StatsWithUpdatedSize(intptr_t cid); |
190 | 212 |
191 void AllocationProfilePrintJSON(JSONStream* stream); | 213 void AllocationProfilePrintJSON(JSONStream* stream); |
192 void ResetAllocationAccumulators(); | 214 void ResetAllocationAccumulators(); |
193 | 215 |
194 // Deallocates table copies. Do not call during concurrent access to table. | 216 // Deallocates table copies. Do not call during concurrent access to table. |
195 void FreeOldTables(); | 217 void FreeOldTables(); |
196 | 218 |
| 219 void TraceAllocationsFor(intptr_t cid, bool trace); |
| 220 |
197 private: | 221 private: |
198 friend class MarkingVisitor; | 222 friend class MarkingVisitor; |
199 friend class ScavengerVisitor; | 223 friend class ScavengerVisitor; |
200 friend class ClassHeapStatsTestHelper; | 224 friend class ClassHeapStatsTestHelper; |
201 static const int initial_capacity_ = 512; | 225 static const int initial_capacity_ = 512; |
202 static const int capacity_increment_ = 256; | 226 static const int capacity_increment_ = 256; |
203 | 227 |
204 static bool ShouldUpdateSizeForClassId(intptr_t cid); | 228 static bool ShouldUpdateSizeForClassId(intptr_t cid); |
205 | 229 |
206 intptr_t top_; | 230 intptr_t top_; |
(...skipping 11 matching lines...) Expand all Loading... |
218 ClassHeapStats* PreliminaryStatsAt(intptr_t cid); | 242 ClassHeapStats* PreliminaryStatsAt(intptr_t cid); |
219 void UpdateLiveOld(intptr_t cid, intptr_t size); | 243 void UpdateLiveOld(intptr_t cid, intptr_t size); |
220 void UpdateLiveNew(intptr_t cid, intptr_t size); | 244 void UpdateLiveNew(intptr_t cid, intptr_t size); |
221 | 245 |
222 DISALLOW_COPY_AND_ASSIGN(ClassTable); | 246 DISALLOW_COPY_AND_ASSIGN(ClassTable); |
223 }; | 247 }; |
224 | 248 |
225 } // namespace dart | 249 } // namespace dart |
226 | 250 |
227 #endif // VM_CLASS_TABLE_H_ | 251 #endif // VM_CLASS_TABLE_H_ |
OLD | NEW |