Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Side by Side Diff: runtime/vm/isolate.h

Issue 1418813008: This adds a mechanism to invalidate code that was generated in the background. The invalidation can… (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: sync Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/compiler.cc ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 596 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 void set_current_tag(const UserTag& tag); 607 void set_current_tag(const UserTag& tag);
608 608
609 RawUserTag* default_tag() const { return default_tag_; } 609 RawUserTag* default_tag() const { return default_tag_; }
610 void set_default_tag(const UserTag& tag); 610 void set_default_tag(const UserTag& tag);
611 611
612 RawGrowableObjectArray* compilation_function_queue() const { 612 RawGrowableObjectArray* compilation_function_queue() const {
613 return compilation_function_queue_; 613 return compilation_function_queue_;
614 } 614 }
615 void set_compilation_function_queue(const GrowableObjectArray& value); 615 void set_compilation_function_queue(const GrowableObjectArray& value);
616 616
617 RawGrowableObjectArray* compilation_code_queue() const { 617 RawGrowableObjectArray* compilation_result_queue() const {
618 return compilation_code_queue_; 618 return compilation_result_queue_;
619 } 619 }
620 void set_compilation_code_queue(const GrowableObjectArray& value); 620 void set_compilation_result_queue(const GrowableObjectArray& value);
621 621
622 Metric* metrics_list_head() { 622 Metric* metrics_list_head() {
623 return metrics_list_head_; 623 return metrics_list_head_;
624 } 624 }
625 625
626 void set_metrics_list_head(Metric* metric) { 626 void set_metrics_list_head(Metric* metric) {
627 metrics_list_head_ = metric; 627 metrics_list_head_ = metric;
628 } 628 }
629 629
630 RawGrowableObjectArray* deoptimized_code_array() const { 630 RawGrowableObjectArray* deoptimized_code_array() const {
631 return deoptimized_code_array_; 631 return deoptimized_code_array_;
632 } 632 }
633 void set_deoptimized_code_array(const GrowableObjectArray& value); 633 void set_deoptimized_code_array(const GrowableObjectArray& value);
634 void TrackDeoptimizedCode(const Code& code); 634 void TrackDeoptimizedCode(const Code& code);
635 635
636 bool compilation_allowed() const { return compilation_allowed_; } 636 bool compilation_allowed() const { return compilation_allowed_; }
637 void set_compilation_allowed(bool allowed) { 637 void set_compilation_allowed(bool allowed) {
638 compilation_allowed_ = allowed; 638 compilation_allowed_ = allowed;
639 } 639 }
640 640
641 // In precompilation we finalize all regular classes before compiling. 641 // In precompilation we finalize all regular classes before compiling.
642 bool all_classes_finalized() const { return all_classes_finalized_; } 642 bool all_classes_finalized() const { return all_classes_finalized_; }
643 void set_all_classes_finalized(bool value) { 643 void set_all_classes_finalized(bool value) {
644 all_classes_finalized_ = value; 644 all_classes_finalized_ = value;
645 } 645 }
646 646
647 void IncrCHAInvalidationGen() { cha_invalidation_gen_++; }
648 void ResetCHAInvalidationGen() { cha_invalidation_gen_ = 0; }
649 uint32_t cha_invalidation_gen() const { return cha_invalidation_gen_; }
650
651 void IncrFieldInvalidationGen() { field_invalidation_gen_++; }
652 void ResetFieldInvalidationGen() { field_invalidation_gen_ = 0; }
653 uint32_t field_invalidation_gen() const { return field_invalidation_gen_; }
654
655 void IncrPrefixInvalidationGen() { prefix_invalidation_gen_++; }
656 void ResetPrefixInvalidationGen() { prefix_invalidation_gen_ = 0; }
657 uint32_t prefix_invalidation_gen() const { return prefix_invalidation_gen_; }
658
647 RawObject* InvokePendingServiceExtensionCalls(); 659 RawObject* InvokePendingServiceExtensionCalls();
648 void AppendServiceExtensionCall(const Instance& closure, 660 void AppendServiceExtensionCall(const Instance& closure,
649 const String& method_name, 661 const String& method_name,
650 const Array& parameter_keys, 662 const Array& parameter_keys,
651 const Array& parameter_values, 663 const Array& parameter_values,
652 const Instance& reply_port, 664 const Instance& reply_port,
653 const Instance& id); 665 const Instance& id);
654 void RegisterServiceExtensionHandler(const String& name, 666 void RegisterServiceExtensionHandler(const String& name,
655 const Instance& closure); 667 const Instance& closure);
656 RawInstance* LookupServiceExtensionHandler(const String& name); 668 RawInstance* LookupServiceExtensionHandler(const String& name);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 Mutex profiler_data_mutex_; 810 Mutex profiler_data_mutex_;
799 811
800 VMTagCounters vm_tag_counters_; 812 VMTagCounters vm_tag_counters_;
801 RawGrowableObjectArray* tag_table_; 813 RawGrowableObjectArray* tag_table_;
802 814
803 RawGrowableObjectArray* deoptimized_code_array_; 815 RawGrowableObjectArray* deoptimized_code_array_;
804 816
805 // Background compilation. 817 // Background compilation.
806 BackgroundCompiler* background_compiler_; 818 BackgroundCompiler* background_compiler_;
807 RawGrowableObjectArray* compilation_function_queue_; 819 RawGrowableObjectArray* compilation_function_queue_;
808 RawGrowableObjectArray* compilation_code_queue_; 820 RawGrowableObjectArray* compilation_result_queue_;
809 821
810 // We use 6 list entries for each pending service extension calls. 822 // We use 6 list entries for each pending service extension calls.
811 enum { 823 enum {
812 kPendingHandlerIndex = 0, 824 kPendingHandlerIndex = 0,
813 kPendingMethodNameIndex, 825 kPendingMethodNameIndex,
814 kPendingKeysIndex, 826 kPendingKeysIndex,
815 kPendingValuesIndex, 827 kPendingValuesIndex,
816 kPendingReplyPortIndex, 828 kPendingReplyPortIndex,
817 kPendingIdIndex, 829 kPendingIdIndex,
818 kPendingEntrySize 830 kPendingEntrySize
(...skipping 12 matching lines...) Expand all
831 843
832 bool compilation_allowed_; 844 bool compilation_allowed_;
833 bool all_classes_finalized_; 845 bool all_classes_finalized_;
834 846
835 // Isolate list next pointer. 847 // Isolate list next pointer.
836 Isolate* next_; 848 Isolate* next_;
837 849
838 // Used to wake the isolate when it is in the pause event loop. 850 // Used to wake the isolate when it is in the pause event loop.
839 Monitor* pause_loop_monitor_; 851 Monitor* pause_loop_monitor_;
840 852
853 // Invalidation generations; used to track events occuring in parallel
854 // to background compilation. The counters may overflow, which is OK
855 // since we check for equality to detect if an event occured.
856 uint32_t cha_invalidation_gen_;
857 uint32_t field_invalidation_gen_;
858 uint32_t prefix_invalidation_gen_;
859
841 #define ISOLATE_METRIC_VARIABLE(type, variable, name, unit) \ 860 #define ISOLATE_METRIC_VARIABLE(type, variable, name, unit) \
842 type metric_##variable##_; 861 type metric_##variable##_;
843 ISOLATE_METRIC_LIST(ISOLATE_METRIC_VARIABLE); 862 ISOLATE_METRIC_LIST(ISOLATE_METRIC_VARIABLE);
844 #undef ISOLATE_METRIC_VARIABLE 863 #undef ISOLATE_METRIC_VARIABLE
845 864
846 #define ISOLATE_TIMELINE_STREAM_VARIABLE(name, not_used) \ 865 #define ISOLATE_TIMELINE_STREAM_VARIABLE(name, not_used) \
847 TimelineStream stream_##name##_; 866 TimelineStream stream_##name##_;
848 ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_VARIABLE) 867 ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_VARIABLE)
849 #undef ISOLATE_TIMELINE_STREAM_VARIABLE 868 #undef ISOLATE_TIMELINE_STREAM_VARIABLE
850 869
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 uint8_t* serialized_message_; 1043 uint8_t* serialized_message_;
1025 intptr_t serialized_message_len_; 1044 intptr_t serialized_message_len_;
1026 Isolate::Flags isolate_flags_; 1045 Isolate::Flags isolate_flags_;
1027 bool paused_; 1046 bool paused_;
1028 bool errors_are_fatal_; 1047 bool errors_are_fatal_;
1029 }; 1048 };
1030 1049
1031 } // namespace dart 1050 } // namespace dart
1032 1051
1033 #endif // VM_ISOLATE_H_ 1052 #endif // VM_ISOLATE_H_
OLDNEW
« no previous file with comments | « runtime/vm/compiler.cc ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698