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

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

Issue 9182001: OOB messages and general message refactor. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/dart_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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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/store_buffer.h" 10 #include "vm/store_buffer.h"
11 #include "vm/timer.h" 11 #include "vm/timer.h"
12 12
13 namespace dart { 13 namespace dart {
14 14
15 // Forward declarations. 15 // Forward declarations.
16 class ApiState; 16 class ApiState;
17 class BigintStore; 17 class BigintStore;
18 class CodeIndexTable; 18 class CodeIndexTable;
19 class Debugger; 19 class Debugger;
20 class HandleScope; 20 class HandleScope;
21 class HandleVisitor; 21 class HandleVisitor;
22 class Heap; 22 class Heap;
23 class LongJump; 23 class LongJump;
24 class Message;
24 class MessageQueue; 25 class MessageQueue;
25 class Mutex; 26 class Mutex;
26 class ObjectPointerVisitor; 27 class ObjectPointerVisitor;
27 class ObjectStore; 28 class ObjectStore;
28 class RawContext; 29 class RawContext;
29 class RawObject; 30 class RawObject;
30 class StackResource; 31 class StackResource;
31 class StubCode; 32 class StubCode;
32 class Zone; 33 class Zone;
33 34
34 class Isolate { 35 class Isolate {
35 public: 36 public:
36 ~Isolate(); 37 ~Isolate();
37 38
38 static inline Isolate* Current(); 39 static inline Isolate* Current();
39 static void SetCurrent(Isolate* isolate); 40 static void SetCurrent(Isolate* isolate);
40 41
41 static void InitOnce(); 42 static void InitOnce();
42 static Isolate* Init(const char* name_prefix); 43 static Isolate* Init(const char* name_prefix);
43 void Shutdown(); 44 void Shutdown();
44 45
45 // Visit all object pointers. 46 // Visit all object pointers.
46 void VisitObjectPointers(ObjectPointerVisitor* visitor, bool validate_frames); 47 void VisitObjectPointers(ObjectPointerVisitor* visitor, bool validate_frames);
47 48
48 void VisitWeakPersistentHandles(HandleVisitor* visitor); 49 void VisitWeakPersistentHandles(HandleVisitor* visitor);
49 50
50 StoreBufferBlock* store_buffer() { return &store_buffer_; } 51 StoreBufferBlock* store_buffer() { return &store_buffer_; }
51 52
52 Dart_PostMessageCallback post_message_callback() const { 53 Dart_MessageNotifyCallback message_notify_callback() const {
53 return post_message_callback_; 54 return message_notify_callback_;
54 } 55 }
55 void set_post_message_callback(Dart_PostMessageCallback value) { 56 void set_message_notify_callback(Dart_MessageNotifyCallback value) {
56 post_message_callback_ = value; 57 message_notify_callback_ = value;
57 }
58
59 Dart_ClosePortCallback close_port_callback() const {
60 return close_port_callback_;
61 }
62 void set_close_port_callback(Dart_ClosePortCallback value) {
63 close_port_callback_ = value;
64 } 58 }
65 59
66 MessageQueue* message_queue() const { return message_queue_; } 60 MessageQueue* message_queue() const { return message_queue_; }
67 void set_message_queue(MessageQueue* value) { message_queue_ = value; } 61 void set_message_queue(MessageQueue* value) { message_queue_ = value; }
68 62
69 const char* name() const { return name_; } 63 const char* name() const { return name_; }
70 64
71 // The number of ports is only correct when read from the current 65 // The number of ports is only correct when read from the current
72 // isolate. This value is not protected from being updated 66 // isolate. This value is not protected from being updated
73 // concurrently. 67 // concurrently.
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 225
232 // The current stack limit. This may be overwritten with a special 226 // The current stack limit. This may be overwritten with a special
233 // value to trigger interrupts. 227 // value to trigger interrupts.
234 uword stack_limit() const { return stack_limit_; } 228 uword stack_limit() const { return stack_limit_; }
235 229
236 // The true stack limit for this isolate. This does not change 230 // The true stack limit for this isolate. This does not change
237 // after isolate initialization. 231 // after isolate initialization.
238 uword saved_stack_limit() const { return saved_stack_limit_; } 232 uword saved_stack_limit() const { return saved_stack_limit_; }
239 233
240 enum { 234 enum {
241 kInterruptsMask = 0x1, 235 kApiInterrupt = 0x1, // An interrupt from Dart_InterruptIsolate.
242 kApiInterrupt = 0x1, // An interrupt from Dart_InterruptIsolate. 236 kMessageInterrupt = 0x2, // An interrupt to process an out of band message.
243 // More interrupt types will go here. 237
238 kInterruptsMask = kApiInterrupt | kMessageInterrupt,
244 }; 239 };
245 240
246 void ScheduleInterrupts(uword interrupt_bits); 241 void ScheduleInterrupts(uword interrupt_bits);
247 uword GetAndClearInterrupts(); 242 uword GetAndClearInterrupts();
248 243
244 void PostMessage(Message* message);
245 void ClosePort(Dart_Port port);
246 void CloseAllPorts();
247
249 // Returns null on success, unhandled exception on failure. 248 // Returns null on success, unhandled exception on failure.
250 RawObject* StandardRunLoop(); 249 RawObject* StandardRunLoop();
251 250
252 intptr_t ast_node_id() const { return ast_node_id_; } 251 intptr_t ast_node_id() const { return ast_node_id_; }
253 void set_ast_node_id(int value) { ast_node_id_ = value; } 252 void set_ast_node_id(int value) { ast_node_id_ = value; }
254 253
255 Debugger* debugger() const { return debugger_; } 254 Debugger* debugger() const { return debugger_; }
256 255
257 static void SetCreateCallback(Dart_IsolateCreateCallback cback); 256 static void SetCreateCallback(Dart_IsolateCreateCallback cback);
258 static Dart_IsolateCreateCallback CreateCallback(); 257 static Dart_IsolateCreateCallback CreateCallback();
259 258
260 static void SetInterruptCallback(Dart_IsolateInterruptCallback cback); 259 static void SetInterruptCallback(Dart_IsolateInterruptCallback cback);
261 static Dart_IsolateInterruptCallback InterruptCallback(); 260 static Dart_IsolateInterruptCallback InterruptCallback();
262 261
263 private: 262 private:
264 Isolate(); 263 Isolate();
265 264
266 void BuildName(const char* name_prefix); 265 void BuildName(const char* name_prefix);
267 void PrintInvokedFunctions(); 266 void PrintInvokedFunctions();
268 267
269 static uword GetSpecifiedStackSize(); 268 static uword GetSpecifiedStackSize();
270 269
271 static const uword kStackSizeBuffer = (128 * KB); 270 static const uword kStackSizeBuffer = (128 * KB);
272 static const uword kDefaultStackSize = (1 * MB); 271 static const uword kDefaultStackSize = (1 * MB);
273 272
274 StoreBufferBlock store_buffer_; 273 StoreBufferBlock store_buffer_;
275 MessageQueue* message_queue_; 274 MessageQueue* message_queue_;
276 Dart_PostMessageCallback post_message_callback_; 275 Dart_MessageNotifyCallback message_notify_callback_;
277 Dart_ClosePortCallback close_port_callback_;
278 char* name_; 276 char* name_;
279 intptr_t num_ports_; 277 intptr_t num_ports_;
280 intptr_t live_ports_; 278 intptr_t live_ports_;
281 Dart_Port main_port_; 279 Dart_Port main_port_;
282 Heap* heap_; 280 Heap* heap_;
283 ObjectStore* object_store_; 281 ObjectStore* object_store_;
284 StackResource* top_resource_; 282 StackResource* top_resource_;
285 RawContext* top_context_; 283 RawContext* top_context_;
286 Zone* current_zone_; 284 Zone* current_zone_;
287 #if defined(DEBUG) 285 #if defined(DEBUG)
(...skipping 29 matching lines...) Expand all
317 #include "vm/isolate_linux.h" 315 #include "vm/isolate_linux.h"
318 #elif defined(TARGET_OS_MACOS) 316 #elif defined(TARGET_OS_MACOS)
319 #include "vm/isolate_macos.h" 317 #include "vm/isolate_macos.h"
320 #elif defined(TARGET_OS_WINDOWS) 318 #elif defined(TARGET_OS_WINDOWS)
321 #include "vm/isolate_win.h" 319 #include "vm/isolate_win.h"
322 #else 320 #else
323 #error Unknown target os. 321 #error Unknown target os.
324 #endif 322 #endif
325 323
326 #endif // VM_ISOLATE_H_ 324 #endif // VM_ISOLATE_H_
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698