OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 RUNTIME_VM_THREAD_H_ | 5 #ifndef RUNTIME_VM_THREAD_H_ |
6 #define RUNTIME_VM_THREAD_H_ | 6 #define RUNTIME_VM_THREAD_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/atomic.h" | 10 #include "vm/atomic.h" |
11 #include "vm/bitfield.h" | 11 #include "vm/bitfield.h" |
12 #include "vm/globals.h" | 12 #include "vm/globals.h" |
13 #include "vm/handles.h" | 13 #include "vm/handles.h" |
14 #include "vm/os_thread.h" | 14 #include "vm/os_thread.h" |
15 #include "vm/store_buffer.h" | 15 #include "vm/store_buffer.h" |
16 #include "vm/runtime_entry_list.h" | 16 #include "vm/runtime_entry_list.h" |
17 | |
18 namespace dart { | 17 namespace dart { |
19 | 18 |
20 class AbstractType; | 19 class AbstractType; |
21 class ApiLocalScope; | 20 class ApiLocalScope; |
22 class Array; | 21 class Array; |
23 class CHA; | 22 class CHA; |
24 class Class; | 23 class Class; |
25 class Code; | 24 class Code; |
26 class CompilerStats; | 25 class CompilerStats; |
27 class Error; | 26 class Error; |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 void set_os_thread(OSThread* os_thread) { os_thread_ = os_thread; } | 258 void set_os_thread(OSThread* os_thread) { os_thread_ = os_thread; } |
260 | 259 |
261 // Monitor corresponding to this thread. | 260 // Monitor corresponding to this thread. |
262 Monitor* thread_lock() const { return thread_lock_; } | 261 Monitor* thread_lock() const { return thread_lock_; } |
263 | 262 |
264 // The topmost zone used for allocation in this thread. | 263 // The topmost zone used for allocation in this thread. |
265 Zone* zone() const { return zone_; } | 264 Zone* zone() const { return zone_; } |
266 | 265 |
267 bool ZoneIsOwnedByThread(Zone* zone) const; | 266 bool ZoneIsOwnedByThread(Zone* zone) const; |
268 | 267 |
269 void IncrementMemoryUsage(uintptr_t value) { | 268 void IncrementMemoryCapacity(uintptr_t value) { |
270 current_thread_memory_ += value; | 269 current_zone_capacity_ += value; |
271 if (current_thread_memory_ > memory_high_watermark_) { | 270 if (current_zone_capacity_ > zone_high_watermark_) { |
272 memory_high_watermark_ = current_thread_memory_; | 271 zone_high_watermark_ = current_zone_capacity_; |
273 } | 272 } |
274 } | 273 } |
275 | 274 |
276 void DecrementMemoryUsage(uintptr_t value) { | 275 void DecrementMemoryCapacity(uintptr_t value) { |
277 ASSERT(current_thread_memory_ >= value); | 276 ASSERT(current_zone_capacity_ >= value); |
278 current_thread_memory_ -= value; | 277 current_zone_capacity_ -= value; |
279 } | 278 } |
280 | 279 |
281 uintptr_t memory_high_watermark() const { return memory_high_watermark_; } | 280 uintptr_t current_zone_capacity() { return current_zone_capacity_; } |
282 | 281 |
283 void ResetHighWatermark() { memory_high_watermark_ = current_thread_memory_; } | 282 uintptr_t zone_high_watermark() const { return zone_high_watermark_; } |
| 283 |
| 284 void ResetHighWatermark() { zone_high_watermark_ = current_zone_capacity_; } |
284 | 285 |
285 // The reusable api local scope for this thread. | 286 // The reusable api local scope for this thread. |
286 ApiLocalScope* api_reusable_scope() const { return api_reusable_scope_; } | 287 ApiLocalScope* api_reusable_scope() const { return api_reusable_scope_; } |
287 void set_api_reusable_scope(ApiLocalScope* value) { | 288 void set_api_reusable_scope(ApiLocalScope* value) { |
288 ASSERT(value == NULL || api_reusable_scope_ == NULL); | 289 ASSERT(value == NULL || api_reusable_scope_ == NULL); |
289 api_reusable_scope_ = value; | 290 api_reusable_scope_ = value; |
290 } | 291 } |
291 | 292 |
292 // The api local scope for this thread, this where all local handles | 293 // The api local scope for this thread, this where all local handles |
293 // are allocated. | 294 // are allocated. |
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
710 #undef DECLARE_MEMBERS | 711 #undef DECLARE_MEMBERS |
711 | 712 |
712 #define DECLARE_MEMBERS(returntype, name, ...) uword name##_entry_point_; | 713 #define DECLARE_MEMBERS(returntype, name, ...) uword name##_entry_point_; |
713 LEAF_RUNTIME_ENTRY_LIST(DECLARE_MEMBERS) | 714 LEAF_RUNTIME_ENTRY_LIST(DECLARE_MEMBERS) |
714 #undef DECLARE_MEMBERS | 715 #undef DECLARE_MEMBERS |
715 | 716 |
716 TimelineStream* dart_stream_; | 717 TimelineStream* dart_stream_; |
717 OSThread* os_thread_; | 718 OSThread* os_thread_; |
718 Monitor* thread_lock_; | 719 Monitor* thread_lock_; |
719 Zone* zone_; | 720 Zone* zone_; |
720 uintptr_t current_thread_memory_; | 721 uintptr_t current_zone_capacity_; |
721 uintptr_t memory_high_watermark_; | 722 uintptr_t zone_high_watermark_; |
722 ApiLocalScope* api_reusable_scope_; | 723 ApiLocalScope* api_reusable_scope_; |
723 ApiLocalScope* api_top_scope_; | 724 ApiLocalScope* api_top_scope_; |
724 StackResource* top_resource_; | 725 StackResource* top_resource_; |
725 LongJumpScope* long_jump_base_; | 726 LongJumpScope* long_jump_base_; |
726 int32_t no_callback_scope_depth_; | 727 int32_t no_callback_scope_depth_; |
727 #if defined(DEBUG) | 728 #if defined(DEBUG) |
728 HandleScope* top_handle_scope_; | 729 HandleScope* top_handle_scope_; |
729 int32_t no_handle_scope_depth_; | 730 int32_t no_handle_scope_depth_; |
730 int32_t no_safepoint_scope_depth_; | 731 int32_t no_safepoint_scope_depth_; |
731 #endif | 732 #endif |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
796 #undef REUSABLE_FRIEND_DECLARATION | 797 #undef REUSABLE_FRIEND_DECLARATION |
797 | 798 |
798 friend class ApiZone; | 799 friend class ApiZone; |
799 friend class InterruptChecker; | 800 friend class InterruptChecker; |
800 friend class Isolate; | 801 friend class Isolate; |
801 friend class IsolateTestHelper; | 802 friend class IsolateTestHelper; |
802 friend class NoOOBMessageScope; | 803 friend class NoOOBMessageScope; |
803 friend class Simulator; | 804 friend class Simulator; |
804 friend class StackZone; | 805 friend class StackZone; |
805 friend class ThreadRegistry; | 806 friend class ThreadRegistry; |
806 | |
807 DISALLOW_COPY_AND_ASSIGN(Thread); | 807 DISALLOW_COPY_AND_ASSIGN(Thread); |
808 }; | 808 }; |
809 | 809 |
810 | 810 |
811 #if defined(HOST_OS_WINDOWS) | 811 #if defined(HOST_OS_WINDOWS) |
812 // Clears the state of the current thread and frees the allocation. | 812 // Clears the state of the current thread and frees the allocation. |
813 void WindowsThreadCleanUp(); | 813 void WindowsThreadCleanUp(); |
814 #endif | 814 #endif |
815 | 815 |
816 | 816 |
817 // Disable thread interrupts. | 817 // Disable thread interrupts. |
818 class DisableThreadInterruptsScope : public StackResource { | 818 class DisableThreadInterruptsScope : public StackResource { |
819 public: | 819 public: |
820 explicit DisableThreadInterruptsScope(Thread* thread); | 820 explicit DisableThreadInterruptsScope(Thread* thread); |
821 ~DisableThreadInterruptsScope(); | 821 ~DisableThreadInterruptsScope(); |
822 }; | 822 }; |
823 | 823 |
824 } // namespace dart | 824 } // namespace dart |
825 | 825 |
826 #endif // RUNTIME_VM_THREAD_H_ | 826 #endif // RUNTIME_VM_THREAD_H_ |
OLD | NEW |