| 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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 C(Context, context) \ | 172 C(Context, context) \ |
| 173 C(PendingException, pending_exception) \ | 173 C(PendingException, pending_exception) \ |
| 174 C(ExternalCaughtException, external_caught_exception) \ | 174 C(ExternalCaughtException, external_caught_exception) \ |
| 175 C(JSEntrySP, js_entry_sp) | 175 C(JSEntrySP, js_entry_sp) |
| 176 | 176 |
| 177 | 177 |
| 178 // Platform-independent, reliable thread identifier. | 178 // Platform-independent, reliable thread identifier. |
| 179 class ThreadId { | 179 class ThreadId { |
| 180 public: | 180 public: |
| 181 // Creates an invalid ThreadId. | 181 // Creates an invalid ThreadId. |
| 182 ThreadId() : id_(kInvalidId) {} | 182 ThreadId() { base::NoBarrier_Store(&id_, kInvalidId); } |
| 183 |
| 184 ThreadId& operator=(const ThreadId& other) { |
| 185 base::NoBarrier_Store(&id_, base::NoBarrier_Load(&other.id_)); |
| 186 return *this; |
| 187 } |
| 183 | 188 |
| 184 // Returns ThreadId for current thread. | 189 // Returns ThreadId for current thread. |
| 185 static ThreadId Current() { return ThreadId(GetCurrentThreadId()); } | 190 static ThreadId Current() { return ThreadId(GetCurrentThreadId()); } |
| 186 | 191 |
| 187 // Returns invalid ThreadId (guaranteed not to be equal to any thread). | 192 // Returns invalid ThreadId (guaranteed not to be equal to any thread). |
| 188 static ThreadId Invalid() { return ThreadId(kInvalidId); } | 193 static ThreadId Invalid() { return ThreadId(kInvalidId); } |
| 189 | 194 |
| 190 // Compares ThreadIds for equality. | 195 // Compares ThreadIds for equality. |
| 191 INLINE(bool Equals(const ThreadId& other) const) { | 196 INLINE(bool Equals(const ThreadId& other) const) { |
| 192 return id_ == other.id_; | 197 return base::NoBarrier_Load(&id_) == base::NoBarrier_Load(&other.id_); |
| 193 } | 198 } |
| 194 | 199 |
| 195 // Checks whether this ThreadId refers to any thread. | 200 // Checks whether this ThreadId refers to any thread. |
| 196 INLINE(bool IsValid() const) { | 201 INLINE(bool IsValid() const) { |
| 197 return id_ != kInvalidId; | 202 return base::NoBarrier_Load(&id_) != kInvalidId; |
| 198 } | 203 } |
| 199 | 204 |
| 200 // Converts ThreadId to an integer representation | 205 // Converts ThreadId to an integer representation |
| 201 // (required for public API: V8::V8::GetCurrentThreadId). | 206 // (required for public API: V8::V8::GetCurrentThreadId). |
| 202 int ToInteger() const { return id_; } | 207 int ToInteger() const { return static_cast<int>(base::NoBarrier_Load(&id_)); } |
| 203 | 208 |
| 204 // Converts ThreadId to an integer representation | 209 // Converts ThreadId to an integer representation |
| 205 // (required for public API: V8::V8::TerminateExecution). | 210 // (required for public API: V8::V8::TerminateExecution). |
| 206 static ThreadId FromInteger(int id) { return ThreadId(id); } | 211 static ThreadId FromInteger(int id) { return ThreadId(id); } |
| 207 | 212 |
| 208 private: | 213 private: |
| 209 static const int kInvalidId = -1; | 214 static const int kInvalidId = -1; |
| 210 | 215 |
| 211 explicit ThreadId(int id) : id_(id) {} | 216 explicit ThreadId(int id) { base::NoBarrier_Store(&id_, id); } |
| 212 | 217 |
| 213 static int AllocateThreadId(); | 218 static int AllocateThreadId(); |
| 214 | 219 |
| 215 static int GetCurrentThreadId(); | 220 static int GetCurrentThreadId(); |
| 216 | 221 |
| 217 int id_; | 222 base::Atomic32 id_; |
| 218 | 223 |
| 219 static base::Atomic32 highest_thread_id_; | 224 static base::Atomic32 highest_thread_id_; |
| 220 | 225 |
| 221 friend class Isolate; | 226 friend class Isolate; |
| 222 }; | 227 }; |
| 223 | 228 |
| 224 | 229 |
| 225 #define FIELD_ACCESSOR(type, name) \ | 230 #define FIELD_ACCESSOR(type, name) \ |
| 226 inline void set_##name(type v) { name##_ = v; } \ | 231 inline void set_##name(type v) { name##_ = v; } \ |
| 227 inline type name() const { return name##_; } | 232 inline type name() const { return name##_; } |
| (...skipping 1324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1552 } | 1557 } |
| 1553 | 1558 |
| 1554 EmbeddedVector<char, 128> filename_; | 1559 EmbeddedVector<char, 128> filename_; |
| 1555 FILE* file_; | 1560 FILE* file_; |
| 1556 int scope_depth_; | 1561 int scope_depth_; |
| 1557 }; | 1562 }; |
| 1558 | 1563 |
| 1559 } } // namespace v8::internal | 1564 } } // namespace v8::internal |
| 1560 | 1565 |
| 1561 #endif // V8_ISOLATE_H_ | 1566 #endif // V8_ISOLATE_H_ |
| OLD | NEW |