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

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

Issue 1541073002: Implement safepointing of threads (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: fix-typo Created 4 years, 10 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/intermediate_language_x64.cc ('k') | runtime/vm/isolate.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) 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 "vm/atomic.h" 10 #include "vm/atomic.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 class RawContext; 49 class RawContext;
50 class RawDouble; 50 class RawDouble;
51 class RawGrowableObjectArray; 51 class RawGrowableObjectArray;
52 class RawMint; 52 class RawMint;
53 class RawObject; 53 class RawObject;
54 class RawInteger; 54 class RawInteger;
55 class RawError; 55 class RawError;
56 class RawFloat32x4; 56 class RawFloat32x4;
57 class RawInt32x4; 57 class RawInt32x4;
58 class RawUserTag; 58 class RawUserTag;
59 class SafepointHandler;
59 class SampleBuffer; 60 class SampleBuffer;
60 class SendPort; 61 class SendPort;
61 class ServiceIdZone; 62 class ServiceIdZone;
62 class Simulator; 63 class Simulator;
63 class StackResource; 64 class StackResource;
64 class StackZone; 65 class StackZone;
65 class StoreBuffer; 66 class StoreBuffer;
66 class StubCode; 67 class StubCode;
67 class ThreadRegistry; 68 class ThreadRegistry;
68 class UserTag; 69 class UserTag;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 void RegisterClassAt(intptr_t index, const Class& cls); 120 void RegisterClassAt(intptr_t index, const Class& cls);
120 void ValidateClassTable(); 121 void ValidateClassTable();
121 122
122 // Visit all object pointers. 123 // Visit all object pointers.
123 void IterateObjectPointers(ObjectPointerVisitor* visitor, 124 void IterateObjectPointers(ObjectPointerVisitor* visitor,
124 bool validate_frames); 125 bool validate_frames);
125 126
126 // Visits weak object pointers. 127 // Visits weak object pointers.
127 void VisitWeakPersistentHandles(HandleVisitor* visitor); 128 void VisitWeakPersistentHandles(HandleVisitor* visitor);
128 129
130 // Prepares all threads in an isolate for Garbage Collection.
131 void PrepareForGC();
132
129 StoreBuffer* store_buffer() { return store_buffer_; } 133 StoreBuffer* store_buffer() { return store_buffer_; }
130 134
131 ThreadRegistry* thread_registry() { return thread_registry_; } 135 ThreadRegistry* thread_registry() const { return thread_registry_; }
136 SafepointHandler* safepoint_handler() const { return safepoint_handler_; }
132 137
133 ClassTable* class_table() { return &class_table_; } 138 ClassTable* class_table() { return &class_table_; }
134 static intptr_t class_table_offset() { 139 static intptr_t class_table_offset() {
135 return OFFSET_OF(Isolate, class_table_); 140 return OFFSET_OF(Isolate, class_table_);
136 } 141 }
137 142
138 static intptr_t ic_miss_code_offset() { 143 static intptr_t ic_miss_code_offset() {
139 return OFFSET_OF(Isolate, ic_miss_code_); 144 return OFFSET_OF(Isolate, ic_miss_code_);
140 } 145 }
141 146
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 RawGrowableObjectArray* pending_service_extension_calls() const { 685 RawGrowableObjectArray* pending_service_extension_calls() const {
681 return pending_service_extension_calls_; 686 return pending_service_extension_calls_;
682 } 687 }
683 void set_pending_service_extension_calls(const GrowableObjectArray& value); 688 void set_pending_service_extension_calls(const GrowableObjectArray& value);
684 RawGrowableObjectArray* registered_service_extension_handlers() const { 689 RawGrowableObjectArray* registered_service_extension_handlers() const {
685 return registered_service_extension_handlers_; 690 return registered_service_extension_handlers_;
686 } 691 }
687 void set_registered_service_extension_handlers( 692 void set_registered_service_extension_handlers(
688 const GrowableObjectArray& value); 693 const GrowableObjectArray& value);
689 694
690 void ClearMutatorThread() { 695 Monitor* threads_lock() const;
691 mutator_thread_ = NULL; 696 Thread* ScheduleThread(bool is_mutator, bool bypass_safepoint = false);
692 } 697 void UnscheduleThread(
693 void MakeCurrentThreadMutator(Thread* thread) { 698 Thread* thread, bool is_mutator, bool bypass_safepoint = false);
694 ASSERT(thread == Thread::Current());
695 DEBUG_ASSERT(IsIsolateOf(thread));
696 mutator_thread_ = thread;
697 }
698 #if defined(DEBUG)
699 bool IsIsolateOf(Thread* thread);
700 #endif // DEBUG
701 699
702 // DEPRECATED: Use Thread's methods instead. During migration, these default 700 // DEPRECATED: Use Thread's methods instead. During migration, these default
703 // to using the mutator thread (which must also be the current thread). 701 // to using the mutator thread (which must also be the current thread).
704 Zone* current_zone() const { 702 Zone* current_zone() const {
705 ASSERT(Thread::Current() == mutator_thread_); 703 ASSERT(Thread::Current() == mutator_thread_);
706 return mutator_thread_->zone(); 704 return mutator_thread_->zone();
707 } 705 }
708 706
709 // Accessed from generated code: 707 // Accessed from generated code:
710 // TODO(asiva): Need to consider moving the stack_limit_ from isolate to 708 // TODO(asiva): Need to consider moving the stack_limit_ from isolate to
711 // being thread specific. 709 // being thread specific.
712 uword stack_limit_; 710 uword stack_limit_;
713 StoreBuffer* store_buffer_; 711 StoreBuffer* store_buffer_;
714 Heap* heap_; 712 Heap* heap_;
715 uword user_tag_; 713 uword user_tag_;
716 RawUserTag* current_tag_; 714 RawUserTag* current_tag_;
717 RawUserTag* default_tag_; 715 RawUserTag* default_tag_;
718 RawCode* ic_miss_code_; 716 RawCode* ic_miss_code_;
719 ClassTable class_table_; 717 ClassTable class_table_;
720 bool single_step_; 718 bool single_step_;
721 bool skip_step_; // skip the next single step. 719 bool skip_step_; // skip the next single step.
722 720
723 ThreadRegistry* thread_registry_; 721 ThreadRegistry* thread_registry_;
722 SafepointHandler* safepoint_handler_;
724 Dart_MessageNotifyCallback message_notify_callback_; 723 Dart_MessageNotifyCallback message_notify_callback_;
725 char* name_; 724 char* name_;
726 char* debugger_name_; 725 char* debugger_name_;
727 int64_t start_time_; 726 int64_t start_time_;
728 Dart_Port main_port_; 727 Dart_Port main_port_;
729 Dart_Port origin_id_; // Isolates created by spawnFunc have some origin id. 728 Dart_Port origin_id_; // Isolates created by spawnFunc have some origin id.
730 uint64_t pause_capability_; 729 uint64_t pause_capability_;
731 uint64_t terminate_capability_; 730 uint64_t terminate_capability_;
732 bool errors_fatal_; 731 bool errors_fatal_;
733 ObjectStore* object_store_; 732 ObjectStore* object_store_;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 static Monitor* isolates_list_monitor_; 852 static Monitor* isolates_list_monitor_;
854 static Isolate* isolates_list_head_; 853 static Isolate* isolates_list_head_;
855 static bool creation_enabled_; 854 static bool creation_enabled_;
856 855
857 #define REUSABLE_FRIEND_DECLARATION(name) \ 856 #define REUSABLE_FRIEND_DECLARATION(name) \
858 friend class Reusable##name##HandleScope; 857 friend class Reusable##name##HandleScope;
859 REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION) 858 REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION)
860 #undef REUSABLE_FRIEND_DECLARATION 859 #undef REUSABLE_FRIEND_DECLARATION
861 860
862 friend class GCMarker; // VisitObjectPointers 861 friend class GCMarker; // VisitObjectPointers
862 friend class SafepointHandler;
863 friend class Scavenger; // VisitObjectPointers 863 friend class Scavenger; // VisitObjectPointers
864 friend class ServiceIsolate; 864 friend class ServiceIsolate;
865 friend class Thread; 865 friend class Thread;
866 friend class Timeline; 866 friend class Timeline;
867 867
868 DISALLOW_COPY_AND_ASSIGN(Isolate); 868 DISALLOW_COPY_AND_ASSIGN(Isolate);
869 }; 869 };
870 870
871 871
872 // When we need to execute code in an isolate, we use the 872 // When we need to execute code in an isolate, we use the
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 intptr_t* spawn_count_; 991 intptr_t* spawn_count_;
992 992
993 Isolate::Flags isolate_flags_; 993 Isolate::Flags isolate_flags_;
994 bool paused_; 994 bool paused_;
995 bool errors_are_fatal_; 995 bool errors_are_fatal_;
996 }; 996 };
997 997
998 } // namespace dart 998 } // namespace dart
999 999
1000 #endif // VM_ISOLATE_H_ 1000 #endif // VM_ISOLATE_H_
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_x64.cc ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698