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

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

Issue 187503002: 1. Restructure reusable handles to make individual Scopes for each handle type (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/dart_api_impl.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 "platform/thread.h" 10 #include "platform/thread.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 class Simulator; 57 class Simulator;
58 class StackResource; 58 class StackResource;
59 class StackZone; 59 class StackZone;
60 class StubCode; 60 class StubCode;
61 class TypeArguments; 61 class TypeArguments;
62 class TypeParameter; 62 class TypeParameter;
63 class ObjectHistogram; 63 class ObjectHistogram;
64 class ObjectIdRing; 64 class ObjectIdRing;
65 65
66 66
67 #define REUSABLE_HANDLE_LIST(V) \
68 V(Object) \
69 V(Array) \
70 V(String) \
71 V(Instance) \
72 V(Function) \
73 V(Field) \
74 V(Class) \
75 V(TypeParameter) \
76 V(TypeArguments) \
77
78
79 class IsolateVisitor { 67 class IsolateVisitor {
80 public: 68 public:
81 IsolateVisitor() {} 69 IsolateVisitor() {}
82 virtual ~IsolateVisitor() {} 70 virtual ~IsolateVisitor() {}
83 71
84 virtual void VisitIsolate(Isolate* isolate) = 0; 72 virtual void VisitIsolate(Isolate* isolate) = 0;
85 73
86 private: 74 private:
87 DISALLOW_COPY_AND_ASSIGN(IsolateVisitor); 75 DISALLOW_COPY_AND_ASSIGN(IsolateVisitor);
88 }; 76 };
89 77
78 #define REUSABLE_HANDLE_LIST(V) \
79 V(Object) \
80 V(Array) \
81 V(String) \
82 V(Instance) \
83 V(Function) \
84 V(Field) \
85 V(Class) \
86 V(TypeParameter) \
87 V(TypeArguments) \
90 88
91 class Isolate : public BaseIsolate { 89 class Isolate : public BaseIsolate {
92 public: 90 public:
93 ~Isolate(); 91 ~Isolate();
94 92
95 static inline Isolate* Current() { 93 static inline Isolate* Current() {
96 return reinterpret_cast<Isolate*>(Thread::GetThreadLocal(isolate_key)); 94 return reinterpret_cast<Isolate*>(Thread::GetThreadLocal(isolate_key));
97 } 95 }
98 96
99 static void SetCurrent(Isolate* isolate); 97 static void SetCurrent(Isolate* isolate);
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 430
433 void set_thread_state(InterruptableThreadState* state) { 431 void set_thread_state(InterruptableThreadState* state) {
434 ASSERT((thread_state_ == NULL) || (state == NULL)); 432 ASSERT((thread_state_ == NULL) || (state == NULL));
435 thread_state_ = state; 433 thread_state_ = state;
436 } 434 }
437 435
438 InterruptableThreadState* thread_state() const { 436 InterruptableThreadState* thread_state() const {
439 return thread_state_; 437 return thread_state_;
440 } 438 }
441 439
440 #if defined(DEBUG)
441 #define REUSABLE_HANDLE_SCOPE_ACCESSORS(object) \
442 void set_reusable_##object##_handle_scope_active(bool value) { \
443 reusable_##object##_handle_scope_active_ = value; \
444 } \
445 bool reusable_##object##_handle_scope_active() const { \
446 return reusable_##object##_handle_scope_active_; \
447 }
448 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_ACCESSORS)
449 #undef REUSABLE_HANDLE_SCOPE_ACCESSORS
450 #endif // defined(DEBUG)
451
452 #define REUSABLE_HANDLE(object) \
453 object& object##Handle() const { \
454 return *object##_handle_; \
455 }
456 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE)
457 #undef REUSABLE_HANDLE
458
442 static void VisitIsolates(IsolateVisitor* visitor); 459 static void VisitIsolates(IsolateVisitor* visitor);
443 460
444 private: 461 private:
445 Isolate(); 462 Isolate();
446 463
447 void BuildName(const char* name_prefix); 464 void BuildName(const char* name_prefix);
448 void PrintInvokedFunctions(); 465 void PrintInvokedFunctions();
449 466
450 template<class T> T* AllocateReusableHandle(); 467 template<class T> T* AllocateReusableHandle();
451 468
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 515
499 IsolateProfilerData* profiler_data_; 516 IsolateProfilerData* profiler_data_;
500 Mutex profiler_data_mutex_; 517 Mutex profiler_data_mutex_;
501 InterruptableThreadState* thread_state_; 518 InterruptableThreadState* thread_state_;
502 519
503 // Isolate list next pointer. 520 // Isolate list next pointer.
504 Isolate* next_; 521 Isolate* next_;
505 522
506 // Reusable handles support. 523 // Reusable handles support.
507 #define REUSABLE_HANDLE_FIELDS(object) \ 524 #define REUSABLE_HANDLE_FIELDS(object) \
508 object* object##_handle_; \ 525 object* object##_handle_;
509
510 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_FIELDS) 526 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_FIELDS)
511 #undef REUSABLE_HANDLE_FIELDS 527 #undef REUSABLE_HANDLE_FIELDS
528
529 #if defined(DEBUG)
530 #define REUSABLE_HANDLE_SCOPE_VARIABLE(object) \
531 bool reusable_##object##_handle_scope_active_;
532 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_VARIABLE);
533 #undef REUSABLE_HANDLE_SCOPE_VARIABLE
534 #endif // defined(DEBUG)
535
512 VMHandles reusable_handles_; 536 VMHandles reusable_handles_;
513 537
514 static Dart_IsolateCreateCallback create_callback_; 538 static Dart_IsolateCreateCallback create_callback_;
515 static Dart_IsolateInterruptCallback interrupt_callback_; 539 static Dart_IsolateInterruptCallback interrupt_callback_;
516 static Dart_IsolateUnhandledExceptionCallback unhandled_exception_callback_; 540 static Dart_IsolateUnhandledExceptionCallback unhandled_exception_callback_;
517 static Dart_IsolateShutdownCallback shutdown_callback_; 541 static Dart_IsolateShutdownCallback shutdown_callback_;
518 static Dart_FileOpenCallback file_open_callback_; 542 static Dart_FileOpenCallback file_open_callback_;
519 static Dart_FileReadCallback file_read_callback_; 543 static Dart_FileReadCallback file_read_callback_;
520 static Dart_FileWriteCallback file_write_callback_; 544 static Dart_FileWriteCallback file_write_callback_;
521 static Dart_FileCloseCallback file_close_callback_; 545 static Dart_FileCloseCallback file_close_callback_;
522 static Dart_EntropySource entropy_source_callback_; 546 static Dart_EntropySource entropy_source_callback_;
523 static Dart_IsolateInterruptCallback vmstats_callback_; 547 static Dart_IsolateInterruptCallback vmstats_callback_;
524 static Dart_ServiceIsolateCreateCalback service_create_callback_; 548 static Dart_ServiceIsolateCreateCalback service_create_callback_;
525 549
526 // Manage list of existing isolates. 550 // Manage list of existing isolates.
527 static void AddIsolateTolist(Isolate* isolate); 551 static void AddIsolateTolist(Isolate* isolate);
528 static void RemoveIsolateFromList(Isolate* isolate); 552 static void RemoveIsolateFromList(Isolate* isolate);
529 static void CheckForDuplicateThreadState(InterruptableThreadState* state); 553 static void CheckForDuplicateThreadState(InterruptableThreadState* state);
530 static Monitor* isolates_list_monitor_; 554 static Monitor* isolates_list_monitor_;
531 static Isolate* isolates_list_head_; 555 static Isolate* isolates_list_head_;
532 556
533 friend class ReusableHandleScope; 557 #define REUSABLE_FRIEND_DECLARATION(name) \
534 friend class ReusableObjectHandleScope; 558 friend class Reusable##name##HandleScope;
559 REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION)
560 #undef REUSABLE_FRIEND_DECLARATION
535 561
536 DISALLOW_COPY_AND_ASSIGN(Isolate); 562 DISALLOW_COPY_AND_ASSIGN(Isolate);
537 }; 563 };
538 564
539 565
540 // When we need to execute code in an isolate, we use the 566 // When we need to execute code in an isolate, we use the
541 // StartIsolateScope. 567 // StartIsolateScope.
542 class StartIsolateScope { 568 class StartIsolateScope {
543 public: 569 public:
544 explicit StartIsolateScope(Isolate* new_isolate) 570 explicit StartIsolateScope(Isolate* new_isolate)
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 char* script_url_; 651 char* script_url_;
626 char* library_url_; 652 char* library_url_;
627 char* class_name_; 653 char* class_name_;
628 char* function_name_; 654 char* function_name_;
629 char* exception_callback_name_; 655 char* exception_callback_name_;
630 }; 656 };
631 657
632 } // namespace dart 658 } // namespace dart
633 659
634 #endif // VM_ISOLATE_H_ 660 #endif // VM_ISOLATE_H_
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698