OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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_THREAD_H_ | 5 #ifndef VM_THREAD_H_ |
6 #define VM_THREAD_H_ | 6 #define VM_THREAD_H_ |
7 | 7 |
8 #include "vm/globals.h" | 8 #include "vm/globals.h" |
9 #include "vm/handles.h" | 9 #include "vm/handles.h" |
10 #include "vm/os_thread.h" | 10 #include "vm/os_thread.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 class Instance; | 28 class Instance; |
29 class Isolate; | 29 class Isolate; |
30 class Library; | 30 class Library; |
31 class Log; | 31 class Log; |
32 class LongJumpScope; | 32 class LongJumpScope; |
33 class Object; | 33 class Object; |
34 class PcDescriptors; | 34 class PcDescriptors; |
35 class RawBool; | 35 class RawBool; |
36 class RawObject; | 36 class RawObject; |
37 class RawCode; | 37 class RawCode; |
| 38 class RawGrowableObjectArray; |
38 class RawString; | 39 class RawString; |
39 class RuntimeEntry; | 40 class RuntimeEntry; |
40 class StackResource; | 41 class StackResource; |
41 class String; | 42 class String; |
42 class TimelineEventBlock; | 43 class TimelineEventBlock; |
43 class TypeArguments; | 44 class TypeArguments; |
44 class TypeParameter; | 45 class TypeParameter; |
45 class Zone; | 46 class Zone; |
46 | 47 |
47 #define REUSABLE_HANDLE_LIST(V) \ | 48 #define REUSABLE_HANDLE_LIST(V) \ |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 | 398 |
398 void ClearReusableHandles(); | 399 void ClearReusableHandles(); |
399 | 400 |
400 #define REUSABLE_HANDLE(object) \ | 401 #define REUSABLE_HANDLE(object) \ |
401 object& object##Handle() const { \ | 402 object& object##Handle() const { \ |
402 return *object##_handle_; \ | 403 return *object##_handle_; \ |
403 } | 404 } |
404 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE) | 405 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE) |
405 #undef REUSABLE_HANDLE | 406 #undef REUSABLE_HANDLE |
406 | 407 |
| 408 RawGrowableObjectArray* pending_functions(); |
| 409 |
407 void VisitObjectPointers(ObjectPointerVisitor* visitor); | 410 void VisitObjectPointers(ObjectPointerVisitor* visitor); |
408 | 411 |
409 private: | 412 private: |
410 template<class T> T* AllocateReusableHandle(); | 413 template<class T> T* AllocateReusableHandle(); |
411 | 414 |
412 static ThreadLocalKey thread_key_; | 415 static ThreadLocalKey thread_key_; |
413 | 416 |
414 const ThreadId id_; | 417 const ThreadId id_; |
415 ThreadInterruptCallback thread_interrupt_callback_; | 418 ThreadInterruptCallback thread_interrupt_callback_; |
416 void* thread_interrupt_data_; | 419 void* thread_interrupt_data_; |
417 Isolate* isolate_; | 420 Isolate* isolate_; |
418 Heap* heap_; | 421 Heap* heap_; |
419 State state_; | 422 State state_; |
420 Mutex timeline_block_lock_; | 423 Mutex timeline_block_lock_; |
421 TimelineEventBlock* timeline_block_; | 424 TimelineEventBlock* timeline_block_; |
422 StoreBufferBlock* store_buffer_block_; | 425 StoreBufferBlock* store_buffer_block_; |
423 class Log* log_; | 426 class Log* log_; |
424 intptr_t deopt_id_; // Compilation specific counter. | |
425 uword vm_tag_; | |
426 #define DECLARE_MEMBERS(type_name, member_name, expr, default_init_value) \ | 427 #define DECLARE_MEMBERS(type_name, member_name, expr, default_init_value) \ |
427 type_name member_name; | 428 type_name member_name; |
428 CACHED_CONSTANTS_LIST(DECLARE_MEMBERS) | 429 CACHED_CONSTANTS_LIST(DECLARE_MEMBERS) |
429 #undef DECLARE_MEMBERS | 430 #undef DECLARE_MEMBERS |
430 | 431 |
431 #define DECLARE_MEMBERS(name) \ | 432 #define DECLARE_MEMBERS(name) \ |
432 uword name##_entry_point_; | 433 uword name##_entry_point_; |
433 RUNTIME_ENTRY_LIST(DECLARE_MEMBERS) | 434 RUNTIME_ENTRY_LIST(DECLARE_MEMBERS) |
434 #undef DECLARE_MEMBERS | 435 #undef DECLARE_MEMBERS |
435 | 436 |
(...skipping 10 matching lines...) Expand all Loading... |
446 | 447 |
447 #if defined(DEBUG) | 448 #if defined(DEBUG) |
448 #define REUSABLE_HANDLE_SCOPE_VARIABLE(object) \ | 449 #define REUSABLE_HANDLE_SCOPE_VARIABLE(object) \ |
449 bool reusable_##object##_handle_scope_active_; | 450 bool reusable_##object##_handle_scope_active_; |
450 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_VARIABLE); | 451 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_VARIABLE); |
451 #undef REUSABLE_HANDLE_SCOPE_VARIABLE | 452 #undef REUSABLE_HANDLE_SCOPE_VARIABLE |
452 #endif // defined(DEBUG) | 453 #endif // defined(DEBUG) |
453 | 454 |
454 VMHandles reusable_handles_; | 455 VMHandles reusable_handles_; |
455 | 456 |
| 457 // Compiler state: |
456 CHA* cha_; | 458 CHA* cha_; |
| 459 intptr_t deopt_id_; // Compilation specific counter. |
| 460 uword vm_tag_; |
| 461 RawGrowableObjectArray* pending_functions_; |
| 462 |
457 int32_t no_callback_scope_depth_; | 463 int32_t no_callback_scope_depth_; |
458 | 464 |
459 // All |Thread|s are registered in the thread list. | 465 // All |Thread|s are registered in the thread list. |
460 Thread* thread_list_next_; | 466 Thread* thread_list_next_; |
461 | 467 |
462 static Thread* thread_list_head_; | 468 static Thread* thread_list_head_; |
463 static Mutex* thread_list_lock_; | 469 static Mutex* thread_list_lock_; |
464 | 470 |
465 static void AddThreadToList(Thread* thread); | 471 static void AddThreadToList(Thread* thread); |
466 static void RemoveThreadFromList(Thread* thread); | 472 static void RemoveThreadFromList(Thread* thread); |
467 | 473 |
468 explicit Thread(bool init_vm_constants = true); | 474 explicit Thread(bool init_vm_constants = true); |
469 | 475 |
470 void InitVMConstants(); | 476 void InitVMConstants(); |
471 | 477 |
472 void ClearState() { | 478 void ClearState(); |
473 memset(&state_, 0, sizeof(state_)); | |
474 } | |
475 | 479 |
476 void StoreBufferRelease( | 480 void StoreBufferRelease( |
477 StoreBuffer::ThresholdPolicy policy = StoreBuffer::kCheckThreshold); | 481 StoreBuffer::ThresholdPolicy policy = StoreBuffer::kCheckThreshold); |
478 void StoreBufferAcquire(); | 482 void StoreBufferAcquire(); |
479 | 483 |
480 void set_zone(Zone* zone) { | 484 void set_zone(Zone* zone) { |
481 state_.zone = zone; | 485 state_.zone = zone; |
482 } | 486 } |
483 | 487 |
484 void set_top_exit_frame_info(uword top_exit_frame_info) { | 488 void set_top_exit_frame_info(uword top_exit_frame_info) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 }; | 528 }; |
525 | 529 |
526 #if defined(TARGET_OS_WINDOWS) | 530 #if defined(TARGET_OS_WINDOWS) |
527 // Clears the state of the current thread and frees the allocation. | 531 // Clears the state of the current thread and frees the allocation. |
528 void WindowsThreadCleanUp(); | 532 void WindowsThreadCleanUp(); |
529 #endif | 533 #endif |
530 | 534 |
531 } // namespace dart | 535 } // namespace dart |
532 | 536 |
533 #endif // VM_THREAD_H_ | 537 #endif // VM_THREAD_H_ |
OLD | NEW |