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

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

Issue 1226403003: Support per-thread zones and stack resources. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Add thread_registry.h Created 5 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/base_isolate.h ('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/base_isolate.h" 10 #include "vm/base_isolate.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 class RawInt32x4; 71 class RawInt32x4;
72 class RawUserTag; 72 class RawUserTag;
73 class SampleBuffer; 73 class SampleBuffer;
74 class SendPort; 74 class SendPort;
75 class ServiceIdZone; 75 class ServiceIdZone;
76 class Simulator; 76 class Simulator;
77 class StackResource; 77 class StackResource;
78 class StackZone; 78 class StackZone;
79 class StoreBuffer; 79 class StoreBuffer;
80 class StubCode; 80 class StubCode;
81 class ThreadRegistry;
81 class TypeArguments; 82 class TypeArguments;
82 class TypeParameter; 83 class TypeParameter;
83 class UserTag; 84 class UserTag;
84 85
85 86
86 class IsolateVisitor { 87 class IsolateVisitor {
87 public: 88 public:
88 IsolateVisitor() {} 89 IsolateVisitor() {}
89 virtual ~IsolateVisitor() {} 90 virtual ~IsolateVisitor() {}
90 91
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 bool visit_prologue_weak_persistent_handles, 138 bool visit_prologue_weak_persistent_handles,
138 bool validate_frames); 139 bool validate_frames);
139 140
140 // Visits weak object pointers. 141 // Visits weak object pointers.
141 void VisitWeakPersistentHandles(HandleVisitor* visitor, 142 void VisitWeakPersistentHandles(HandleVisitor* visitor,
142 bool visit_prologue_weak_persistent_handles); 143 bool visit_prologue_weak_persistent_handles);
143 void VisitPrologueWeakPersistentHandles(HandleVisitor* visitor); 144 void VisitPrologueWeakPersistentHandles(HandleVisitor* visitor);
144 145
145 StoreBuffer* store_buffer() { return store_buffer_; } 146 StoreBuffer* store_buffer() { return store_buffer_; }
146 147
148 ThreadRegistry* thread_registry() { return thread_registry_; }
149
147 ClassTable* class_table() { return &class_table_; } 150 ClassTable* class_table() { return &class_table_; }
148 static intptr_t class_table_offset() { 151 static intptr_t class_table_offset() {
149 return OFFSET_OF(Isolate, class_table_); 152 return OFFSET_OF(Isolate, class_table_);
150 } 153 }
151 154
152 MegamorphicCacheTable* megamorphic_cache_table() { 155 MegamorphicCacheTable* megamorphic_cache_table() {
153 return &megamorphic_cache_table_; 156 return &megamorphic_cache_table_;
154 } 157 }
155 158
156 Dart_MessageNotifyCallback message_notify_callback() const { 159 Dart_MessageNotifyCallback message_notify_callback() const {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 Heap* heap() const { return heap_; } 204 Heap* heap() const { return heap_; }
202 void set_heap(Heap* value) { heap_ = value; } 205 void set_heap(Heap* value) { heap_ = value; }
203 static intptr_t heap_offset() { return OFFSET_OF(Isolate, heap_); } 206 static intptr_t heap_offset() { return OFFSET_OF(Isolate, heap_); }
204 207
205 ObjectStore* object_store() const { return object_store_; } 208 ObjectStore* object_store() const { return object_store_; }
206 void set_object_store(ObjectStore* value) { object_store_ = value; } 209 void set_object_store(ObjectStore* value) { object_store_ = value; }
207 static intptr_t object_store_offset() { 210 static intptr_t object_store_offset() {
208 return OFFSET_OF(Isolate, object_store_); 211 return OFFSET_OF(Isolate, object_store_);
209 } 212 }
210 213
211 uword top_exit_frame_info() const { return top_exit_frame_info_; } 214 // DEPRECATED: Use Thread's methods instead. During migration, these default
212 void set_top_exit_frame_info(uword value) { top_exit_frame_info_ = value; } 215 // to using the mutator thread (which must also be the current thread).
213 static intptr_t top_exit_frame_info_offset() { 216 StackResource* top_resource() const {
214 return OFFSET_OF(Isolate, top_exit_frame_info_); 217 ASSERT(Thread::Current() == mutator_thread_);
218 return mutator_thread_->top_resource();
219 }
220 void set_top_resource(StackResource* value) {
221 ASSERT(Thread::Current() == mutator_thread_);
222 mutator_thread_->set_top_resource(value);
223 }
224 uword top_exit_frame_info() const {
225 ASSERT(Thread::Current() == mutator_thread_);
226 return mutator_thread_->top_exit_frame_info();
227 }
228 void set_top_exit_frame_info(uword value) {
229 ASSERT(Thread::Current() == mutator_thread_);
230 mutator_thread_->set_top_exit_frame_info(value);
215 } 231 }
216 232
217 uword vm_tag() const { 233 uword vm_tag() const {
218 return vm_tag_; 234 return vm_tag_;
219 } 235 }
220 void set_vm_tag(uword tag) { 236 void set_vm_tag(uword tag) {
221 vm_tag_ = tag; 237 vm_tag_ = tag;
222 } 238 }
223 static intptr_t vm_tag_offset() { 239 static intptr_t vm_tag_offset() {
224 return OFFSET_OF(Isolate, vm_tag_); 240 return OFFSET_OF(Isolate, vm_tag_);
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE) 728 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE)
713 #undef REUSABLE_HANDLE 729 #undef REUSABLE_HANDLE
714 730
715 static void VisitIsolates(IsolateVisitor* visitor); 731 static void VisitIsolates(IsolateVisitor* visitor);
716 732
717 Counters* counters() { return &counters_; } 733 Counters* counters() { return &counters_; }
718 734
719 // Handle service messages until we are told to resume execution. 735 // Handle service messages until we are told to resume execution.
720 void PauseEventHandler(); 736 void PauseEventHandler();
721 737
738 // DEPRECATED: Use Thread's methods instead. During migration, these default
739 // to using the mutator thread (which must also be the current thread).
740 Zone* current_zone() const {
741 ASSERT(Thread::Current() == mutator_thread_);
742 return mutator_thread_->zone();
743 }
744 void set_current_zone(Zone* zone) {
745 ASSERT(Thread::Current() == mutator_thread_);
746 mutator_thread_->set_zone(zone);
747 }
748
722 private: 749 private:
723 explicit Isolate(const Dart_IsolateFlags& api_flags); 750 explicit Isolate(const Dart_IsolateFlags& api_flags);
724 751
725 void BuildName(const char* name_prefix); 752 void BuildName(const char* name_prefix);
726 void PrintInvokedFunctions(); 753 void PrintInvokedFunctions();
727 754
728 void ProfileIdle(); 755 void ProfileIdle();
729 756
730 // Visit all object pointers. Caller must ensure concurrent sweeper is not 757 // Visit all object pointers. Caller must ensure concurrent sweeper is not
731 // running, and the visitor must not allocate. 758 // running, and the visitor must not allocate.
732 void VisitObjectPointers(ObjectPointerVisitor* visitor, 759 void VisitObjectPointers(ObjectPointerVisitor* visitor,
733 bool visit_prologue_weak_persistent_handles, 760 bool visit_prologue_weak_persistent_handles,
734 bool validate_frames); 761 bool validate_frames);
735 762
736 void set_user_tag(uword tag) { 763 void set_user_tag(uword tag) {
737 user_tag_ = tag; 764 user_tag_ = tag;
738 } 765 }
739 766
740 void set_mutator_thread(Thread* thread) { 767 void set_mutator_thread(Thread* thread) {
741 mutator_thread_ = thread; 768 mutator_thread_ = thread;
742 } 769 }
743 770
744 template<class T> T* AllocateReusableHandle(); 771 template<class T> T* AllocateReusableHandle();
745 772
746 Thread* mutator_thread_;
747 uword vm_tag_; 773 uword vm_tag_;
748 StoreBuffer* store_buffer_; 774 StoreBuffer* store_buffer_;
775 ThreadRegistry* thread_registry_;
749 ClassTable class_table_; 776 ClassTable class_table_;
750 MegamorphicCacheTable megamorphic_cache_table_; 777 MegamorphicCacheTable megamorphic_cache_table_;
751 Dart_MessageNotifyCallback message_notify_callback_; 778 Dart_MessageNotifyCallback message_notify_callback_;
752 char* name_; 779 char* name_;
753 char* debugger_name_; 780 char* debugger_name_;
754 int64_t start_time_; 781 int64_t start_time_;
755 Dart_Port main_port_; 782 Dart_Port main_port_;
756 Dart_Port origin_id_; // Isolates created by spawnFunc have some origin id. 783 Dart_Port origin_id_; // Isolates created by spawnFunc have some origin id.
757 uint64_t pause_capability_; 784 uint64_t pause_capability_;
758 uint64_t terminate_capability_; 785 uint64_t terminate_capability_;
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 intptr_t serialized_args_len_; 1051 intptr_t serialized_args_len_;
1025 uint8_t* serialized_message_; 1052 uint8_t* serialized_message_;
1026 intptr_t serialized_message_len_; 1053 intptr_t serialized_message_len_;
1027 Isolate::Flags isolate_flags_; 1054 Isolate::Flags isolate_flags_;
1028 bool paused_; 1055 bool paused_;
1029 }; 1056 };
1030 1057
1031 } // namespace dart 1058 } // namespace dart
1032 1059
1033 #endif // VM_ISOLATE_H_ 1060 #endif // VM_ISOLATE_H_
OLDNEW
« no previous file with comments | « runtime/vm/base_isolate.h ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698