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

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

Issue 1814243002: Add Thread TaskKind (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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/isolate_test.cc ('k') | runtime/vm/thread.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) 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 "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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 CACHED_VM_OBJECTS_LIST(V) \ 111 CACHED_VM_OBJECTS_LIST(V) \
112 CACHED_ADDRESSES_LIST(V) \ 112 CACHED_ADDRESSES_LIST(V) \
113 113
114 // A VM thread; may be executing Dart code or performing helper tasks like 114 // A VM thread; may be executing Dart code or performing helper tasks like
115 // garbage collection or compilation. The Thread structure associated with 115 // garbage collection or compilation. The Thread structure associated with
116 // a thread is allocated by EnsureInit before entering an isolate, and destroyed 116 // a thread is allocated by EnsureInit before entering an isolate, and destroyed
117 // automatically when the underlying OS thread exits. NOTE: On Windows, CleanUp 117 // automatically when the underlying OS thread exits. NOTE: On Windows, CleanUp
118 // must currently be called manually (issue 23474). 118 // must currently be called manually (issue 23474).
119 class Thread : public BaseThread { 119 class Thread : public BaseThread {
120 public: 120 public:
121 // The kind of task this thread is performing. Sampled by the profiler.
122 enum TaskKind {
123 kUnknownTask = 0x0,
124 kMutatorTask = 0x1,
125 kCompilerTask = 0x2,
126 kSweeperTask = 0x4,
127 kMarkerTask = 0x8,
128 };
121 ~Thread(); 129 ~Thread();
122 130
123 // The currently executing thread, or NULL if not yet initialized. 131 // The currently executing thread, or NULL if not yet initialized.
124 static Thread* Current() { 132 static Thread* Current() {
125 BaseThread* thread = OSThread::GetCurrentTLS(); 133 BaseThread* thread = OSThread::GetCurrentTLS();
126 if (thread == NULL || thread->is_os_thread()) { 134 if (thread == NULL || thread->is_os_thread()) {
127 return NULL; 135 return NULL;
128 } 136 }
129 return reinterpret_cast<Thread*>(thread); 137 return reinterpret_cast<Thread*>(thread);
130 } 138 }
131 139
132 // Makes the current thread enter 'isolate'. 140 // Makes the current thread enter 'isolate'.
133 static bool EnterIsolate(Isolate* isolate); 141 static bool EnterIsolate(Isolate* isolate);
134 // Makes the current thread exit its isolate. 142 // Makes the current thread exit its isolate.
135 static void ExitIsolate(); 143 static void ExitIsolate();
136 144
137 // A VM thread other than the main mutator thread can enter an isolate as a 145 // A VM thread other than the main mutator thread can enter an isolate as a
138 // "helper" to gain limited concurrent access to the isolate. One example is 146 // "helper" to gain limited concurrent access to the isolate. One example is
139 // SweeperTask (which uses the class table, which is copy-on-write). 147 // SweeperTask (which uses the class table, which is copy-on-write).
140 // TODO(koda): Properly synchronize heap access to expand allowed operations. 148 // TODO(koda): Properly synchronize heap access to expand allowed operations.
141 static bool EnterIsolateAsHelper(Isolate* isolate, 149 static bool EnterIsolateAsHelper(Isolate* isolate,
150 TaskKind kind,
142 bool bypass_safepoint = false); 151 bool bypass_safepoint = false);
143 static void ExitIsolateAsHelper(bool bypass_safepoint = false); 152 static void ExitIsolateAsHelper(bool bypass_safepoint = false);
144 153
145 // Empties the store buffer block into the isolate. 154 // Empties the store buffer block into the isolate.
146 void PrepareForGC(); 155 void PrepareForGC();
147 156
148 void SetStackLimit(uword value); 157 void SetStackLimit(uword value);
149 void SetStackLimitFromStackBase(uword stack_base); 158 void SetStackLimitFromStackBase(uword stack_base);
150 void ClearStackLimit(); 159 void ClearStackLimit();
151 160
(...skipping 22 matching lines...) Expand all
174 return reinterpret_cast<uword>(&stack_overflow_flags_); 183 return reinterpret_cast<uword>(&stack_overflow_flags_);
175 } 184 }
176 static intptr_t stack_overflow_flags_offset() { 185 static intptr_t stack_overflow_flags_offset() {
177 return OFFSET_OF(Thread, stack_overflow_flags_); 186 return OFFSET_OF(Thread, stack_overflow_flags_);
178 } 187 }
179 188
180 int32_t IncrementAndGetStackOverflowCount() { 189 int32_t IncrementAndGetStackOverflowCount() {
181 return ++stack_overflow_count_; 190 return ++stack_overflow_count_;
182 } 191 }
183 192
193 TaskKind task_kind() const {
194 return task_kind_;
195 }
196
184 // Retrieves and clears the stack overflow flags. These are set by 197 // Retrieves and clears the stack overflow flags. These are set by
185 // the generated code before the slow path runtime routine for a 198 // the generated code before the slow path runtime routine for a
186 // stack overflow is called. 199 // stack overflow is called.
187 uword GetAndClearStackOverflowFlags(); 200 uword GetAndClearStackOverflowFlags();
188 201
189 // Interrupt bits. 202 // Interrupt bits.
190 enum { 203 enum {
191 kVMInterrupt = 0x1, // Internal VM checks: safepoints, store buffers, etc. 204 kVMInterrupt = 0x1, // Internal VM checks: safepoints, store buffers, etc.
192 kMessageInterrupt = 0x2, // An interrupt to process an out of band message. 205 kMessageInterrupt = 0x2, // An interrupt to process an out of band message.
193 206
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 template<class T> T* AllocateReusableHandle(); 601 template<class T> T* AllocateReusableHandle();
589 602
590 // Accessed from generated code: 603 // Accessed from generated code:
591 uword stack_limit_; 604 uword stack_limit_;
592 uword stack_overflow_flags_; 605 uword stack_overflow_flags_;
593 Isolate* isolate_; 606 Isolate* isolate_;
594 Heap* heap_; 607 Heap* heap_;
595 uword top_exit_frame_info_; 608 uword top_exit_frame_info_;
596 StoreBufferBlock* store_buffer_block_; 609 StoreBufferBlock* store_buffer_block_;
597 uword vm_tag_; 610 uword vm_tag_;
611 TaskKind task_kind_;
598 // State that is cached in the TLS for fast access in generated code. 612 // State that is cached in the TLS for fast access in generated code.
599 #define DECLARE_MEMBERS(type_name, member_name, expr, default_init_value) \ 613 #define DECLARE_MEMBERS(type_name, member_name, expr, default_init_value) \
600 type_name member_name; 614 type_name member_name;
601 CACHED_CONSTANTS_LIST(DECLARE_MEMBERS) 615 CACHED_CONSTANTS_LIST(DECLARE_MEMBERS)
602 #undef DECLARE_MEMBERS 616 #undef DECLARE_MEMBERS
603 617
604 #define DECLARE_MEMBERS(name) \ 618 #define DECLARE_MEMBERS(name) \
605 uword name##_entry_point_; 619 uword name##_entry_point_;
606 RUNTIME_ENTRY_LIST(DECLARE_MEMBERS) 620 RUNTIME_ENTRY_LIST(DECLARE_MEMBERS)
607 #undef DECLARE_MEMBERS 621 #undef DECLARE_MEMBERS
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 // Disable thread interrupts. 727 // Disable thread interrupts.
714 class DisableThreadInterruptsScope : public StackResource { 728 class DisableThreadInterruptsScope : public StackResource {
715 public: 729 public:
716 explicit DisableThreadInterruptsScope(Thread* thread); 730 explicit DisableThreadInterruptsScope(Thread* thread);
717 ~DisableThreadInterruptsScope(); 731 ~DisableThreadInterruptsScope();
718 }; 732 };
719 733
720 } // namespace dart 734 } // namespace dart
721 735
722 #endif // VM_THREAD_H_ 736 #endif // VM_THREAD_H_
OLDNEW
« no previous file with comments | « runtime/vm/isolate_test.cc ('k') | runtime/vm/thread.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698