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

Side by Side Diff: pkg/analyzer/lib/src/context/cache.dart

Issue 2297343002: Flush results when contexts are made idle. (Closed)
Patch Set: Un-fail completion tests. Created 4 years, 3 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
OLDNEW
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:async'; 7 import 'dart:async';
8 import 'dart:collection'; 8 import 'dart:collection';
9 9
10 import 'package:analyzer/file_system/file_system.dart'; 10 import 'package:analyzer/file_system/file_system.dart';
(...skipping 922 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 /** 933 /**
934 * The current maximum cache size. 934 * The current maximum cache size.
935 */ 935 */
936 int maxSize; 936 int maxSize;
937 937
938 CacheFlushManager( 938 CacheFlushManager(
939 ResultCachingPolicy<T> policy, this.isPriorityAnalysisTarget) 939 ResultCachingPolicy<T> policy, this.isPriorityAnalysisTarget)
940 : policy = policy, 940 : policy = policy,
941 maxActiveSize = policy.maxActiveSize, 941 maxActiveSize = policy.maxActiveSize,
942 maxIdleSize = policy.maxIdleSize, 942 maxIdleSize = policy.maxIdleSize,
943 maxSize = policy.maxIdleSize; 943 maxSize = policy.maxActiveSize;
944 944
945 /** 945 /**
946 * If [currentSize] is already less than [maxSize], returns an empty list. 946 * If [currentSize] is already less than [maxSize], returns an empty list.
947 * Otherwise returns [TargetedResult]s to flush from the cache to make 947 * Otherwise returns [TargetedResult]s to flush from the cache to make
948 * [currentSize] less or equal to [maxSize]. 948 * [currentSize] less or equal to [maxSize].
949 * 949 *
950 * Results for priority files are never flushed, so this method might leave 950 * Results for priority files are never flushed, so this method might leave
951 * [currentSize] greater than [maxSize]. 951 * [currentSize] greater than [maxSize].
952 */ 952 */
953 List<TargetedResult> flushToSize() { 953 List<TargetedResult> flushToSize() {
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 */ 1074 */
1075 final Map<String, List<Source>> pathToSource = <String, List<Source>>{}; 1075 final Map<String, List<Source>> pathToSource = <String, List<Source>>{};
1076 1076
1077 /** 1077 /**
1078 * Initialize a newly created cache partition, belonging to the given 1078 * Initialize a newly created cache partition, belonging to the given
1079 * [context]. 1079 * [context].
1080 */ 1080 */
1081 CachePartition(this.context); 1081 CachePartition(this.context);
1082 1082
1083 /** 1083 /**
1084 * Specify whether a context that uses this partition is being analyzed.
1085 */
1086 set isActive(bool active) {
1087 for (CacheFlushManager manager in _flushManagerMap.values) {
1088 if (active) {
1089 manager.madeActive();
1090 } else {
1091 List<TargetedResult> resultsToFlush = manager.madeIdle();
1092 _flushResults(resultsToFlush);
1093 }
1094 }
1095 }
1096
1097 /**
1084 * Notifies the partition that the client is going to stop using it. 1098 * Notifies the partition that the client is going to stop using it.
1085 */ 1099 */
1086 void dispose() { 1100 void dispose() {
1087 for (CacheEntry entry in entryMap.values) { 1101 for (CacheEntry entry in entryMap.values) {
1088 entry.dispose(); 1102 entry.dispose();
1089 } 1103 }
1090 entryMap.clear(); 1104 entryMap.clear();
1091 sources.clear(); 1105 sources.clear();
1092 pathToSource.clear(); 1106 pathToSource.clear();
1093 } 1107 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1169 flushManager.resultAccessed(result); 1183 flushManager.resultAccessed(result);
1170 } 1184 }
1171 1185
1172 /** 1186 /**
1173 * Records that the given [result] was just stored into the cache. 1187 * Records that the given [result] was just stored into the cache.
1174 */ 1188 */
1175 void resultStored(TargetedResult result, Object value) { 1189 void resultStored(TargetedResult result, Object value) {
1176 CacheFlushManager flushManager = _getFlushManager(result.result); 1190 CacheFlushManager flushManager = _getFlushManager(result.result);
1177 List<TargetedResult> resultsToFlush = 1191 List<TargetedResult> resultsToFlush =
1178 flushManager.resultStored(result, value); 1192 flushManager.resultStored(result, value);
1179 for (TargetedResult result in resultsToFlush) { 1193 _flushResults(resultsToFlush);
1180 CacheEntry entry = get(result.target);
1181 if (entry != null) {
1182 ResultData data = entry._resultMap[result.result];
1183 if (data != null) {
1184 data.flush();
1185 }
1186 }
1187 }
1188 } 1194 }
1189 1195
1190 /** 1196 /**
1191 * Return the number of targets that are mapped to cache entries. 1197 * Return the number of targets that are mapped to cache entries.
1192 */ 1198 */
1193 int size() => entryMap.length; 1199 int size() => entryMap.length;
1194 1200
1195 /** 1201 /**
1196 * If the given [target] is a [Source], adds it to [sources]. 1202 * If the given [target] is a [Source], adds it to [sources].
1197 */ 1203 */
1198 void _addIfSource(AnalysisTarget target) { 1204 void _addIfSource(AnalysisTarget target) {
1199 if (target is Source) { 1205 if (target is Source) {
1200 sources.add(target); 1206 sources.add(target);
1201 String fullName = target.fullName; 1207 String fullName = target.fullName;
1202 pathToSource.putIfAbsent(fullName, () => <Source>[]).add(target); 1208 pathToSource.putIfAbsent(fullName, () => <Source>[]).add(target);
1203 } 1209 }
1204 } 1210 }
1205 1211
1206 /** 1212 /**
1213 * Flush the given [resultsToFlush].
1214 */
1215 void _flushResults(List<TargetedResult> resultsToFlush) {
1216 for (TargetedResult result in resultsToFlush) {
1217 CacheEntry entry = get(result.target);
1218 if (entry != null) {
1219 ResultData data = entry._resultMap[result.result];
1220 if (data != null) {
1221 data.flush();
1222 }
1223 }
1224 }
1225 }
1226
1227 /**
1207 * Return the [CacheFlushManager] for the given [descriptor], not `null`. 1228 * Return the [CacheFlushManager] for the given [descriptor], not `null`.
1208 */ 1229 */
1209 CacheFlushManager _getFlushManager(ResultDescriptor descriptor) { 1230 CacheFlushManager _getFlushManager(ResultDescriptor descriptor) {
1210 ResultCachingPolicy policy = descriptor.cachingPolicy; 1231 ResultCachingPolicy policy = descriptor.cachingPolicy;
1211 if (identical(policy, DEFAULT_CACHING_POLICY)) { 1232 if (identical(policy, DEFAULT_CACHING_POLICY)) {
1212 return UnlimitedCacheFlushManager.INSTANCE; 1233 return UnlimitedCacheFlushManager.INSTANCE;
1213 } 1234 }
1214 CacheFlushManager manager = _flushManagerMap[policy]; 1235 CacheFlushManager manager = _flushManagerMap[policy];
1215 if (manager == null) { 1236 if (manager == null) {
1216 manager = new CacheFlushManager(policy, _isPriorityAnalysisTarget); 1237 manager = new CacheFlushManager(policy, _isPriorityAnalysisTarget);
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
1518 void resultAccessed(TargetedResult result) {} 1539 void resultAccessed(TargetedResult result) {}
1519 1540
1520 @override 1541 @override
1521 List<TargetedResult> resultStored(TargetedResult newResult, newValue) { 1542 List<TargetedResult> resultStored(TargetedResult newResult, newValue) {
1522 return TargetedResult.EMPTY_LIST; 1543 return TargetedResult.EMPTY_LIST;
1523 } 1544 }
1524 1545
1525 @override 1546 @override
1526 void targetRemoved(AnalysisTarget target) {} 1547 void targetRemoved(AnalysisTarget target) {}
1527 } 1548 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/operation/operation_analysis.dart ('k') | pkg/analyzer/lib/src/context/context.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698