Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoringService.cs')
-rw-r--r--main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoringService.cs20
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);