| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef V8_ISOLATE_H_ | 5 #ifndef V8_ISOLATE_H_ | 
| 6 #define V8_ISOLATE_H_ | 6 #define V8_ISOLATE_H_ | 
| 7 | 7 | 
| 8 #include "include/v8-debug.h" | 8 #include "include/v8-debug.h" | 
| 9 #include "src/allocation.h" | 9 #include "src/allocation.h" | 
| 10 #include "src/assert-scope.h" | 10 #include "src/assert-scope.h" | 
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 459   }; | 459   }; | 
| 460 | 460 | 
| 461 | 461 | 
| 462   enum AddressId { | 462   enum AddressId { | 
| 463 #define DECLARE_ENUM(CamelName, hacker_name) k##CamelName##Address, | 463 #define DECLARE_ENUM(CamelName, hacker_name) k##CamelName##Address, | 
| 464     FOR_EACH_ISOLATE_ADDRESS_NAME(DECLARE_ENUM) | 464     FOR_EACH_ISOLATE_ADDRESS_NAME(DECLARE_ENUM) | 
| 465 #undef DECLARE_ENUM | 465 #undef DECLARE_ENUM | 
| 466     kIsolateAddressCount | 466     kIsolateAddressCount | 
| 467   }; | 467   }; | 
| 468 | 468 | 
| 469   static void InitializeOncePerProcess(); |  | 
| 470 |  | 
| 471   // Returns the PerIsolateThreadData for the current thread (or NULL if one is | 469   // Returns the PerIsolateThreadData for the current thread (or NULL if one is | 
| 472   // not currently set). | 470   // not currently set). | 
| 473   static PerIsolateThreadData* CurrentPerIsolateThreadData() { | 471   static PerIsolateThreadData* CurrentPerIsolateThreadData() { | 
|  | 472     EnsureInitialized(); | 
| 474     return reinterpret_cast<PerIsolateThreadData*>( | 473     return reinterpret_cast<PerIsolateThreadData*>( | 
| 475         base::Thread::GetThreadLocal(per_isolate_thread_data_key_)); | 474         base::Thread::GetThreadLocal(per_isolate_thread_data_key_)); | 
| 476   } | 475   } | 
| 477 | 476 | 
| 478   // Returns the isolate inside which the current thread is running. | 477   // Returns the isolate inside which the current thread is running. | 
| 479   INLINE(static Isolate* Current()) { | 478   INLINE(static Isolate* Current()) { | 
|  | 479     EnsureInitialized(); | 
| 480     Isolate* isolate = reinterpret_cast<Isolate*>( | 480     Isolate* isolate = reinterpret_cast<Isolate*>( | 
| 481         base::Thread::GetExistingThreadLocal(isolate_key_)); | 481         base::Thread::GetExistingThreadLocal(isolate_key_)); | 
| 482     DCHECK(isolate != NULL); | 482     DCHECK(isolate != NULL); | 
| 483     return isolate; | 483     return isolate; | 
| 484   } | 484   } | 
| 485 | 485 | 
| 486   INLINE(static Isolate* UncheckedCurrent()) { | 486   INLINE(static Isolate* UncheckedCurrent()) { | 
|  | 487     EnsureInitialized(); | 
| 487     return reinterpret_cast<Isolate*>( | 488     return reinterpret_cast<Isolate*>( | 
| 488         base::Thread::GetThreadLocal(isolate_key_)); | 489         base::Thread::GetThreadLocal(isolate_key_)); | 
| 489   } | 490   } | 
| 490 | 491 | 
| 491   // Like UncheckedCurrent, but skips the check that |isolate_key_| was | 492   // Like UncheckedCurrent, but skips the check that |isolate_key_| was | 
| 492   // initialized. Callers have to ensure that themselves. | 493   // initialized. Callers have to ensure that themselves. | 
| 493   INLINE(static Isolate* UnsafeCurrent()) { | 494   INLINE(static Isolate* UnsafeCurrent()) { | 
| 494     return reinterpret_cast<Isolate*>( | 495     return reinterpret_cast<Isolate*>( | 
| 495         base::Thread::GetThreadLocal(isolate_key_)); | 496         base::Thread::GetThreadLocal(isolate_key_)); | 
| 496   } | 497   } | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 521   PerIsolateThreadData* FindPerThreadDataForThisThread(); | 522   PerIsolateThreadData* FindPerThreadDataForThisThread(); | 
| 522 | 523 | 
| 523   // Find the PerThread for given (isolate, thread) combination | 524   // Find the PerThread for given (isolate, thread) combination | 
| 524   // If one does not yet exist, return null. | 525   // If one does not yet exist, return null. | 
| 525   PerIsolateThreadData* FindPerThreadDataForThread(ThreadId thread_id); | 526   PerIsolateThreadData* FindPerThreadDataForThread(ThreadId thread_id); | 
| 526 | 527 | 
| 527   // Returns the key used to store the pointer to the current isolate. | 528   // Returns the key used to store the pointer to the current isolate. | 
| 528   // Used internally for V8 threads that do not execute JavaScript but still | 529   // Used internally for V8 threads that do not execute JavaScript but still | 
| 529   // are part of the domain of an isolate (like the context switcher). | 530   // are part of the domain of an isolate (like the context switcher). | 
| 530   static base::Thread::LocalStorageKey isolate_key() { | 531   static base::Thread::LocalStorageKey isolate_key() { | 
|  | 532     EnsureInitialized(); | 
| 531     return isolate_key_; | 533     return isolate_key_; | 
| 532   } | 534   } | 
| 533 | 535 | 
| 534   // Returns the key used to store process-wide thread IDs. | 536   // Returns the key used to store process-wide thread IDs. | 
| 535   static base::Thread::LocalStorageKey thread_id_key() { | 537   static base::Thread::LocalStorageKey thread_id_key() { | 
|  | 538     EnsureInitialized(); | 
| 536     return thread_id_key_; | 539     return thread_id_key_; | 
| 537   } | 540   } | 
| 538 | 541 | 
| 539   static base::Thread::LocalStorageKey per_isolate_thread_data_key(); | 542   static base::Thread::LocalStorageKey per_isolate_thread_data_key(); | 
| 540 | 543 | 
| 541   // Mutex for serializing access to break control structures. | 544   // Mutex for serializing access to break control structures. | 
| 542   base::RecursiveMutex* break_access() { return &break_access_; } | 545   base::RecursiveMutex* break_access() { return &break_access_; } | 
| 543 | 546 | 
| 544   Address get_address_from_id(AddressId id); | 547   Address get_address_from_id(AddressId id); | 
| 545 | 548 | 
| (...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1100   void AddCallCompletedCallback(CallCompletedCallback callback); | 1103   void AddCallCompletedCallback(CallCompletedCallback callback); | 
| 1101   void RemoveCallCompletedCallback(CallCompletedCallback callback); | 1104   void RemoveCallCompletedCallback(CallCompletedCallback callback); | 
| 1102   void FireCallCompletedCallback(); | 1105   void FireCallCompletedCallback(); | 
| 1103 | 1106 | 
| 1104   void EnqueueMicrotask(Handle<Object> microtask); | 1107   void EnqueueMicrotask(Handle<Object> microtask); | 
| 1105   void RunMicrotasks(); | 1108   void RunMicrotasks(); | 
| 1106 | 1109 | 
| 1107   void SetUseCounterCallback(v8::Isolate::UseCounterCallback callback); | 1110   void SetUseCounterCallback(v8::Isolate::UseCounterCallback callback); | 
| 1108   void CountUsage(v8::Isolate::UseCounterFeature feature); | 1111   void CountUsage(v8::Isolate::UseCounterFeature feature); | 
| 1109 | 1112 | 
| 1110   static Isolate* NewForTesting() { return new Isolate(); } | 1113  private: | 
|  | 1114   static void EnsureInitialized(); | 
| 1111 | 1115 | 
| 1112  private: |  | 
| 1113   Isolate(); | 1116   Isolate(); | 
| 1114 | 1117 | 
| 1115   friend struct GlobalState; | 1118   friend struct GlobalState; | 
| 1116   friend struct InitializeGlobalState; | 1119   friend struct InitializeGlobalState; | 
| 1117 | 1120 | 
| 1118   enum State { | 1121   enum State { | 
| 1119     UNINITIALIZED,    // Some components may not have been allocated. | 1122     UNINITIALIZED,    // Some components may not have been allocated. | 
| 1120     INITIALIZED       // All components are fully initialized. | 1123     INITIALIZED       // All components are fully initialized. | 
| 1121   }; | 1124   }; | 
| 1122 | 1125 | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1161 | 1164 | 
| 1162     int entry_count; | 1165     int entry_count; | 
| 1163     PerIsolateThreadData* previous_thread_data; | 1166     PerIsolateThreadData* previous_thread_data; | 
| 1164     Isolate* previous_isolate; | 1167     Isolate* previous_isolate; | 
| 1165     EntryStackItem* previous_item; | 1168     EntryStackItem* previous_item; | 
| 1166 | 1169 | 
| 1167    private: | 1170    private: | 
| 1168     DISALLOW_COPY_AND_ASSIGN(EntryStackItem); | 1171     DISALLOW_COPY_AND_ASSIGN(EntryStackItem); | 
| 1169   }; | 1172   }; | 
| 1170 | 1173 | 
| 1171   static base::LazyMutex thread_data_table_mutex_; | 1174   // This mutex protects highest_thread_id_ and thread_data_table_. | 
|  | 1175   static base::LazyMutex process_wide_mutex_; | 
| 1172 | 1176 | 
| 1173   static base::Thread::LocalStorageKey per_isolate_thread_data_key_; | 1177   static base::Thread::LocalStorageKey per_isolate_thread_data_key_; | 
| 1174   static base::Thread::LocalStorageKey isolate_key_; | 1178   static base::Thread::LocalStorageKey isolate_key_; | 
| 1175   static base::Thread::LocalStorageKey thread_id_key_; | 1179   static base::Thread::LocalStorageKey thread_id_key_; | 
| 1176   static ThreadDataTable* thread_data_table_; | 1180   static ThreadDataTable* thread_data_table_; | 
| 1177 | 1181 | 
| 1178   // A global counter for all generated Isolates, might overflow. | 1182   // A global counter for all generated Isolates, might overflow. | 
| 1179   static base::Atomic32 isolate_counter_; | 1183   static base::Atomic32 isolate_counter_; | 
| 1180 | 1184 | 
| 1181   void Deinit(); | 1185   void Deinit(); | 
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1549   } | 1553   } | 
| 1550 | 1554 | 
| 1551   EmbeddedVector<char, 128> filename_; | 1555   EmbeddedVector<char, 128> filename_; | 
| 1552   FILE* file_; | 1556   FILE* file_; | 
| 1553   int scope_depth_; | 1557   int scope_depth_; | 
| 1554 }; | 1558 }; | 
| 1555 | 1559 | 
| 1556 } }  // namespace v8::internal | 1560 } }  // namespace v8::internal | 
| 1557 | 1561 | 
| 1558 #endif  // V8_ISOLATE_H_ | 1562 #endif  // V8_ISOLATE_H_ | 
| OLD | NEW | 
|---|