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 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 | 504 |
505 // Usually called by Init(), but can be called early e.g. to allow | 505 // Usually called by Init(), but can be called early e.g. to allow |
506 // testing components that require logging but not the whole | 506 // testing components that require logging but not the whole |
507 // isolate. | 507 // isolate. |
508 // | 508 // |
509 // Safe to call more than once. | 509 // Safe to call more than once. |
510 void InitializeLoggingAndCounters(); | 510 void InitializeLoggingAndCounters(); |
511 | 511 |
512 bool Init(Deserializer* des); | 512 bool Init(Deserializer* des); |
513 | 513 |
514 bool IsInitialized() { return state_ == INITIALIZED; } | |
515 | |
516 // True if at least one thread Enter'ed this isolate. | 514 // True if at least one thread Enter'ed this isolate. |
517 bool IsInUse() { return entry_stack_ != NULL; } | 515 bool IsInUse() { return entry_stack_ != NULL; } |
518 | 516 |
519 // Destroys the non-default isolates. | 517 // Destroys the non-default isolates. |
520 // Sets default isolate into "has_been_disposed" state rather then destroying, | 518 // Sets default isolate into "has_been_disposed" state rather then destroying, |
521 // for legacy API reasons. | 519 // for legacy API reasons. |
522 void TearDown(); | 520 void TearDown(); |
523 | 521 |
524 static void GlobalTearDown(); | 522 static void GlobalTearDown(); |
525 | 523 |
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
997 DCHECK(slot < Internals::kNumIsolateDataSlots); | 995 DCHECK(slot < Internals::kNumIsolateDataSlots); |
998 embedder_data_[slot] = data; | 996 embedder_data_[slot] = data; |
999 } | 997 } |
1000 void* GetData(uint32_t slot) { | 998 void* GetData(uint32_t slot) { |
1001 DCHECK(slot < Internals::kNumIsolateDataSlots); | 999 DCHECK(slot < Internals::kNumIsolateDataSlots); |
1002 return embedder_data_[slot]; | 1000 return embedder_data_[slot]; |
1003 } | 1001 } |
1004 | 1002 |
1005 THREAD_LOCAL_TOP_ACCESSOR(LookupResult*, top_lookup_result) | 1003 THREAD_LOCAL_TOP_ACCESSOR(LookupResult*, top_lookup_result) |
1006 | 1004 |
1007 void enable_serializer() { | |
1008 // The serializer can only be enabled before the isolate init. | |
1009 DCHECK(state_ != INITIALIZED); | |
1010 serializer_enabled_ = true; | |
1011 } | |
1012 | |
1013 bool serializer_enabled() const { return serializer_enabled_; } | 1005 bool serializer_enabled() const { return serializer_enabled_; } |
1014 | 1006 |
1015 bool IsDead() { return has_fatal_error_; } | 1007 bool IsDead() { return has_fatal_error_; } |
1016 void SignalFatalError() { has_fatal_error_ = true; } | 1008 void SignalFatalError() { has_fatal_error_ = true; } |
1017 | 1009 |
1018 bool use_crankshaft() const; | 1010 bool use_crankshaft() const; |
1019 | 1011 |
1020 bool initialized_from_snapshot() { return initialized_from_snapshot_; } | 1012 bool initialized_from_snapshot() { return initialized_from_snapshot_; } |
1021 | 1013 |
1022 double time_millis_since_init() { | 1014 double time_millis_since_init() { |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1106 | 1098 |
1107 void EnqueueMicrotask(Handle<Object> microtask); | 1099 void EnqueueMicrotask(Handle<Object> microtask); |
1108 void RunMicrotasks(); | 1100 void RunMicrotasks(); |
1109 | 1101 |
1110 void SetUseCounterCallback(v8::Isolate::UseCounterCallback callback); | 1102 void SetUseCounterCallback(v8::Isolate::UseCounterCallback callback); |
1111 void CountUsage(v8::Isolate::UseCounterFeature feature); | 1103 void CountUsage(v8::Isolate::UseCounterFeature feature); |
1112 | 1104 |
1113 BasicBlockProfiler* GetOrCreateBasicBlockProfiler(); | 1105 BasicBlockProfiler* GetOrCreateBasicBlockProfiler(); |
1114 BasicBlockProfiler* basic_block_profiler() { return basic_block_profiler_; } | 1106 BasicBlockProfiler* basic_block_profiler() { return basic_block_profiler_; } |
1115 | 1107 |
1116 static Isolate* NewForTesting() { return new Isolate(); } | 1108 static Isolate* NewForTesting() { return new Isolate(false); } |
1117 | 1109 |
1118 private: | 1110 private: |
1119 Isolate(); | 1111 explicit Isolate(bool enable_serializer); |
1120 | 1112 |
1121 friend struct GlobalState; | 1113 friend struct GlobalState; |
1122 friend struct InitializeGlobalState; | 1114 friend struct InitializeGlobalState; |
1123 | 1115 |
1124 enum State { | |
1125 UNINITIALIZED, // Some components may not have been allocated. | |
1126 INITIALIZED // All components are fully initialized. | |
1127 }; | |
1128 | |
1129 // These fields are accessed through the API, offsets must be kept in sync | 1116 // These fields are accessed through the API, offsets must be kept in sync |
1130 // with v8::internal::Internals (in include/v8.h) constants. This is also | 1117 // with v8::internal::Internals (in include/v8.h) constants. This is also |
1131 // verified in Isolate::Init() using runtime checks. | 1118 // verified in Isolate::Init() using runtime checks. |
1132 void* embedder_data_[Internals::kNumIsolateDataSlots]; | 1119 void* embedder_data_[Internals::kNumIsolateDataSlots]; |
1133 Heap heap_; | 1120 Heap heap_; |
1134 State state_; // Will be padded to kApiPointerSize. | |
1135 | 1121 |
1136 // The per-process lock should be acquired before the ThreadDataTable is | 1122 // The per-process lock should be acquired before the ThreadDataTable is |
1137 // modified. | 1123 // modified. |
1138 class ThreadDataTable { | 1124 class ThreadDataTable { |
1139 public: | 1125 public: |
1140 ThreadDataTable(); | 1126 ThreadDataTable(); |
1141 ~ThreadDataTable(); | 1127 ~ThreadDataTable(); |
1142 | 1128 |
1143 PerIsolateThreadData* Lookup(Isolate* isolate, ThreadId thread_id); | 1129 PerIsolateThreadData* Lookup(Isolate* isolate, ThreadId thread_id); |
1144 void Insert(PerIsolateThreadData* data); | 1130 void Insert(PerIsolateThreadData* data); |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1557 } | 1543 } |
1558 | 1544 |
1559 EmbeddedVector<char, 128> filename_; | 1545 EmbeddedVector<char, 128> filename_; |
1560 FILE* file_; | 1546 FILE* file_; |
1561 int scope_depth_; | 1547 int scope_depth_; |
1562 }; | 1548 }; |
1563 | 1549 |
1564 } } // namespace v8::internal | 1550 } } // namespace v8::internal |
1565 | 1551 |
1566 #endif // V8_ISOLATE_H_ | 1552 #endif // V8_ISOLATE_H_ |
OLD | NEW |