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

Side by Side Diff: pkg/analysis_server/lib/src/analysis_server.dart

Issue 2132073003: Validate cache consistency asynchronously. Compute modification times of physical files in a separa… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 5 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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 analysis.server; 5 library analysis.server;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:collection'; 8 import 'dart:collection';
9 import 'dart:core' hide Resource; 9 import 'dart:core' hide Resource;
10 import 'dart:io' as io; 10 import 'dart:io' as io;
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 List<AstNode> nodes = <AstNode>[]; 692 List<AstNode> nodes = <AstNode>[];
693 for (CompilationUnit unit in units) { 693 for (CompilationUnit unit in units) {
694 AstNode node = new NodeLocator(offset).searchWithin(unit); 694 AstNode node = new NodeLocator(offset).searchWithin(unit);
695 if (node != null) { 695 if (node != null) {
696 nodes.add(node); 696 nodes.add(node);
697 } 697 }
698 } 698 }
699 return nodes; 699 return nodes;
700 } 700 }
701 701
702 // TODO(brianwilkerson) Add the following method after 'prioritySources' has
703 // been added to InternalAnalysisContext.
704 // /**
705 // * Return a list containing the full names of all of the sources that are
706 // * priority sources.
707 // */
708 // List<String> getPriorityFiles() {
709 // List<String> priorityFiles = new List<String>();
710 // folderMap.values.forEach((ContextDirectory directory) {
711 // InternalAnalysisContext context = directory.context;
712 // context.prioritySources.forEach((Source source) {
713 // priorityFiles.add(source.fullName);
714 // });
715 // });
716 // return priorityFiles;
717 // }
718
719 /** 702 /**
720 * Returns resolved [CompilationUnit]s of the Dart file with the given [path]. 703 * Returns resolved [CompilationUnit]s of the Dart file with the given [path].
721 * 704 *
722 * May be empty, but not `null`. 705 * May be empty, but not `null`.
723 */ 706 */
724 List<CompilationUnit> getResolvedCompilationUnits(String path) { 707 List<CompilationUnit> getResolvedCompilationUnits(String path) {
725 List<CompilationUnit> units = <CompilationUnit>[]; 708 List<CompilationUnit> units = <CompilationUnit>[];
726 ContextSourcePair contextSource = getContextSourcePair(path); 709 ContextSourcePair contextSource = getContextSourcePair(path);
727 // prepare AnalysisContext 710 // prepare AnalysisContext
728 AnalysisContext context = contextSource.context; 711 AnalysisContext context = contextSource.context;
729 if (context == null) { 712 if (context == null) {
730 return units; 713 return units;
731 } 714 }
732 // add a unit for each unit/library combination 715 // add a unit for each unit/library combination
733 runWithWorkingCacheSize(context, () { 716 runWithWorkingCacheSize(context, () {
734 Source unitSource = contextSource.source; 717 Source unitSource = contextSource.source;
735 List<Source> librarySources = context.getLibrariesContaining(unitSource); 718 List<Source> librarySources = context.getLibrariesContaining(unitSource);
736 for (Source librarySource in librarySources) { 719 for (Source librarySource in librarySources) {
737 CompilationUnit unit = 720 CompilationUnit unit =
738 context.resolveCompilationUnit2(unitSource, librarySource); 721 context.resolveCompilationUnit2(unitSource, librarySource);
739 if (unit != null) { 722 if (unit != null) {
740 units.add(unit); 723 units.add(unit);
741 } 724 }
742 } 725 }
743 }); 726 });
744 // done 727 // done
745 return units; 728 return units;
746 } 729 }
747 730
731 // TODO(brianwilkerson) Add the following method after 'prioritySources' has
732 // been added to InternalAnalysisContext.
733 // /**
734 // * Return a list containing the full names of all of the sources that are
735 // * priority sources.
736 // */
737 // List<String> getPriorityFiles() {
738 // List<String> priorityFiles = new List<String>();
739 // folderMap.values.forEach((ContextDirectory directory) {
740 // InternalAnalysisContext context = directory.context;
741 // context.prioritySources.forEach((Source source) {
742 // priorityFiles.add(source.fullName);
743 // });
744 // });
745 // return priorityFiles;
746 // }
747
748 /** 748 /**
749 * Handle a [request] that was read from the communication channel. 749 * Handle a [request] that was read from the communication channel.
750 */ 750 */
751 void handleRequest(Request request) { 751 void handleRequest(Request request) {
752 _performance.logRequest(request); 752 _performance.logRequest(request);
753 runZoned(() { 753 runZoned(() {
754 ServerPerformanceStatistics.serverRequests.makeCurrentWhile(() { 754 ServerPerformanceStatistics.serverRequests.makeCurrentWhile(() {
755 int count = handlers.length; 755 int count = handlers.length;
756 for (int i = 0; i < count; i++) { 756 for (int i = 0; i < count; i++) {
757 try { 757 try {
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 for (AnalysisContext context in _getContexts(roots)) { 922 for (AnalysisContext context in _getContexts(roots)) {
923 operationQueue.contextRemoved(context); 923 operationQueue.contextRemoved(context);
924 } 924 }
925 } 925 }
926 // Instruct the contextDirectoryManager to rebuild all contexts from 926 // Instruct the contextDirectoryManager to rebuild all contexts from
927 // scratch. 927 // scratch.
928 contextManager.refresh(roots); 928 contextManager.refresh(roots);
929 } 929 }
930 930
931 /** 931 /**
932 * Schedule cache consistency validation in [context].
933 * The most of the validation must be done asynchronously.
934 */
935 void scheduleCacheConsistencyValidation(AnalysisContext context) {
936 if (context is InternalAnalysisContext) {
937 CacheConsistencyValidator validator = context.cacheConsistencyValidator;
938 List<Source> sources = validator.getSourcesToComputeModificationTimes();
939 // Compute modification times and notify the validator asynchronously.
940 new Future(() async {
941 try {
942 List<int> modificationTimes =
943 await resourceProvider.getModificationTimes(sources);
944 bool cacheInconsistencyFixed = validator
945 .sourceModificationTimesComputed(sources, modificationTimes);
946 if (cacheInconsistencyFixed) {
947 scheduleOperation(new PerformAnalysisOperation(context, false));
948 }
949 } catch (exception, stackTrace) {
950 sendServerErrorNotification(
951 'Failed to check cache consistency', exception, stackTrace);
952 }
953 });
954 }
955 }
956
957 /**
932 * Schedules execution of the given [ServerOperation]. 958 * Schedules execution of the given [ServerOperation].
933 */ 959 */
934 void scheduleOperation(ServerOperation operation) { 960 void scheduleOperation(ServerOperation operation) {
935 addOperation(operation); 961 addOperation(operation);
936 _schedulePerformOperation(); 962 _schedulePerformOperation();
937 } 963 }
938 964
939 /** 965 /**
940 * Schedules analysis of the given context. 966 * Schedules analysis of the given context.
941 */ 967 */
(...skipping 822 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 /** 1790 /**
1765 * The [PerformanceTag] for time spent in server request handlers. 1791 * The [PerformanceTag] for time spent in server request handlers.
1766 */ 1792 */
1767 static PerformanceTag serverRequests = new PerformanceTag('serverRequests'); 1793 static PerformanceTag serverRequests = new PerformanceTag('serverRequests');
1768 1794
1769 /** 1795 /**
1770 * The [PerformanceTag] for time spent in split store microtasks. 1796 * The [PerformanceTag] for time spent in split store microtasks.
1771 */ 1797 */
1772 static PerformanceTag splitStore = new PerformanceTag('splitStore'); 1798 static PerformanceTag splitStore = new PerformanceTag('splitStore');
1773 } 1799 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698