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

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

Issue 1315893004: Load runtime entries from the Thread instead of the ObjectPool. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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
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 #include "vm/thread.h" 5 #include "vm/thread.h"
6 6
7 #include "vm/growable_array.h" 7 #include "vm/growable_array.h"
8 #include "vm/isolate.h" 8 #include "vm/isolate.h"
9 #include "vm/lockers.h" 9 #include "vm/lockers.h"
10 #include "vm/object.h" 10 #include "vm/object.h"
11 #include "vm/os_thread.h" 11 #include "vm/os_thread.h"
12 #include "vm/profiler.h" 12 #include "vm/profiler.h"
13 #include "vm/runtime_entry.h"
13 #include "vm/stub_code.h" 14 #include "vm/stub_code.h"
14 #include "vm/thread_interrupter.h" 15 #include "vm/thread_interrupter.h"
15 #include "vm/thread_registry.h" 16 #include "vm/thread_registry.h"
16 17
17 namespace dart { 18 namespace dart {
18 19
19 // The single thread local key which stores all the thread local data 20 // The single thread local key which stores all the thread local data
20 // for a thread. 21 // for a thread.
21 ThreadLocalKey Thread::thread_key_ = OSThread::kUnsetThreadLocalKey; 22 ThreadLocalKey Thread::thread_key_ = OSThread::kUnsetThreadLocalKey;
22 23
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 102
102 103
103 Thread::Thread(bool init_vm_constants) 104 Thread::Thread(bool init_vm_constants)
104 : id_(OSThread::GetCurrentThreadId()), 105 : id_(OSThread::GetCurrentThreadId()),
105 thread_interrupt_callback_(NULL), 106 thread_interrupt_callback_(NULL),
106 thread_interrupt_data_(NULL), 107 thread_interrupt_data_(NULL),
107 isolate_(NULL), 108 isolate_(NULL),
108 heap_(NULL), 109 heap_(NULL),
109 store_buffer_block_(NULL) { 110 store_buffer_block_(NULL) {
110 ClearState(); 111 ClearState();
112
111 #define DEFAULT_INIT(type_name, member_name, init_expr, default_init_value) \ 113 #define DEFAULT_INIT(type_name, member_name, init_expr, default_init_value) \
112 member_name = default_init_value; 114 member_name = default_init_value;
113 CACHED_CONSTANTS_LIST(DEFAULT_INIT) 115 CACHED_CONSTANTS_LIST(DEFAULT_INIT)
114 #undef DEFAULT_INIT 116 #undef DEFAULT_INIT
117
118 #define DEFAULT_INIT(name) \
119 name##_entry_point_ = 0;
120 RUNTIME_ENTRY_LIST(DEFAULT_INIT)
121 #undef DEFAULT_INIT
122
123 #define DEFAULT_INIT(returntype, name, ...) \
124 name##_entry_point_ = 0;
125 LEAF_RUNTIME_ENTRY_LIST(DEFAULT_INIT)
126 #undef DEFAULT_INIT
127
115 if (init_vm_constants) { 128 if (init_vm_constants) {
116 InitVMConstants(); 129 InitVMConstants();
117 } 130 }
118 SetCurrent(this); 131 SetCurrent(this);
119 } 132 }
120 133
121 134
122 void Thread::InitVMConstants() { 135 void Thread::InitVMConstants() {
123 #define ASSERT_VM_HEAP(type_name, member_name, init_expr, default_init_value) \ 136 #define ASSERT_VM_HEAP(type_name, member_name, init_expr, default_init_value) \
124 ASSERT((init_expr)->IsOldObject()); 137 ASSERT((init_expr)->IsOldObject());
125 CACHED_VM_OBJECTS_LIST(ASSERT_VM_HEAP) 138 CACHED_VM_OBJECTS_LIST(ASSERT_VM_HEAP)
126 #undef ASSERT_VM_HEAP 139 #undef ASSERT_VM_HEAP
127 140
128 #define INIT_VALUE(type_name, member_name, init_expr, default_init_value) \ 141 #define INIT_VALUE(type_name, member_name, init_expr, default_init_value) \
129 ASSERT(member_name == default_init_value); \ 142 ASSERT(member_name == default_init_value); \
130 member_name = (init_expr); 143 member_name = (init_expr);
131 CACHED_CONSTANTS_LIST(INIT_VALUE) 144 CACHED_CONSTANTS_LIST(INIT_VALUE)
132 #undef INIT_VALUE 145 #undef INIT_VALUE
146
147 #define INIT_VALUE(name) \
148 ASSERT(name##_entry_point_ == 0); \
149 name##_entry_point_ = k##name##RuntimeEntry.GetEntryPoint();
150 RUNTIME_ENTRY_LIST(INIT_VALUE)
151 #undef INIT_VALUE
152
153 #define INIT_VALUE(returntype, name, ...) \
154 ASSERT(name##_entry_point_ == 0); \
155 name##_entry_point_ = k##name##RuntimeEntry.GetEntryPoint();
156 LEAF_RUNTIME_ENTRY_LIST(INIT_VALUE)
157 #undef INIT_VALUE
133 } 158 }
134 159
135 160
136 void Thread::Schedule(Isolate* isolate, bool bypass_safepoint) { 161 void Thread::Schedule(Isolate* isolate, bool bypass_safepoint) {
137 State st; 162 State st;
138 if (isolate->thread_registry()->RestoreStateTo(this, &st, bypass_safepoint)) { 163 if (isolate->thread_registry()->RestoreStateTo(this, &st, bypass_safepoint)) {
139 ASSERT(isolate->thread_registry()->Contains(this)); 164 ASSERT(isolate->thread_registry()->Contains(this));
140 state_ = st; 165 state_ = st;
141 } 166 }
142 } 167 }
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 intptr_t Thread::OffsetFromThread(const Object& object) { 344 intptr_t Thread::OffsetFromThread(const Object& object) {
320 #define COMPUTE_OFFSET(type_name, member_name, expr, default_init_value) \ 345 #define COMPUTE_OFFSET(type_name, member_name, expr, default_init_value) \
321 ASSERT((expr)->IsVMHeapObject()); \ 346 ASSERT((expr)->IsVMHeapObject()); \
322 if (object.raw() == expr) return Thread::member_name##offset(); 347 if (object.raw() == expr) return Thread::member_name##offset();
323 CACHED_VM_OBJECTS_LIST(COMPUTE_OFFSET) 348 CACHED_VM_OBJECTS_LIST(COMPUTE_OFFSET)
324 #undef COMPUTE_OFFSET 349 #undef COMPUTE_OFFSET
325 UNREACHABLE(); 350 UNREACHABLE();
326 return -1; 351 return -1;
327 } 352 }
328 353
354 intptr_t Thread::OffsetFromThread(const RuntimeEntry* runtime_entry) {
355 #define COMPUTE_OFFSET(name) \
356 if (runtime_entry->function() == k##name##RuntimeEntry.function()) { \
357 return Thread::name##_entry_point_offset(); \
358 }
359 RUNTIME_ENTRY_LIST(COMPUTE_OFFSET)
360 #undef COMPUTE_OFFSET
361
362 #define COMPUTE_OFFSET(returntype, name, ...) \
363 if (runtime_entry->function() == k##name##RuntimeEntry.function()) { \
364 return Thread::name##_entry_point_offset(); \
365 }
366 LEAF_RUNTIME_ENTRY_LIST(COMPUTE_OFFSET)
367 #undef COMPUTE_OFFSET
368
369 UNREACHABLE();
370 return -1;
371 }
372
329 } // namespace dart 373 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698