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

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

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 years, 5 months 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
« no previous file with comments | « runtime/vm/handles.cc ('k') | runtime/vm/handles_test.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) 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_HANDLES_IMPL_H_ 5 #ifndef RUNTIME_VM_HANDLES_IMPL_H_
6 #define RUNTIME_VM_HANDLES_IMPL_H_ 6 #define RUNTIME_VM_HANDLES_IMPL_H_
7 7
8 #include "vm/heap.h" 8 #include "vm/heap.h"
9 #include "vm/thread.h" 9 #include "vm/thread.h"
10 #include "vm/visitor.h" 10 #include "vm/visitor.h"
11 11
12 namespace dart { 12 namespace dart {
13 13
14 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 14 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
15 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 15 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
16 VisitObjectPointers(ObjectPointerVisitor* visitor) { 16 VisitObjectPointers(ObjectPointerVisitor* visitor) {
17 // Visit all zone handles. 17 // Visit all zone handles.
18 HandlesBlock* block = zone_blocks_; 18 HandlesBlock* block = zone_blocks_;
19 while (block != NULL) { 19 while (block != NULL) {
20 block->VisitObjectPointers(visitor); 20 block->VisitObjectPointers(visitor);
21 block = block->next_block(); 21 block = block->next_block();
22 } 22 }
23 23
24 // Visit all scoped handles. 24 // Visit all scoped handles.
25 VisitScopedHandles(visitor); 25 VisitScopedHandles(visitor);
26 } 26 }
27 27
28
29 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 28 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
30 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 29 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
31 VisitScopedHandles(ObjectPointerVisitor* visitor) { 30 VisitScopedHandles(ObjectPointerVisitor* visitor) {
32 HandlesBlock* block = &first_scoped_block_; 31 HandlesBlock* block = &first_scoped_block_;
33 do { 32 do {
34 block->VisitObjectPointers(visitor); 33 block->VisitObjectPointers(visitor);
35 if (block == scoped_blocks_) { 34 if (block == scoped_blocks_) {
36 return; 35 return;
37 } 36 }
38 block = block->next_block(); 37 block = block->next_block();
39 } while (block != NULL); 38 } while (block != NULL);
40 UNREACHABLE(); 39 UNREACHABLE();
41 } 40 }
42 41
43
44 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 42 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
45 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::Visit( 43 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::Visit(
46 HandleVisitor* visitor) { 44 HandleVisitor* visitor) {
47 // Visit all zone handles. 45 // Visit all zone handles.
48 HandlesBlock* block = zone_blocks_; 46 HandlesBlock* block = zone_blocks_;
49 while (block != NULL) { 47 while (block != NULL) {
50 block->Visit(visitor); 48 block->Visit(visitor);
51 block = block->next_block(); 49 block = block->next_block();
52 } 50 }
53 51
54 // Visit all scoped handles. 52 // Visit all scoped handles.
55 block = &first_scoped_block_; 53 block = &first_scoped_block_;
56 do { 54 do {
57 block->Visit(visitor); 55 block->Visit(visitor);
58 block = block->next_block(); 56 block = block->next_block();
59 } while (block != NULL); 57 } while (block != NULL);
60 } 58 }
61 59
62
63 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 60 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
64 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::Reset() { 61 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::Reset() {
65 // Delete all the extra zone handle blocks allocated and reinit the first 62 // Delete all the extra zone handle blocks allocated and reinit the first
66 // zone block. 63 // zone block.
67 if (zone_blocks_ != NULL) { 64 if (zone_blocks_ != NULL) {
68 DeleteHandleBlocks(zone_blocks_->next_block()); 65 DeleteHandleBlocks(zone_blocks_->next_block());
69 zone_blocks_->ReInit(); 66 zone_blocks_->ReInit();
70 } 67 }
71 68
72 // Delete all the extra scoped handle blocks allocated and reinit the first 69 // Delete all the extra scoped handle blocks allocated and reinit the first
73 // scoped block. 70 // scoped block.
74 DeleteHandleBlocks(first_scoped_block_.next_block()); 71 DeleteHandleBlocks(first_scoped_block_.next_block());
75 first_scoped_block_.ReInit(); 72 first_scoped_block_.ReInit();
76 scoped_blocks_ = &first_scoped_block_; 73 scoped_blocks_ = &first_scoped_block_;
77 } 74 }
78 75
79
80 // Figure out the current handle scope using the current Zone and 76 // Figure out the current handle scope using the current Zone and
81 // allocate a handle in that scope. The function assumes that a 77 // allocate a handle in that scope. The function assumes that a
82 // current handle scope exists. It asserts for this appropriately. 78 // current handle scope exists. It asserts for this appropriately.
83 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 79 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
84 uword Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 80 uword Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
85 AllocateHandle(Zone* zone) { 81 AllocateHandle(Zone* zone) {
86 #if defined(DEBUG) 82 #if defined(DEBUG)
87 Thread* thread = Thread::Current(); 83 Thread* thread = Thread::Current();
88 ASSERT(thread->top_handle_scope() != NULL); 84 ASSERT(thread->top_handle_scope() != NULL);
89 ASSERT(thread->no_handle_scope_depth() == 0); 85 ASSERT(thread->no_handle_scope_depth() == 0);
90 #endif // DEBUG 86 #endif // DEBUG
91 Handles* handles = zone->handles(); 87 Handles* handles = zone->handles();
92 ASSERT(handles != NULL); 88 ASSERT(handles != NULL);
93 return handles->AllocateScopedHandle(); 89 return handles->AllocateScopedHandle();
94 } 90 }
95 91
96
97 // The function assumes that 'zone' is the current zone and asserts for 92 // The function assumes that 'zone' is the current zone and asserts for
98 // this appropriately. 93 // this appropriately.
99 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 94 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
100 uword Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 95 uword Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
101 AllocateZoneHandle(Zone* zone) { 96 AllocateZoneHandle(Zone* zone) {
102 #if defined(DEBUG) 97 #if defined(DEBUG)
103 Thread* thread = Thread::Current(); 98 Thread* thread = Thread::Current();
104 ASSERT(thread->zone() == zone); 99 ASSERT(thread->zone() == zone);
105 ASSERT(thread->no_handle_scope_depth() == 0); 100 ASSERT(thread->no_handle_scope_depth() == 0);
106 #endif // DEBUG 101 #endif // DEBUG
107 Handles* handles = zone->handles(); 102 Handles* handles = zone->handles();
108 ASSERT(handles != NULL); 103 ASSERT(handles != NULL);
109 uword address = handles->AllocateHandleInZone(); 104 uword address = handles->AllocateHandleInZone();
110 return address; 105 return address;
111 } 106 }
112 107
113
114 // Figure out the current zone using the current Thread and 108 // Figure out the current zone using the current Thread and
115 // check if the specified handle has been allocated in this zone. 109 // check if the specified handle has been allocated in this zone.
116 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 110 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
117 bool Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 111 bool Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
118 IsZoneHandle(uword handle) { 112 IsZoneHandle(uword handle) {
119 // TODO(5411412): Accessing the current thread is a performance problem, 113 // TODO(5411412): Accessing the current thread is a performance problem,
120 // consider passing it down as a parameter. 114 // consider passing it down as a parameter.
121 Thread* thread = Thread::Current(); 115 Thread* thread = Thread::Current();
122 ASSERT(thread != NULL); 116 ASSERT(thread != NULL);
123 ASSERT(thread->zone() != NULL); 117 ASSERT(thread->zone() != NULL);
124 Handles* handles = thread->zone()->handles(); 118 Handles* handles = thread->zone()->handles();
125 ASSERT(handles != NULL); 119 ASSERT(handles != NULL);
126 return handles->IsValidZoneHandle(handle); 120 return handles->IsValidZoneHandle(handle);
127 } 121 }
128 122
129
130 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 123 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
131 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 124 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
132 DeleteAll() { 125 DeleteAll() {
133 // Delete all the zone allocated handle blocks. 126 // Delete all the zone allocated handle blocks.
134 // GCTrace does not need to trace this call to DeleteHandleBlocks, 127 // GCTrace does not need to trace this call to DeleteHandleBlocks,
135 // since the individual zone deletions will be caught 128 // since the individual zone deletions will be caught
136 // by instrumentation in the BaseZone destructor. 129 // by instrumentation in the BaseZone destructor.
137 DeleteHandleBlocks(zone_blocks_); 130 DeleteHandleBlocks(zone_blocks_);
138 zone_blocks_ = NULL; 131 zone_blocks_ = NULL;
139 132
140 // Delete all the scoped handle blocks. 133 // Delete all the scoped handle blocks.
141 scoped_blocks_ = first_scoped_block_.next_block(); 134 scoped_blocks_ = first_scoped_block_.next_block();
142 DeleteHandleBlocks(scoped_blocks_); 135 DeleteHandleBlocks(scoped_blocks_);
143 first_scoped_block_.ReInit(); 136 first_scoped_block_.ReInit();
144 scoped_blocks_ = &first_scoped_block_; 137 scoped_blocks_ = &first_scoped_block_;
145 } 138 }
146 139
147
148 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 140 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
149 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 141 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
150 DeleteHandleBlocks(HandlesBlock* blocks) { 142 DeleteHandleBlocks(HandlesBlock* blocks) {
151 while (blocks != NULL) { 143 while (blocks != NULL) {
152 HandlesBlock* block = blocks; 144 HandlesBlock* block = blocks;
153 blocks = blocks->next_block(); 145 blocks = blocks->next_block();
154 delete block; 146 delete block;
155 } 147 }
156 } 148 }
157 149
158
159 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 150 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
160 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 151 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
161 SetupNextScopeBlock() { 152 SetupNextScopeBlock() {
162 if (FLAG_trace_handles) { 153 if (FLAG_trace_handles) {
163 OS::PrintErr("*** Handle Counts for (0x%" Px "):Zone = %d,Scoped = %d\n", 154 OS::PrintErr("*** Handle Counts for (0x%" Px "):Zone = %d,Scoped = %d\n",
164 reinterpret_cast<intptr_t>(this), CountZoneHandles(), 155 reinterpret_cast<intptr_t>(this), CountZoneHandles(),
165 CountScopedHandles()); 156 CountScopedHandles());
166 } 157 }
167 if (scoped_blocks_->next_block() == NULL) { 158 if (scoped_blocks_->next_block() == NULL) {
168 scoped_blocks_->set_next_block(new HandlesBlock(NULL)); 159 scoped_blocks_->set_next_block(new HandlesBlock(NULL));
169 } 160 }
170 scoped_blocks_ = scoped_blocks_->next_block(); 161 scoped_blocks_ = scoped_blocks_->next_block();
171 scoped_blocks_->set_next_handle_slot(0); 162 scoped_blocks_->set_next_handle_slot(0);
172 #if defined(DEBUG) 163 #if defined(DEBUG)
173 scoped_blocks_->ZapFreeHandles(); 164 scoped_blocks_->ZapFreeHandles();
174 #endif 165 #endif
175 } 166 }
176 167
177
178 // Validation of the handle involves iterating through all the 168 // Validation of the handle involves iterating through all the
179 // handle blocks to check if the handle is valid, please 169 // handle blocks to check if the handle is valid, please
180 // use this only in ASSERT code for verification purposes. 170 // use this only in ASSERT code for verification purposes.
181 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 171 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
182 bool Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 172 bool Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
183 IsValidScopedHandle(uword handle) const { 173 IsValidScopedHandle(uword handle) const {
184 const HandlesBlock* iterator = &first_scoped_block_; 174 const HandlesBlock* iterator = &first_scoped_block_;
185 while (iterator != NULL) { 175 while (iterator != NULL) {
186 if (iterator->IsValidHandle(handle)) { 176 if (iterator->IsValidHandle(handle)) {
187 return true; 177 return true;
188 } 178 }
189 iterator = iterator->next_block(); 179 iterator = iterator->next_block();
190 } 180 }
191 return false; 181 return false;
192 } 182 }
193 183
194
195 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 184 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
196 bool Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 185 bool Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
197 IsValidZoneHandle(uword handle) const { 186 IsValidZoneHandle(uword handle) const {
198 const HandlesBlock* iterator = zone_blocks_; 187 const HandlesBlock* iterator = zone_blocks_;
199 while (iterator != NULL) { 188 while (iterator != NULL) {
200 if (iterator->IsValidHandle(handle)) { 189 if (iterator->IsValidHandle(handle)) {
201 return true; 190 return true;
202 } 191 }
203 iterator = iterator->next_block(); 192 iterator = iterator->next_block();
204 } 193 }
205 return false; 194 return false;
206 } 195 }
207 196
208
209 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 197 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
210 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 198 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
211 SetupNextZoneBlock() { 199 SetupNextZoneBlock() {
212 if (FLAG_trace_handles) { 200 if (FLAG_trace_handles) {
213 OS::PrintErr("*** Handle Counts for (0x%" Px "):Zone = %d,Scoped = %d\n", 201 OS::PrintErr("*** Handle Counts for (0x%" Px "):Zone = %d,Scoped = %d\n",
214 reinterpret_cast<intptr_t>(this), CountZoneHandles(), 202 reinterpret_cast<intptr_t>(this), CountZoneHandles(),
215 CountScopedHandles()); 203 CountScopedHandles());
216 } 204 }
217 zone_blocks_ = new HandlesBlock(zone_blocks_); 205 zone_blocks_ = new HandlesBlock(zone_blocks_);
218 ASSERT(zone_blocks_ != NULL); 206 ASSERT(zone_blocks_ != NULL);
219 } 207 }
220 208
221
222 #if defined(DEBUG) 209 #if defined(DEBUG)
223 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 210 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
224 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 211 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
225 VerifyScopedHandleState() { 212 VerifyScopedHandleState() {
226 HandlesBlock* block = &first_scoped_block_; 213 HandlesBlock* block = &first_scoped_block_;
227 const intptr_t end_index = (kHandleSizeInWords * kHandlesPerChunk); 214 const intptr_t end_index = (kHandleSizeInWords * kHandlesPerChunk);
228 do { 215 do {
229 if (scoped_blocks_ == block && block->next_handle_slot() <= end_index) { 216 if (scoped_blocks_ == block && block->next_handle_slot() <= end_index) {
230 return; 217 return;
231 } 218 }
232 block = block->next_block(); 219 block = block->next_block();
233 } while (block != NULL); 220 } while (block != NULL);
234 ASSERT(false); 221 ASSERT(false);
235 } 222 }
236 223
237
238 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 224 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
239 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 225 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
240 ZapFreeScopedHandles() { 226 ZapFreeScopedHandles() {
241 HandlesBlock* block = scoped_blocks_; 227 HandlesBlock* block = scoped_blocks_;
242 while (block != NULL) { 228 while (block != NULL) {
243 block->ZapFreeHandles(); 229 block->ZapFreeHandles();
244 block = block->next_block(); 230 block = block->next_block();
245 } 231 }
246 } 232 }
247 #endif 233 #endif
248 234
249
250 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 235 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
251 int Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 236 int Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
252 CountScopedHandles() const { 237 CountScopedHandles() const {
253 int count = 0; 238 int count = 0;
254 const HandlesBlock* block = &first_scoped_block_; 239 const HandlesBlock* block = &first_scoped_block_;
255 do { 240 do {
256 count += block->HandleCount(); 241 count += block->HandleCount();
257 if (block == scoped_blocks_) { 242 if (block == scoped_blocks_) {
258 return count; 243 return count;
259 } 244 }
260 block = block->next_block(); 245 block = block->next_block();
261 } while (block != NULL); 246 } while (block != NULL);
262 UNREACHABLE(); 247 UNREACHABLE();
263 return 0; 248 return 0;
264 } 249 }
265 250
266
267 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 251 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
268 int Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 252 int Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
269 CountZoneHandles() const { 253 CountZoneHandles() const {
270 int count = 0; 254 int count = 0;
271 const HandlesBlock* block = zone_blocks_; 255 const HandlesBlock* block = zone_blocks_;
272 while (block != NULL) { 256 while (block != NULL) {
273 count += block->HandleCount(); 257 count += block->HandleCount();
274 block = block->next_block(); 258 block = block->next_block();
275 } 259 }
276 return count; 260 return count;
277 } 261 }
278 262
279
280 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 263 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
281 Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::HandlesBlock:: 264 Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::HandlesBlock::
282 ~HandlesBlock() { 265 ~HandlesBlock() {
283 #if defined(DEBUG) 266 #if defined(DEBUG)
284 ReInit(); 267 ReInit();
285 #endif 268 #endif
286 } 269 }
287 270
288
289 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 271 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
290 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 272 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
291 HandlesBlock::ReInit() { 273 HandlesBlock::ReInit() {
292 next_handle_slot_ = 0; 274 next_handle_slot_ = 0;
293 next_block_ = NULL; 275 next_block_ = NULL;
294 #if defined(DEBUG) 276 #if defined(DEBUG)
295 ZapFreeHandles(); 277 ZapFreeHandles();
296 #endif 278 #endif
297 } 279 }
298 280
299
300 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 281 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
301 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 282 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
302 HandlesBlock::VisitObjectPointers(ObjectPointerVisitor* visitor) { 283 HandlesBlock::VisitObjectPointers(ObjectPointerVisitor* visitor) {
303 ASSERT(visitor != NULL); 284 ASSERT(visitor != NULL);
304 for (intptr_t i = 0; i < next_handle_slot_; i += kHandleSizeInWords) { 285 for (intptr_t i = 0; i < next_handle_slot_; i += kHandleSizeInWords) {
305 visitor->VisitPointer( 286 visitor->VisitPointer(
306 reinterpret_cast<RawObject**>(&data_[i + kOffsetOfRawPtr / kWordSize])); 287 reinterpret_cast<RawObject**>(&data_[i + kOffsetOfRawPtr / kWordSize]));
307 } 288 }
308 } 289 }
309 290
310
311 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 291 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
312 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 292 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
313 HandlesBlock::Visit(HandleVisitor* visitor) { 293 HandlesBlock::Visit(HandleVisitor* visitor) {
314 ASSERT(visitor != NULL); 294 ASSERT(visitor != NULL);
315 for (intptr_t i = 0; i < next_handle_slot_; i += kHandleSizeInWords) { 295 for (intptr_t i = 0; i < next_handle_slot_; i += kHandleSizeInWords) {
316 visitor->VisitHandle(reinterpret_cast<uword>(&data_[i])); 296 visitor->VisitHandle(reinterpret_cast<uword>(&data_[i]));
317 } 297 }
318 } 298 }
319 299
320
321 #if defined(DEBUG) 300 #if defined(DEBUG)
322 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 301 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
323 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 302 void Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
324 HandlesBlock::ZapFreeHandles() { 303 HandlesBlock::ZapFreeHandles() {
325 // Reinitialize the handle area to some uninitialized value. 304 // Reinitialize the handle area to some uninitialized value.
326 for (intptr_t i = next_handle_slot_; 305 for (intptr_t i = next_handle_slot_;
327 i < (kHandleSizeInWords * kHandlesPerChunk); i++) { 306 i < (kHandleSizeInWords * kHandlesPerChunk); i++) {
328 data_[i] = kZapUninitializedWord; 307 data_[i] = kZapUninitializedWord;
329 } 308 }
330 } 309 }
331 #endif 310 #endif
332 311
333
334 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr> 312 template <int kHandleSizeInWords, int kHandlesPerChunk, int kOffsetOfRawPtr>
335 int Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>:: 313 int Handles<kHandleSizeInWords, kHandlesPerChunk, kOffsetOfRawPtr>::
336 HandlesBlock::HandleCount() const { 314 HandlesBlock::HandleCount() const {
337 return (next_handle_slot_ / kHandleSizeInWords); 315 return (next_handle_slot_ / kHandleSizeInWords);
338 } 316 }
339 317
340 } // namespace dart 318 } // namespace dart
341 319
342 #endif // RUNTIME_VM_HANDLES_IMPL_H_ 320 #endif // RUNTIME_VM_HANDLES_IMPL_H_
OLDNEW
« no previous file with comments | « runtime/vm/handles.cc ('k') | runtime/vm/handles_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698