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 library analyzer.src.context.cache; | 5 library analyzer.src.context.cache; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 | 8 |
9 import 'package:analyzer/src/generated/engine.dart' | 9 import 'package:analyzer/src/generated/engine.dart' |
10 show AnalysisEngine, CacheState, InternalAnalysisContext, RetentionPriority; | 10 show AnalysisEngine, CacheState, InternalAnalysisContext, RetentionPriority; |
(...skipping 22 matching lines...) Expand all Loading... |
33 * An array containing the partitions of which this cache is comprised. | 33 * An array containing the partitions of which this cache is comprised. |
34 */ | 34 */ |
35 final List<CachePartition> _partitions; | 35 final List<CachePartition> _partitions; |
36 | 36 |
37 /** | 37 /** |
38 * Initialize a newly created cache to have the given [partitions]. The | 38 * Initialize a newly created cache to have the given [partitions]. The |
39 * partitions will be searched in the order in which they appear in the array, | 39 * partitions will be searched in the order in which they appear in the array, |
40 * so the most specific partition (usually an [SdkCachePartition]) should be | 40 * so the most specific partition (usually an [SdkCachePartition]) should be |
41 * first and the most general (usually a [UniversalCachePartition]) last. | 41 * first and the most general (usually a [UniversalCachePartition]) last. |
42 */ | 42 */ |
43 AnalysisCache(this._partitions) { | 43 AnalysisCache(this._partitions); |
44 for (CachePartition partition in _partitions) { | |
45 partition._cache = this; | |
46 } | |
47 } | |
48 | 44 |
49 // TODO(brianwilkerson) Implement or delete this. | 45 // TODO(brianwilkerson) Implement or delete this. |
50 // /** | 46 // /** |
51 // * Return information about each of the partitions in this cache. | 47 // * Return information about each of the partitions in this cache. |
52 // */ | 48 // */ |
53 // List<AnalysisContextStatistics_PartitionData> get partitionData { | 49 // List<AnalysisContextStatistics_PartitionData> get partitionData { |
54 // int count = _partitions.length; | 50 // int count = _partitions.length; |
55 // List<AnalysisContextStatistics_PartitionData> data = | 51 // List<AnalysisContextStatistics_PartitionData> data = |
56 // new List<AnalysisContextStatistics_PartitionData>(count); | 52 // new List<AnalysisContextStatistics_PartitionData>(count); |
57 // for (int i = 0; i < count; i++) { | 53 // for (int i = 0; i < count; i++) { |
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 } | 594 } |
599 recentlyUsed.removeAll(resultsToRemove); | 595 recentlyUsed.removeAll(resultsToRemove); |
600 } | 596 } |
601 } | 597 } |
602 | 598 |
603 /** | 599 /** |
604 * A single partition in an LRU cache of information related to analysis. | 600 * A single partition in an LRU cache of information related to analysis. |
605 */ | 601 */ |
606 abstract class CachePartition { | 602 abstract class CachePartition { |
607 /** | 603 /** |
608 * The [AnalysisCache] that owns this partition. | |
609 * | |
610 * TODO(scheglov) It seems wrong. Partitions may be shared between caches. | |
611 * But we need a way to go from every "enclosing" partition into "enclosed" | |
612 * ones. | |
613 */ | |
614 AnalysisCache _cache; | |
615 | |
616 /** | |
617 * The context that owns this partition. Multiple contexts can reference a | 604 * The context that owns this partition. Multiple contexts can reference a |
618 * partition, but only one context can own it. | 605 * partition, but only one context can own it. |
619 */ | 606 */ |
620 final InternalAnalysisContext context; | 607 final InternalAnalysisContext context; |
621 | 608 |
622 /** | 609 /** |
623 * A table mapping caching policies to the cache flush managers. | 610 * A table mapping caching policies to the cache flush managers. |
624 */ | 611 */ |
625 final HashMap<ResultCachingPolicy, CacheFlushManager> _flushManagerMap = | 612 final HashMap<ResultCachingPolicy, CacheFlushManager> _flushManagerMap = |
626 new HashMap<ResultCachingPolicy, CacheFlushManager>(); | 613 new HashMap<ResultCachingPolicy, CacheFlushManager>(); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 data.flush(); | 700 data.flush(); |
714 } | 701 } |
715 } | 702 } |
716 | 703 |
717 /** | 704 /** |
718 * Return the number of targets that are mapped to cache entries. | 705 * Return the number of targets that are mapped to cache entries. |
719 */ | 706 */ |
720 int size() => _targetMap.length; | 707 int size() => _targetMap.length; |
721 | 708 |
722 ResultData _getDataFor(TargetedResult result) { | 709 ResultData _getDataFor(TargetedResult result) { |
723 return _cache._getDataFor(result); | 710 return context.analysisCache._getDataFor(result); |
724 } | 711 } |
725 | 712 |
726 /** | 713 /** |
727 * Return the [CacheFlushManager] for the given [descriptor], not `null`. | 714 * Return the [CacheFlushManager] for the given [descriptor], not `null`. |
728 */ | 715 */ |
729 CacheFlushManager _getFlushManager(ResultDescriptor descriptor) { | 716 CacheFlushManager _getFlushManager(ResultDescriptor descriptor) { |
730 ResultCachingPolicy policy = descriptor.cachingPolicy; | 717 ResultCachingPolicy policy = descriptor.cachingPolicy; |
731 return _flushManagerMap.putIfAbsent( | 718 return _flushManagerMap.putIfAbsent( |
732 policy, () => new CacheFlushManager(policy, _isPriorityAnalysisTarget)); | 719 policy, () => new CacheFlushManager(policy, _isPriorityAnalysisTarget)); |
733 } | 720 } |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
853 */ | 840 */ |
854 class SdkCachePartition extends CachePartition { | 841 class SdkCachePartition extends CachePartition { |
855 /** | 842 /** |
856 * Initialize a newly created cache partition, belonging to the given | 843 * Initialize a newly created cache partition, belonging to the given |
857 * [context]. | 844 * [context]. |
858 */ | 845 */ |
859 SdkCachePartition(InternalAnalysisContext context) : super(context); | 846 SdkCachePartition(InternalAnalysisContext context) : super(context); |
860 | 847 |
861 @override | 848 @override |
862 bool contains(AnalysisTarget target) { | 849 bool contains(AnalysisTarget target) { |
| 850 if (target is AnalysisContextTarget) { |
| 851 return true; |
| 852 } |
863 Source source = target.source; | 853 Source source = target.source; |
864 return source != null && source.isInSystemLibrary; | 854 return source != null && source.isInSystemLibrary; |
865 } | 855 } |
866 } | 856 } |
867 | 857 |
868 /** | 858 /** |
869 * A specification of a specific result computed for a specific target. | 859 * A specification of a specific result computed for a specific target. |
870 */ | 860 */ |
871 class TargetedResult { | 861 class TargetedResult { |
872 /** | 862 /** |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
911 class UniversalCachePartition extends CachePartition { | 901 class UniversalCachePartition extends CachePartition { |
912 /** | 902 /** |
913 * Initialize a newly created cache partition, belonging to the given | 903 * Initialize a newly created cache partition, belonging to the given |
914 * [context]. | 904 * [context]. |
915 */ | 905 */ |
916 UniversalCachePartition(InternalAnalysisContext context) : super(context); | 906 UniversalCachePartition(InternalAnalysisContext context) : super(context); |
917 | 907 |
918 @override | 908 @override |
919 bool contains(AnalysisTarget target) => true; | 909 bool contains(AnalysisTarget target) => true; |
920 } | 910 } |
OLD | NEW |