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

Unified Diff: runtime/vm/thread.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/stub_code_x64.cc ('k') | runtime/vm/thread.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/thread.h
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 261860a9e8eff21134afccd314b5a13a7c19d5e7..00cea34611a3086733710dd741991a11575235a9 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -5,7 +5,6 @@
#ifndef VM_THREAD_H_
#define VM_THREAD_H_
-#include "vm/base_isolate.h"
#include "vm/globals.h"
#include "vm/os_thread.h"
#include "vm/store_buffer.h"
@@ -14,10 +13,11 @@ namespace dart {
class CHA;
class Isolate;
+class Object;
class RawBool;
class RawObject;
-class Object;
-
+class StackResource;
+class Zone;
// List of VM-global objects/addresses cached in each Thread object.
#define CACHED_VM_OBJECTS_LIST(V) \
@@ -76,9 +76,7 @@ class Thread {
static void InitOnceAfterObjectAndStubCode();
// The topmost zone used for allocation in this thread.
- Zone* zone() {
- return reinterpret_cast<BaseIsolate*>(isolate())->current_zone();
- }
+ Zone* zone() const { return state_.zone; }
// The isolate that this thread is operating on, or NULL if none.
Isolate* isolate() const { return isolate_; }
@@ -103,6 +101,27 @@ class Thread {
return OFFSET_OF(Thread, store_buffer_block_);
}
+ uword top_exit_frame_info() const { return state_.top_exit_frame_info; }
+ static intptr_t top_exit_frame_info_offset() {
+ return OFFSET_OF(Thread, state_) + OFFSET_OF(State, top_exit_frame_info);
+ }
+
+ StackResource* top_resource() const { return state_.top_resource; }
+ void set_top_resource(StackResource* value) {
+ state_.top_resource = value;
+ }
+ static intptr_t top_resource_offset() {
+ return OFFSET_OF(Thread, state_) + OFFSET_OF(State, top_resource);
+ }
+
+ // Collection of isolate-specific state of a thread that is saved/restored
+ // on isolate exit/re-entry.
+ struct State {
+ Zone* zone;
+ uword top_exit_frame_info;
+ StackResource* top_resource;
+ };
+
#define DEFINE_OFFSET_METHOD(type_name, member_name, expr, default_init_value) \
static intptr_t member_name##offset() { \
return OFFSET_OF(Thread, member_name); \
@@ -117,6 +136,7 @@ CACHED_CONSTANTS_LIST(DEFINE_OFFSET_METHOD)
static ThreadLocalKey thread_key_;
Isolate* isolate_;
+ State state_;
StoreBufferBlock* store_buffer_block_;
#define DECLARE_MEMBERS(type_name, member_name, expr, default_init_value) \
type_name member_name;
@@ -127,8 +147,25 @@ CACHED_CONSTANTS_LIST(DECLARE_MEMBERS)
void InitVMConstants();
+ void ClearState() {
+ memset(&state_, 0, sizeof(state_));
+ }
+
+ void set_zone(Zone* zone) {
+ state_.zone = zone;
+ }
+
+ void set_top_exit_frame_info(uword top_exit_frame_info) {
+ state_.top_exit_frame_info = top_exit_frame_info;
+ }
+
static void SetCurrent(Thread* current);
+ void Schedule(Isolate* isolate);
+ void Unschedule();
+
+ friend class Isolate;
+ friend class StackZone;
DISALLOW_COPY_AND_ASSIGN(Thread);
};
« no previous file with comments | « runtime/vm/stub_code_x64.cc ('k') | runtime/vm/thread.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698