OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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_ISOLATE_H_ | 5 #ifndef VM_ISOLATE_H_ |
6 #define VM_ISOLATE_H_ | 6 #define VM_ISOLATE_H_ |
7 | 7 |
8 #include "include/dart_api.h" | 8 #include "include/dart_api.h" |
9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
10 #include "platform/thread.h" | 10 #include "platform/thread.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 class MessageHandler; | 29 class MessageHandler; |
30 class Mutex; | 30 class Mutex; |
31 class ObjectPointerVisitor; | 31 class ObjectPointerVisitor; |
32 class ObjectStore; | 32 class ObjectStore; |
33 class RawArray; | 33 class RawArray; |
34 class RawContext; | 34 class RawContext; |
35 class RawDouble; | 35 class RawDouble; |
36 class RawMint; | 36 class RawMint; |
37 class RawInteger; | 37 class RawInteger; |
38 class RawError; | 38 class RawError; |
| 39 class Simulator; |
39 class StackResource; | 40 class StackResource; |
40 class StackZone; | 41 class StackZone; |
41 class StubCode; | 42 class StubCode; |
42 | 43 |
43 | 44 |
44 // Used by the deoptimization infrastructure to defer allocation of Double | 45 // Used by the deoptimization infrastructure to defer allocation of Double |
45 // objects until frame is fully rewritten and GC is safe. | 46 // objects until frame is fully rewritten and GC is safe. |
46 // See callers of Isolate::DeferDoubleMaterialization. | 47 // See callers of Isolate::DeferDoubleMaterialization. |
47 class DeferredDouble { | 48 class DeferredDouble { |
48 public: | 49 public: |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 return reinterpret_cast<uword>(&stack_limit_); | 195 return reinterpret_cast<uword>(&stack_limit_); |
195 } | 196 } |
196 | 197 |
197 // The current stack limit. This may be overwritten with a special | 198 // The current stack limit. This may be overwritten with a special |
198 // value to trigger interrupts. | 199 // value to trigger interrupts. |
199 uword stack_limit() const { return stack_limit_; } | 200 uword stack_limit() const { return stack_limit_; } |
200 | 201 |
201 // The true stack limit for this isolate. | 202 // The true stack limit for this isolate. |
202 uword saved_stack_limit() const { return saved_stack_limit_; } | 203 uword saved_stack_limit() const { return saved_stack_limit_; } |
203 | 204 |
| 205 static uword GetSpecifiedStackSize(); |
| 206 |
| 207 static const intptr_t kStackSizeBuffer = (16 * KB); |
| 208 |
204 enum { | 209 enum { |
205 kApiInterrupt = 0x1, // An interrupt from Dart_InterruptIsolate. | 210 kApiInterrupt = 0x1, // An interrupt from Dart_InterruptIsolate. |
206 kMessageInterrupt = 0x2, // An interrupt to process an out of band message. | 211 kMessageInterrupt = 0x2, // An interrupt to process an out of band message. |
207 kStoreBufferInterrupt = 0x4, // An interrupt to process the store buffer. | 212 kStoreBufferInterrupt = 0x4, // An interrupt to process the store buffer. |
208 | 213 |
209 kInterruptsMask = | 214 kInterruptsMask = |
210 kApiInterrupt | | 215 kApiInterrupt | |
211 kMessageInterrupt | | 216 kMessageInterrupt | |
212 kStoreBufferInterrupt, | 217 kStoreBufferInterrupt, |
213 }; | 218 }; |
(...skipping 17 matching lines...) Expand all Loading... |
231 ASSERT(deopt_id_ != kNoDeoptId); | 236 ASSERT(deopt_id_ != kNoDeoptId); |
232 return deopt_id_++; | 237 return deopt_id_++; |
233 } | 238 } |
234 | 239 |
235 RawArray* ic_data_array() const { return ic_data_array_; } | 240 RawArray* ic_data_array() const { return ic_data_array_; } |
236 void set_ic_data_array(RawArray* value) { ic_data_array_ = value; } | 241 void set_ic_data_array(RawArray* value) { ic_data_array_ = value; } |
237 ICData* GetICDataForDeoptId(intptr_t deopt_id) const; | 242 ICData* GetICDataForDeoptId(intptr_t deopt_id) const; |
238 | 243 |
239 Debugger* debugger() const { return debugger_; } | 244 Debugger* debugger() const { return debugger_; } |
240 | 245 |
| 246 Simulator* simulator() const { return simulator_; } |
| 247 void set_simulator(Simulator* value) { simulator_ = value; } |
| 248 |
241 GcPrologueCallbacks& gc_prologue_callbacks() { | 249 GcPrologueCallbacks& gc_prologue_callbacks() { |
242 return gc_prologue_callbacks_; | 250 return gc_prologue_callbacks_; |
243 } | 251 } |
244 | 252 |
245 GcEpilogueCallbacks& gc_epilogue_callbacks() { | 253 GcEpilogueCallbacks& gc_epilogue_callbacks() { |
246 return gc_epilogue_callbacks_; | 254 return gc_epilogue_callbacks_; |
247 } | 255 } |
248 | 256 |
249 static void SetCreateCallback(Dart_IsolateCreateCallback cb) { | 257 static void SetCreateCallback(Dart_IsolateCreateCallback cb) { |
250 create_callback_ = cb; | 258 create_callback_ = cb; |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 deferred_mints_ = NULL; | 343 deferred_mints_ = NULL; |
336 return list; | 344 return list; |
337 } | 345 } |
338 | 346 |
339 private: | 347 private: |
340 Isolate(); | 348 Isolate(); |
341 | 349 |
342 void BuildName(const char* name_prefix); | 350 void BuildName(const char* name_prefix); |
343 void PrintInvokedFunctions(); | 351 void PrintInvokedFunctions(); |
344 | 352 |
345 static uword GetSpecifiedStackSize(); | |
346 | |
347 static const intptr_t kStackSizeBuffer = (16 * KB); | |
348 | |
349 static ThreadLocalKey isolate_key; | 353 static ThreadLocalKey isolate_key; |
350 StoreBufferBlock store_buffer_block_; | 354 StoreBufferBlock store_buffer_block_; |
351 StoreBuffer store_buffer_; | 355 StoreBuffer store_buffer_; |
352 ClassTable class_table_; | 356 ClassTable class_table_; |
353 MegamorphicCacheTable megamorphic_cache_table_; | 357 MegamorphicCacheTable megamorphic_cache_table_; |
354 Dart_MessageNotifyCallback message_notify_callback_; | 358 Dart_MessageNotifyCallback message_notify_callback_; |
355 char* name_; | 359 char* name_; |
356 int64_t start_time_; | 360 int64_t start_time_; |
357 Dart_Port main_port_; | 361 Dart_Port main_port_; |
358 Heap* heap_; | 362 Heap* heap_; |
359 ObjectStore* object_store_; | 363 ObjectStore* object_store_; |
360 RawContext* top_context_; | 364 RawContext* top_context_; |
361 uword top_exit_frame_info_; | 365 uword top_exit_frame_info_; |
362 void* init_callback_data_; | 366 void* init_callback_data_; |
363 Dart_LibraryTagHandler library_tag_handler_; | 367 Dart_LibraryTagHandler library_tag_handler_; |
364 ApiState* api_state_; | 368 ApiState* api_state_; |
365 StubCode* stub_code_; | 369 StubCode* stub_code_; |
366 Debugger* debugger_; | 370 Debugger* debugger_; |
| 371 Simulator* simulator_; |
367 LongJump* long_jump_base_; | 372 LongJump* long_jump_base_; |
368 TimerList timer_list_; | 373 TimerList timer_list_; |
369 intptr_t deopt_id_; | 374 intptr_t deopt_id_; |
370 RawArray* ic_data_array_; | 375 RawArray* ic_data_array_; |
371 Mutex* mutex_; // protects stack_limit_ and saved_stack_limit_. | 376 Mutex* mutex_; // protects stack_limit_ and saved_stack_limit_. |
372 uword stack_limit_; | 377 uword stack_limit_; |
373 uword saved_stack_limit_; | 378 uword saved_stack_limit_; |
374 MessageHandler* message_handler_; | 379 MessageHandler* message_handler_; |
375 uword spawn_data_; | 380 uword spawn_data_; |
376 GcPrologueCallbacks gc_prologue_callbacks_; | 381 GcPrologueCallbacks gc_prologue_callbacks_; |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 Isolate* new_isolate_; | 460 Isolate* new_isolate_; |
456 Isolate* saved_isolate_; | 461 Isolate* saved_isolate_; |
457 uword saved_stack_limit_; | 462 uword saved_stack_limit_; |
458 | 463 |
459 DISALLOW_COPY_AND_ASSIGN(SwitchIsolateScope); | 464 DISALLOW_COPY_AND_ASSIGN(SwitchIsolateScope); |
460 }; | 465 }; |
461 | 466 |
462 } // namespace dart | 467 } // namespace dart |
463 | 468 |
464 #endif // VM_ISOLATE_H_ | 469 #endif // VM_ISOLATE_H_ |
OLD | NEW |