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

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

Issue 1834763004: Track loading happening in parallel with background compilation and abort compilation if necessary. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: comments Created 4 years, 8 months 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/flow_graph_inliner.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 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 void set_compilation_allowed(bool allowed) { 480 void set_compilation_allowed(bool allowed) {
481 compilation_allowed_ = allowed; 481 compilation_allowed_ = allowed;
482 } 482 }
483 483
484 // In precompilation we finalize all regular classes before compiling. 484 // In precompilation we finalize all regular classes before compiling.
485 bool all_classes_finalized() const { return all_classes_finalized_; } 485 bool all_classes_finalized() const { return all_classes_finalized_; }
486 void set_all_classes_finalized(bool value) { 486 void set_all_classes_finalized(bool value) {
487 all_classes_finalized_ = value; 487 all_classes_finalized_ = value;
488 } 488 }
489 489
490 // True during top level parsing.
491 bool IsTopLevelParsing() {
492 const intptr_t value =
493 AtomicOperations::LoadRelaxedIntPtr(&top_level_parsing_count_);
494 ASSERT(value >= 0);
495 return value > 0;
496 }
497
498 void IncrTopLevelParsingCount() {
499 AtomicOperations::IncrementBy(&top_level_parsing_count_, 1);
500 }
501 void DecrTopLevelParsingCount() {
502 AtomicOperations::DecrementBy(&top_level_parsing_count_, 1);
503 }
504
490 static const uint32_t kInvalidGen = 0; 505 static const uint32_t kInvalidGen = 0;
491 506
492 void IncrCHAInvalidationGen() { 507 void IncrFieldInvalidationGen() {
493 cha_invalidation_gen_++; 508 AtomicOperations::IncrementBy(&field_invalidation_gen_, 1);
494 if (cha_invalidation_gen_ == kInvalidGen) cha_invalidation_gen_++; 509 if (field_invalidation_gen_ == kInvalidGen) {
510 AtomicOperations::IncrementBy(&field_invalidation_gen_, 1);
511 }
495 } 512 }
496 void ResetCHAInvalidationGen() { cha_invalidation_gen_ = kInvalidGen; } 513 intptr_t field_invalidation_gen() const { return field_invalidation_gen_; }
497 uint32_t cha_invalidation_gen() const { return cha_invalidation_gen_; }
498 514
499 515 void IncrLoadingInvalidationGen() {
500 void IncrFieldInvalidationGen() { 516 AtomicOperations::IncrementBy(&loading_invalidation_gen_, 1);
501 field_invalidation_gen_++; 517 if (loading_invalidation_gen_ == kInvalidGen) {
502 if (field_invalidation_gen_ == kInvalidGen) field_invalidation_gen_++; 518 AtomicOperations::IncrementBy(&loading_invalidation_gen_, 1);
519 }
503 } 520 }
504 521 intptr_t loading_invalidation_gen() {
505 void ResetFieldInvalidationGen() { field_invalidation_gen_ = kInvalidGen; } 522 return AtomicOperations::LoadRelaxedIntPtr(&loading_invalidation_gen_);
506 uint32_t field_invalidation_gen() const { return field_invalidation_gen_; }
507
508 void IncrPrefixInvalidationGen() {
509 prefix_invalidation_gen_++;
510 if (prefix_invalidation_gen_ == kInvalidGen) prefix_invalidation_gen_++;
511 } 523 }
512 void ResetPrefixInvalidationGen() { prefix_invalidation_gen_ = kInvalidGen; }
513 uint32_t prefix_invalidation_gen() const { return prefix_invalidation_gen_; }
514 524
515 // Used by background compiler which field became boxed and must trigger 525 // Used by background compiler which field became boxed and must trigger
516 // deoptimization in the mutator thread. 526 // deoptimization in the mutator thread.
517 void AddDeoptimizingBoxedField(const Field& field); 527 void AddDeoptimizingBoxedField(const Field& field);
518 // Returns Field::null() if none available in the list. 528 // Returns Field::null() if none available in the list.
519 RawField* GetDeoptimizingBoxedField(); 529 RawField* GetDeoptimizingBoxedField();
520 530
521 RawObject* InvokePendingServiceExtensionCalls(); 531 RawObject* InvokePendingServiceExtensionCalls();
522 void AppendServiceExtensionCall(const Instance& closure, 532 void AppendServiceExtensionCall(const Instance& closure,
523 const String& method_name, 533 const String& method_name,
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 733
724 // Isolate list next pointer. 734 // Isolate list next pointer.
725 Isolate* next_; 735 Isolate* next_;
726 736
727 // Used to wake the isolate when it is in the pause event loop. 737 // Used to wake the isolate when it is in the pause event loop.
728 Monitor* pause_loop_monitor_; 738 Monitor* pause_loop_monitor_;
729 739
730 // Invalidation generations; used to track events occuring in parallel 740 // Invalidation generations; used to track events occuring in parallel
731 // to background compilation. The counters may overflow, which is OK 741 // to background compilation. The counters may overflow, which is OK
732 // since we check for equality to detect if an event occured. 742 // since we check for equality to detect if an event occured.
733 uint32_t cha_invalidation_gen_; 743 intptr_t field_invalidation_gen_;
734 uint32_t field_invalidation_gen_; 744 intptr_t loading_invalidation_gen_;
735 uint32_t prefix_invalidation_gen_; 745 intptr_t top_level_parsing_count_;
736 746
737 // Protect access to boxed_field_list_. 747 // Protect access to boxed_field_list_.
738 Mutex* boxed_field_list_mutex_; 748 Mutex* boxed_field_list_mutex_;
739 // List of fields that became boxed and that trigger deoptimization. 749 // List of fields that became boxed and that trigger deoptimization.
740 RawGrowableObjectArray* boxed_field_list_; 750 RawGrowableObjectArray* boxed_field_list_;
741 751
742 // This guards spawn_count_. An isolate cannot complete shutdown and be 752 // This guards spawn_count_. An isolate cannot complete shutdown and be
743 // destroyed while there are child isolates in the midst of a spawn. 753 // destroyed while there are child isolates in the midst of a spawn.
744 Monitor* spawn_count_monitor_; 754 Monitor* spawn_count_monitor_;
745 intptr_t spawn_count_; 755 intptr_t spawn_count_;
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
903 intptr_t* spawn_count_; 913 intptr_t* spawn_count_;
904 914
905 Dart_IsolateFlags isolate_flags_; 915 Dart_IsolateFlags isolate_flags_;
906 bool paused_; 916 bool paused_;
907 bool errors_are_fatal_; 917 bool errors_are_fatal_;
908 }; 918 };
909 919
910 } // namespace dart 920 } // namespace dart
911 921
912 #endif // VM_ISOLATE_H_ 922 #endif // VM_ISOLATE_H_
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_inliner.cc ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698