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

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

Issue 1439483003: - Add an OSThread structure which is the generic TLS structure for all C++ (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: code-review Created 5 years, 1 month 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/debugger_api_impl_test.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 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 uword stack_limit_address() const { 247 uword stack_limit_address() const {
248 return reinterpret_cast<uword>(&stack_limit_); 248 return reinterpret_cast<uword>(&stack_limit_);
249 } 249 }
250 static intptr_t stack_limit_offset() { 250 static intptr_t stack_limit_offset() {
251 return OFFSET_OF(Isolate, stack_limit_); 251 return OFFSET_OF(Isolate, stack_limit_);
252 } 252 }
253 253
254 // The true stack limit for this isolate. 254 // The true stack limit for this isolate.
255 uword saved_stack_limit() const { return saved_stack_limit_; } 255 uword saved_stack_limit() const { return saved_stack_limit_; }
256 256
257 uword stack_base() const { return stack_base_; }
258
259 // Stack overflow flags 257 // Stack overflow flags
260 enum { 258 enum {
261 kOsrRequest = 0x1, // Current stack overflow caused by OSR request. 259 kOsrRequest = 0x1, // Current stack overflow caused by OSR request.
262 }; 260 };
263 261
264 uword stack_overflow_flags_address() const { 262 uword stack_overflow_flags_address() const {
265 return reinterpret_cast<uword>(&stack_overflow_flags_); 263 return reinterpret_cast<uword>(&stack_overflow_flags_);
266 } 264 }
267 265
268 int32_t IncrementAndGetStackOverflowCount() { 266 int32_t IncrementAndGetStackOverflowCount() {
269 return ++stack_overflow_count_; 267 return ++stack_overflow_count_;
270 } 268 }
271 269
272 // Retrieves and clears the stack overflow flags. These are set by 270 // Retrieves and clears the stack overflow flags. These are set by
273 // the generated code before the slow path runtime routine for a 271 // the generated code before the slow path runtime routine for a
274 // stack overflow is called. 272 // stack overflow is called.
275 uword GetAndClearStackOverflowFlags(); 273 uword GetAndClearStackOverflowFlags();
276 274
277 // Retrieve the stack address bounds for profiler.
278 bool GetProfilerStackBounds(uword* lower, uword* upper) const;
279
280 static uword GetSpecifiedStackSize();
281
282 static const intptr_t kStackSizeBuffer = (4 * KB * kWordSize);
283
284 // Interrupt bits. 275 // Interrupt bits.
285 enum { 276 enum {
286 kVMInterrupt = 0x1, // Internal VM checks: safepoints, store buffers, etc. 277 kVMInterrupt = 0x1, // Internal VM checks: safepoints, store buffers, etc.
287 kMessageInterrupt = 0x2, // An interrupt to process an out of band message. 278 kMessageInterrupt = 0x2, // An interrupt to process an out of band message.
288 279
289 kInterruptsMask = (kVMInterrupt | kMessageInterrupt), 280 kInterruptsMask = (kVMInterrupt | kMessageInterrupt),
290 }; 281 };
291 282
292 void ScheduleInterrupts(uword interrupt_bits); 283 void ScheduleInterrupts(uword interrupt_bits);
293 RawError* HandleInterrupts(); 284 RawError* HandleInterrupts();
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 #endif // DEBUG 720 #endif // DEBUG
730 721
731 // DEPRECATED: Use Thread's methods instead. During migration, these default 722 // DEPRECATED: Use Thread's methods instead. During migration, these default
732 // to using the mutator thread (which must also be the current thread). 723 // to using the mutator thread (which must also be the current thread).
733 Zone* current_zone() const { 724 Zone* current_zone() const {
734 ASSERT(Thread::Current() == mutator_thread_); 725 ASSERT(Thread::Current() == mutator_thread_);
735 return mutator_thread_->zone(); 726 return mutator_thread_->zone();
736 } 727 }
737 728
738 // Accessed from generated code: 729 // Accessed from generated code:
730 // TODO(asiva): Need to consider moving the stack_limit_ from isolate to
731 // being thread specific.
739 uword stack_limit_; 732 uword stack_limit_;
740 StoreBuffer* store_buffer_; 733 StoreBuffer* store_buffer_;
741 Heap* heap_; 734 Heap* heap_;
742 uword user_tag_; 735 uword user_tag_;
743 RawUserTag* current_tag_; 736 RawUserTag* current_tag_;
744 RawUserTag* default_tag_; 737 RawUserTag* default_tag_;
745 RawCode* ic_miss_code_; 738 RawCode* ic_miss_code_;
746 ClassTable class_table_; 739 ClassTable class_table_;
747 bool single_step_; 740 bool single_step_;
748 741
(...skipping 15 matching lines...) Expand all
764 ApiState* api_state_; 757 ApiState* api_state_;
765 Debugger* debugger_; 758 Debugger* debugger_;
766 bool resume_request_; 759 bool resume_request_;
767 int64_t last_resume_timestamp_; 760 int64_t last_resume_timestamp_;
768 bool has_compiled_code_; // Can check that no compilation occured. 761 bool has_compiled_code_; // Can check that no compilation occured.
769 Flags flags_; 762 Flags flags_;
770 Random random_; 763 Random random_;
771 Simulator* simulator_; 764 Simulator* simulator_;
772 Mutex* mutex_; // protects stack_limit_, saved_stack_limit_, compiler stats. 765 Mutex* mutex_; // protects stack_limit_, saved_stack_limit_, compiler stats.
773 uword saved_stack_limit_; 766 uword saved_stack_limit_;
774 uword stack_base_;
775 uword stack_overflow_flags_; 767 uword stack_overflow_flags_;
776 int32_t stack_overflow_count_; 768 int32_t stack_overflow_count_;
777 MessageHandler* message_handler_; 769 MessageHandler* message_handler_;
778 IsolateSpawnState* spawn_state_; 770 IsolateSpawnState* spawn_state_;
779 bool is_runnable_; 771 bool is_runnable_;
780 Dart_GcPrologueCallback gc_prologue_callback_; 772 Dart_GcPrologueCallback gc_prologue_callback_;
781 Dart_GcEpilogueCallback gc_epilogue_callback_; 773 Dart_GcEpilogueCallback gc_epilogue_callback_;
782 intptr_t defer_finalization_count_; 774 intptr_t defer_finalization_count_;
783 DeoptContext* deopt_context_; 775 DeoptContext* deopt_context_;
784 776
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 : new_isolate_(new_isolate), saved_isolate_(Isolate::Current()) { 893 : new_isolate_(new_isolate), saved_isolate_(Isolate::Current()) {
902 // TODO(koda): Audit users; passing NULL goes against naming of this class. 894 // TODO(koda): Audit users; passing NULL goes against naming of this class.
903 if (new_isolate_ == NULL) { 895 if (new_isolate_ == NULL) {
904 ASSERT(Isolate::Current() == NULL); 896 ASSERT(Isolate::Current() == NULL);
905 // Do nothing. 897 // Do nothing.
906 return; 898 return;
907 } 899 }
908 if (saved_isolate_ != new_isolate_) { 900 if (saved_isolate_ != new_isolate_) {
909 ASSERT(Isolate::Current() == NULL); 901 ASSERT(Isolate::Current() == NULL);
910 // Ensure this is not a nested 'isolate enter' with prior state. 902 // Ensure this is not a nested 'isolate enter' with prior state.
911 ASSERT(new_isolate_->stack_base() == 0); 903 ASSERT(new_isolate_->saved_stack_limit() == 0);
912 Thread::EnterIsolate(new_isolate_); 904 Thread::EnterIsolate(new_isolate_);
913 } 905 }
914 } 906 }
915 907
916 ~StartIsolateScope() { 908 ~StartIsolateScope() {
917 if (new_isolate_ == NULL) { 909 if (new_isolate_ == NULL) {
918 ASSERT(Isolate::Current() == NULL); 910 ASSERT(Isolate::Current() == NULL);
919 // Do nothing. 911 // Do nothing.
920 return; 912 return;
921 } 913 }
922 if (saved_isolate_ != new_isolate_) { 914 if (saved_isolate_ != new_isolate_) {
923 ASSERT(saved_isolate_ == NULL); 915 ASSERT(saved_isolate_ == NULL);
924 // ASSERT that we have bottomed out of all Dart invocations. 916 // ASSERT that we have bottomed out of all Dart invocations.
925 ASSERT(new_isolate_->stack_base() == 0); 917 ASSERT(new_isolate_->saved_stack_limit() == 0);
926 Thread::ExitIsolate(); 918 Thread::ExitIsolate();
927 } 919 }
928 } 920 }
929 921
930 private: 922 private:
931 Isolate* new_isolate_; 923 Isolate* new_isolate_;
932 Isolate* saved_isolate_; 924 Isolate* saved_isolate_;
933 925
934 DISALLOW_COPY_AND_ASSIGN(StartIsolateScope); 926 DISALLOW_COPY_AND_ASSIGN(StartIsolateScope);
935 }; 927 };
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 uint8_t* serialized_message_; 985 uint8_t* serialized_message_;
994 intptr_t serialized_message_len_; 986 intptr_t serialized_message_len_;
995 Isolate::Flags isolate_flags_; 987 Isolate::Flags isolate_flags_;
996 bool paused_; 988 bool paused_;
997 bool errors_are_fatal_; 989 bool errors_are_fatal_;
998 }; 990 };
999 991
1000 } // namespace dart 992 } // namespace dart
1001 993
1002 #endif // VM_ISOLATE_H_ 994 #endif // VM_ISOLATE_H_
OLDNEW
« no previous file with comments | « runtime/vm/debugger_api_impl_test.cc ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698