OLD | NEW |
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 "vm/atomic.h" | 10 #include "vm/atomic.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 class ObjectStore; | 46 class ObjectStore; |
47 class RawInstance; | 47 class RawInstance; |
48 class RawArray; | 48 class RawArray; |
49 class RawContext; | 49 class RawContext; |
50 class RawDouble; | 50 class RawDouble; |
51 class RawGrowableObjectArray; | 51 class RawGrowableObjectArray; |
52 class RawMint; | 52 class RawMint; |
53 class RawObject; | 53 class RawObject; |
54 class RawInteger; | 54 class RawInteger; |
55 class RawError; | 55 class RawError; |
| 56 class RawField; |
56 class RawFloat32x4; | 57 class RawFloat32x4; |
57 class RawInt32x4; | 58 class RawInt32x4; |
58 class RawUserTag; | 59 class RawUserTag; |
59 class SafepointHandler; | 60 class SafepointHandler; |
60 class SampleBuffer; | 61 class SampleBuffer; |
61 class SendPort; | 62 class SendPort; |
62 class ServiceIdZone; | 63 class ServiceIdZone; |
63 class Simulator; | 64 class Simulator; |
64 class StackResource; | 65 class StackResource; |
65 class StackZone; | 66 class StackZone; |
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
635 void ResetFieldInvalidationGen() { field_invalidation_gen_ = kInvalidGen; } | 636 void ResetFieldInvalidationGen() { field_invalidation_gen_ = kInvalidGen; } |
636 uint32_t field_invalidation_gen() const { return field_invalidation_gen_; } | 637 uint32_t field_invalidation_gen() const { return field_invalidation_gen_; } |
637 | 638 |
638 void IncrPrefixInvalidationGen() { | 639 void IncrPrefixInvalidationGen() { |
639 prefix_invalidation_gen_++; | 640 prefix_invalidation_gen_++; |
640 if (prefix_invalidation_gen_ == kInvalidGen) prefix_invalidation_gen_++; | 641 if (prefix_invalidation_gen_ == kInvalidGen) prefix_invalidation_gen_++; |
641 } | 642 } |
642 void ResetPrefixInvalidationGen() { prefix_invalidation_gen_ = kInvalidGen; } | 643 void ResetPrefixInvalidationGen() { prefix_invalidation_gen_ = kInvalidGen; } |
643 uint32_t prefix_invalidation_gen() const { return prefix_invalidation_gen_; } | 644 uint32_t prefix_invalidation_gen() const { return prefix_invalidation_gen_; } |
644 | 645 |
| 646 // Used by background compiler which field became boxed and must trigger |
| 647 // deoptimization in the mutator thread. |
| 648 void AddDeoptimizingBoxedField(const Field& field); |
| 649 // Returns Field::null() if none available in the list. |
| 650 RawField* GetDeoptimizingBoxedField(); |
| 651 |
645 RawObject* InvokePendingServiceExtensionCalls(); | 652 RawObject* InvokePendingServiceExtensionCalls(); |
646 void AppendServiceExtensionCall(const Instance& closure, | 653 void AppendServiceExtensionCall(const Instance& closure, |
647 const String& method_name, | 654 const String& method_name, |
648 const Array& parameter_keys, | 655 const Array& parameter_keys, |
649 const Array& parameter_values, | 656 const Array& parameter_values, |
650 const Instance& reply_port, | 657 const Instance& reply_port, |
651 const Instance& id); | 658 const Instance& id); |
652 void RegisterServiceExtensionHandler(const String& name, | 659 void RegisterServiceExtensionHandler(const String& name, |
653 const Instance& closure); | 660 const Instance& closure); |
654 RawInstance* LookupServiceExtensionHandler(const String& name); | 661 RawInstance* LookupServiceExtensionHandler(const String& name); |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
837 // Used to wake the isolate when it is in the pause event loop. | 844 // Used to wake the isolate when it is in the pause event loop. |
838 Monitor* pause_loop_monitor_; | 845 Monitor* pause_loop_monitor_; |
839 | 846 |
840 // Invalidation generations; used to track events occuring in parallel | 847 // Invalidation generations; used to track events occuring in parallel |
841 // to background compilation. The counters may overflow, which is OK | 848 // to background compilation. The counters may overflow, which is OK |
842 // since we check for equality to detect if an event occured. | 849 // since we check for equality to detect if an event occured. |
843 uint32_t cha_invalidation_gen_; | 850 uint32_t cha_invalidation_gen_; |
844 uint32_t field_invalidation_gen_; | 851 uint32_t field_invalidation_gen_; |
845 uint32_t prefix_invalidation_gen_; | 852 uint32_t prefix_invalidation_gen_; |
846 | 853 |
| 854 // Protect access to boxed_field_list_. |
| 855 Monitor* boxed_field_list_monitor_; |
| 856 // List of fields that became boxed and that trigger deoptimization. |
| 857 RawGrowableObjectArray* boxed_field_list_; |
| 858 |
847 // This guards spawn_count_. An isolate cannot complete shutdown and be | 859 // This guards spawn_count_. An isolate cannot complete shutdown and be |
848 // destroyed while there are child isolates in the midst of a spawn. | 860 // destroyed while there are child isolates in the midst of a spawn. |
849 Monitor* spawn_count_monitor_; | 861 Monitor* spawn_count_monitor_; |
850 intptr_t spawn_count_; | 862 intptr_t spawn_count_; |
851 | 863 |
852 #define ISOLATE_METRIC_VARIABLE(type, variable, name, unit) \ | 864 #define ISOLATE_METRIC_VARIABLE(type, variable, name, unit) \ |
853 type metric_##variable##_; | 865 type metric_##variable##_; |
854 ISOLATE_METRIC_LIST(ISOLATE_METRIC_VARIABLE); | 866 ISOLATE_METRIC_LIST(ISOLATE_METRIC_VARIABLE); |
855 #undef ISOLATE_METRIC_VARIABLE | 867 #undef ISOLATE_METRIC_VARIABLE |
856 | 868 |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1020 intptr_t* spawn_count_; | 1032 intptr_t* spawn_count_; |
1021 | 1033 |
1022 Isolate::Flags isolate_flags_; | 1034 Isolate::Flags isolate_flags_; |
1023 bool paused_; | 1035 bool paused_; |
1024 bool errors_are_fatal_; | 1036 bool errors_are_fatal_; |
1025 }; | 1037 }; |
1026 | 1038 |
1027 } // namespace dart | 1039 } // namespace dart |
1028 | 1040 |
1029 #endif // VM_ISOLATE_H_ | 1041 #endif // VM_ISOLATE_H_ |
OLD | NEW |