diff options
Diffstat (limited to 'main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoringService.cs')
-rw-r--r-- | main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoringService.cs | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoringService.cs b/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoringService.cs index d91b6f9a6d..1d9353ba5e 100644 --- a/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoringService.cs +++ b/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoringService.cs @@ -156,12 +156,12 @@ namespace MonoDevelop.Refactoring } } - public static void AcceptChanges (IProgressMonitor monitor, List<Change> changes) + public static void AcceptChanges (ProgressMonitor monitor, List<Change> changes) { AcceptChanges (monitor, changes, MonoDevelop.Ide.TextFileProvider.Instance); } - public static void AcceptChanges (IProgressMonitor monitor, List<Change> changes, MonoDevelop.Projects.Text.ITextFileProvider fileProvider) + public static void AcceptChanges (ProgressMonitor monitor, List<Change> changes, MonoDevelop.Projects.Text.ITextFileProvider fileProvider) { var rctx = new RefactoringOptions (null); var handler = new RenameHandler (changes); @@ -199,6 +199,9 @@ namespace MonoDevelop.Refactoring return inspectors.Where (i => i.MimeType == mimeType); } + static Stopwatch validActionsWatch = new Stopwatch (); + static Stopwatch actionWatch = new Stopwatch (); + public static Task<IEnumerable<CodeAction>> GetValidActions (Document doc, TextLocation loc, CancellationToken cancellationToken = default (CancellationToken)) { var editor = doc.Editor; @@ -207,6 +210,8 @@ namespace MonoDevelop.Refactoring var result = new List<CodeAction> (); var timer = InstrumentationService.CreateTimerCounter ("Source analysis background task", "Source analysis"); timer.BeginTiming (); + validActionsWatch.Restart (); + var timeTable = new Dictionary<CodeActionProvider, long> (); try { var parsedDocument = doc.ParsedDocument; if (editor != null && parsedDocument != null && parsedDocument.CreateRefactoringContext != null) { @@ -217,7 +222,10 @@ namespace MonoDevelop.Refactoring disabledNodes.IndexOf (fix.IdString, StringComparison.Ordinal) < 0)) { try { + actionWatch.Restart (); result.AddRange (provider.GetActions (doc, ctx, loc, cancellationToken)); + actionWatch.Stop (); + timeTable[provider] = actionWatch.ElapsedMilliseconds; } catch (Exception ex) { LoggingService.LogError ("Error in context action provider " + provider.Title, ex); } @@ -228,6 +236,14 @@ namespace MonoDevelop.Refactoring LoggingService.LogError ("Error in analysis service", ex); } finally { timer.EndTiming (); + validActionsWatch.Stop (); + if (validActionsWatch.ElapsedMilliseconds > 1000) { + LoggingService.LogWarning ("Warning slow edit action update."); + foreach (var pair in timeTable) { + if (pair.Value > 50) + LoggingService.LogInfo ("ACTION '" + pair.Key.Title + "' took " + pair.Value +"ms"); + } + } } return (IEnumerable<CodeAction>)result; }, cancellationToken); |