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

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

Issue 2267273004: Use FlushTargetFilter to pre-filter targets before checking their results. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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';
11 import 'package:analyzer/src/generated/engine.dart'; 11 import 'package:analyzer/src/generated/engine.dart';
12 import 'package:analyzer/src/generated/java_engine.dart'; 12 import 'package:analyzer/src/generated/java_engine.dart';
13 import 'package:analyzer/src/generated/source.dart'; 13 import 'package:analyzer/src/generated/source.dart';
14 import 'package:analyzer/src/generated/utilities_collection.dart'; 14 import 'package:analyzer/src/generated/utilities_collection.dart';
15 import 'package:analyzer/src/task/model.dart'; 15 import 'package:analyzer/src/task/model.dart';
16 import 'package:analyzer/task/model.dart'; 16 import 'package:analyzer/task/model.dart';
17 17
18 /** 18 /**
19 * The cache results visiting function type. 19 * The cache results visiting function type.
20 */ 20 */
21 typedef void CacheResultVisitor(AnalysisTarget target, ResultData data); 21 typedef void CacheResultVisitor(AnalysisTarget target, ResultData data);
22 22
23 /** 23 /**
24 * Return `true` if the [result] of the [target] should be flushed. 24 * Return `true` if the [result] of the [target] should be flushed.
25 */ 25 */
26 typedef bool FlushResultFilter<V>( 26 typedef bool FlushResultFilter<V>(
27 AnalysisTarget target, ResultDescriptor<V> result); 27 AnalysisTarget target, ResultDescriptor<V> result);
28 28
29 /** 29 /**
30 * Return `true` if some results of the [target] should be flushed.
31 */
32 typedef bool FlushTargetFilter<V>(AnalysisTarget target);
33
34 /**
30 * Return `true` if the given [target] is a priority one. 35 * Return `true` if the given [target] is a priority one.
31 */ 36 */
32 typedef bool IsPriorityAnalysisTarget(AnalysisTarget target); 37 typedef bool IsPriorityAnalysisTarget(AnalysisTarget target);
33 38
34 /** 39 /**
35 * An LRU cache of results produced by analysis. 40 * An LRU cache of results produced by analysis.
36 */ 41 */
37 class AnalysisCache { 42 class AnalysisCache {
38 /** 43 /**
39 * A flag used to control whether trace information should be produced when 44 * A flag used to control whether trace information should be produced when
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 for (ReentrantSynchronousStreamSubscription subscription 111 for (ReentrantSynchronousStreamSubscription subscription
107 in onResultInvalidatedPartitionSubscriptions) { 112 in onResultInvalidatedPartitionSubscriptions) {
108 subscription.cancel(); 113 subscription.cancel();
109 } 114 }
110 for (CachePartition partition in _partitions) { 115 for (CachePartition partition in _partitions) {
111 partition.containingCaches.remove(this); 116 partition.containingCaches.remove(this);
112 } 117 }
113 } 118 }
114 119
115 /** 120 /**
116 * Flush results that satisfy the given [filter]. 121 * Flush results that satisfy the given [targetFilter] and [resultFilter].
117 */ 122 */
118 void flush(FlushResultFilter filter) { 123 void flush(FlushTargetFilter targetFilter, FlushResultFilter resultFilter) {
119 for (CachePartition partition in _partitions) { 124 for (CachePartition partition in _partitions) {
120 partition.flush(filter); 125 partition.flush(targetFilter, resultFilter);
121 } 126 }
122 } 127 }
123 128
124 /** 129 /**
125 * Return the entry associated with the given [target]. 130 * Return the entry associated with the given [target].
126 */ 131 */
127 CacheEntry get(AnalysisTarget target) { 132 CacheEntry get(AnalysisTarget target) {
128 int count = _partitions.length; 133 int count = _partitions.length;
129 for (int i = 0; i < count; i++) { 134 for (int i = 0; i < count; i++) {
130 CachePartition partition = _partitions[i]; 135 CachePartition partition = _partitions[i];
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 /** 403 /**
399 * Fix the state of the [exception] to match the current state of the entry. 404 * Fix the state of the [exception] to match the current state of the entry.
400 */ 405 */
401 void fixExceptionState() { 406 void fixExceptionState() {
402 if (!hasErrorState()) { 407 if (!hasErrorState()) {
403 _exception = null; 408 _exception = null;
404 } 409 }
405 } 410 }
406 411
407 /** 412 /**
408 * Flush results that satisfy the given [filter]. 413 * Flush results that satisfy the given [targetFilter] and [resultFilter].
409 */ 414 */
410 void flush(FlushResultFilter filter) { 415 void flush(FlushTargetFilter targetFilter, FlushResultFilter resultFilter) {
411 _resultMap.forEach((ResultDescriptor result, ResultData data) { 416 if (targetFilter(target)) {
412 if (data.state == CacheState.VALID) { 417 _resultMap.forEach((ResultDescriptor result, ResultData data) {
413 if (filter(target, result)) { 418 if (data.state == CacheState.VALID) {
414 data.flush(); 419 if (resultFilter(target, result)) {
420 data.flush();
421 }
415 } 422 }
416 } 423 });
417 }); 424 }
418 } 425 }
419 426
420 /** 427 /**
421 * Return the result data associated with the [descriptor], creating one if it 428 * Return the result data associated with the [descriptor], creating one if it
422 * isn't there. 429 * isn't there.
423 */ 430 */
424 ResultData getResultData(ResultDescriptor descriptor) { 431 ResultData getResultData(ResultDescriptor descriptor) {
425 return _resultMap.putIfAbsent(descriptor, () => new ResultData(descriptor)); 432 return _resultMap.putIfAbsent(descriptor, () => new ResultData(descriptor));
426 } 433 }
427 434
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after
1085 void dispose() { 1092 void dispose() {
1086 for (CacheEntry entry in entryMap.values) { 1093 for (CacheEntry entry in entryMap.values) {
1087 entry.dispose(); 1094 entry.dispose();
1088 } 1095 }
1089 entryMap.clear(); 1096 entryMap.clear();
1090 sources.clear(); 1097 sources.clear();
1091 pathToSource.clear(); 1098 pathToSource.clear();
1092 } 1099 }
1093 1100
1094 /** 1101 /**
1095 * Flush results that satisfy the given [filter]. 1102 * Flush results that satisfy the given [targetFilter] and [resultFilter].
1096 */ 1103 */
1097 void flush(FlushResultFilter filter) { 1104 void flush(FlushTargetFilter targetFilter, FlushResultFilter resultFilter) {
1098 for (CacheEntry entry in entryMap.values) { 1105 for (CacheEntry entry in entryMap.values) {
1099 entry.flush(filter); 1106 entry.flush(targetFilter, resultFilter);
1100 } 1107 }
1101 } 1108 }
1102 1109
1103 /** 1110 /**
1104 * Return the entry associated with the given [target]. 1111 * Return the entry associated with the given [target].
1105 */ 1112 */
1106 CacheEntry get(AnalysisTarget target) => entryMap[target]; 1113 CacheEntry get(AnalysisTarget target) => entryMap[target];
1107 1114
1108 /** 1115 /**
1109 * Return [Source]s whose full path is equal to the given [path]. 1116 * Return [Source]s whose full path is equal to the given [path].
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
1501 void resultAccessed(TargetedResult result) {} 1508 void resultAccessed(TargetedResult result) {}
1502 1509
1503 @override 1510 @override
1504 List<TargetedResult> resultStored(TargetedResult newResult, newValue) { 1511 List<TargetedResult> resultStored(TargetedResult newResult, newValue) {
1505 return TargetedResult.EMPTY_LIST; 1512 return TargetedResult.EMPTY_LIST;
1506 } 1513 }
1507 1514
1508 @override 1515 @override
1509 void targetRemoved(AnalysisTarget target) {} 1516 void targetRemoved(AnalysisTarget target) {}
1510 } 1517 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/operation/operation_analysis.dart ('k') | pkg/analyzer/test/src/context/cache_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698