Skip to content

Commit b52ac76

Browse files
authored
Freeze test (#112)
* test ui freeze Signed-off-by: shalom <[email protected]> * test ui freeze Signed-off-by: shalom <[email protected]>
1 parent 6586c1f commit b52ac76

File tree

7 files changed

+62
-9
lines changed

7 files changed

+62
-9
lines changed

.github/workflows/gradle-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,4 @@ jobs:
4545
uses: actions/upload-artifact@v3
4646
with:
4747
name: digma-intellij-plugin
48-
path: build/distributions/digma-intellij-1.0.13.zip
48+
path: build/distributions/digma-intellij-1.0.14.zip

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
pluginGroup = org.digma.plugins
77
pluginName = digma-intellij
88
# SemVer format -> https://semver.org
9-
pluginVersion=1.0.13
9+
pluginVersion=1.0.14
1010

1111
# See https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
1212
# for insight into build numbers and IntelliJ Platform versions.

ide-common/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ dependencies {
1515
//from here the model classes can't use it
1616
api(libs.prettytime)
1717
api(libs.threeten)
18+
api(libs.commons.lang3)
1819

1920

2021
implementation(project(":model"))

ide-common/src/main/java/org/digma/intellij/plugin/analytics/AnalyticsService.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.intellij.openapi.progress.ProgressIndicator;
77
import com.intellij.openapi.progress.Task;
88
import com.intellij.openapi.project.Project;
9+
import org.apache.commons.lang3.time.StopWatch;
910
import org.digma.intellij.plugin.log.Log;
1011
import org.digma.intellij.plugin.model.rest.errordetails.CodeObjectErrorDetails;
1112
import org.digma.intellij.plugin.model.rest.errors.CodeObjectError;
@@ -37,6 +38,8 @@
3738
import java.util.Map;
3839
import java.util.Objects;
3940
import java.util.stream.Collectors;
41+
import java.util.concurrent.TimeUnit;
42+
4043

4144
public class AnalyticsService implements Disposable {
4245

@@ -206,11 +209,14 @@ public AnalyticsInvocationHandler(AnalyticsProvider analyticsProvider,Project pr
206209

207210

208211
@Override
209-
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
212+
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
213+
214+
var stopWatch = StopWatch.createStarted();
215+
210216
try {
211217

212218
if (LOGGER.isDebugEnabled()) {
213-
Log.log(LOGGER::debug, "Sending request to {}: args '{}'",method.getName(), argsToString(args));
219+
Log.log(LOGGER::debug, "Sending request to {}: args '{}'", method.getName(), argsToString(args));
214220
}
215221

216222
Object result = method.invoke(analyticsProvider, args);
@@ -241,21 +247,24 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
241247
LOGGER.warn(e);
242248
var message = isConnectionException(e) ? getConnectExceptionMessage(e):getSslExceptionMessage(e);
243249
NotificationUtil.notifyError(project,"<html>Connection error with Digma backend api for method "+method.getName()+".<br> "
244-
+ message + ".<br> See logs for details.");
250+
+ message + ".<br> See logs for details.");
245251
}else if (status.isOk()){
246252
status.error();
247253
Log.log(LOGGER::debug,"Error invoking AnalyticsProvider.{}({}), exception {}", method.getName(), argsToString(args), e.getCause().getMessage());
248254
var message = getExceptionMessage(e);
249-
NotificationUtil.notifyError(project,"<html>Error with Digma backend api for method "+method.getName()+".<br> "
255+
NotificationUtil.notifyError(project, "<html>Error with Digma backend api for method " + method.getName() + ".<br> "
250256
+ message + ".<br> See logs for details.");
251257

252-
}else if(!status.hadError(e)){
258+
} else if (!status.hadError(e)) {
253259
status.error();
254-
Log.log(LOGGER::debug,"Error invoking AnalyticsProvider.{}({}), exception {}", method.getName(), argsToString(args), e.getCause().getMessage());
260+
Log.log(LOGGER::debug, "Error invoking AnalyticsProvider.{}({}), exception {}", method.getName(), argsToString(args), e.getCause().getMessage());
255261
}
256262

257263

258264
throw new AnalyticsServiceException(e);
265+
} finally {
266+
stopWatch.stop();
267+
Log.log(LOGGER::debug, "Api call {} took {} milliseconds", method.getName(), stopWatch.getTime(TimeUnit.MILLISECONDS));
259268
}
260269
}
261270

ide-common/src/main/java/org/digma/intellij/plugin/analytics/Environment.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.intellij.openapi.progress.ProgressIndicator;
55
import com.intellij.openapi.progress.Task;
66
import com.intellij.openapi.project.Project;
7+
import org.apache.commons.lang3.time.StopWatch;
78
import org.digma.intellij.plugin.log.Log;
89
import org.digma.intellij.plugin.notifications.NotificationUtil;
910
import org.digma.intellij.plugin.persistence.PersistenceData;
@@ -16,6 +17,7 @@
1617
import java.time.Duration;
1718
import java.time.Instant;
1819
import java.util.*;
20+
import java.util.concurrent.TimeUnit;
1921

2022
public class Environment implements EnvironmentsSupplier {
2123

@@ -110,7 +112,10 @@ public void refresh() {
110112
new Task.Backgroundable(project, "Digma: Refreshing environments...") {
111113
@Override
112114
public void run(@NotNull ProgressIndicator indicator) {
115+
var stopWatch = StopWatch.createStarted();
113116
refreshEnvironments();
117+
stopWatch.stop();
118+
Log.log(LOGGER::debug, "Refresh environments took {} milliseconds", stopWatch.getTime(TimeUnit.MILLISECONDS));
114119
}
115120
}.queue();
116121
}
@@ -165,6 +170,7 @@ private void refreshEnvironments() {
165170

166171
//this method may be called from both ui threads or background threads
167172
void replaceEnvironmentsList(@NotNull List<String> envs) {
173+
Log.log(LOGGER::debug, "replaceEnvironmentsList called");
168174
this.environments = envs;
169175
var oldEnv = current;
170176
if (current == null || !this.environments.contains(current)) {

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ dependencyResolutionManagement {
4343
library("okhttp-mockwebserver", "com.squareup.okhttp3", "mockwebserver").versionRef("okhttp")
4444
library("prettytime", "org.ocpsoft.prettytime", "prettytime").version("5.0.3.Final")
4545
library("threeten", "org.threeten", "threeten-extra").version("1.7.0")
46+
library("commons-lang3", "org.apache.commons", "commons-lang3").version("3.12.0")
4647
}
4748
}
4849
}

src/main/java/org/digma/intellij/plugin/service/EditorInteractionService.java

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import com.intellij.openapi.Disposable;
44
import com.intellij.openapi.diagnostic.Logger;
5+
import com.intellij.openapi.progress.ProgressIndicator;
6+
import com.intellij.openapi.progress.Task;
57
import com.intellij.openapi.project.Project;
8+
import org.apache.commons.lang3.time.StopWatch;
69
import org.digma.intellij.plugin.analytics.AnalyticsService;
710
import org.digma.intellij.plugin.document.DocumentInfoContainer;
811
import org.digma.intellij.plugin.document.DocumentInfoService;
@@ -14,8 +17,11 @@
1417
import org.digma.intellij.plugin.ui.model.environment.EnvironmentsSupplier;
1518
import org.digma.intellij.plugin.ui.service.ErrorsViewService;
1619
import org.digma.intellij.plugin.ui.service.InsightsViewService;
20+
import org.jetbrains.annotations.NotNull;
1721

22+
import javax.swing.*;
1823
import java.util.ArrayList;
24+
import java.util.concurrent.TimeUnit;
1925

2026
/**
2127
* A service to implement the interactions between listeners and UI components.
@@ -25,6 +31,8 @@ public class EditorInteractionService implements CaretContextService, Disposable
2531

2632
private final Logger LOGGER = Logger.getInstance(EditorInteractionService.class);
2733

34+
private ProgressIndicator runningTask;
35+
2836
private final Project project;
2937

3038
private final InsightsViewService insightsViewService;
@@ -48,6 +56,35 @@ public static CaretContextService getInstance(Project project) {
4856
@Override
4957
public void contextChanged(MethodUnderCaret methodUnderCaret) {
5058

59+
environmentsSupplier.refresh();
60+
61+
if (runningTask != null) {
62+
runningTask.cancel();
63+
}
64+
65+
var stopWatch = StopWatch.createStarted();
66+
67+
if (SwingUtilities.isEventDispatchThread()) {
68+
69+
Log.log(LOGGER::debug, "Executing contextChanged in background for {}", methodUnderCaret.getId());
70+
new Task.Backgroundable(project, "Digma: Context change...") {
71+
@Override
72+
public void run(@NotNull ProgressIndicator indicator) {
73+
runningTask = indicator;
74+
contextChangedImpl(methodUnderCaret);
75+
}
76+
}.queue();
77+
} else {
78+
Log.log(LOGGER::debug, "Executing contextChanged in current thread for {}", methodUnderCaret.getId());
79+
contextChangedImpl(methodUnderCaret);
80+
}
81+
82+
stopWatch.stop();
83+
Log.log(LOGGER::debug, "contextChanged took {} milliseconds", stopWatch.getTime(TimeUnit.MILLISECONDS));
84+
}
85+
86+
private void contextChangedImpl(MethodUnderCaret methodUnderCaret) {
87+
5188
Log.log(LOGGER::debug, "contextChanged: {}", methodUnderCaret);
5289
/*
5390
Assuming here that we must have a MethodInfo in DocumentInfoService that was populated in an earlier stage.
@@ -62,7 +99,6 @@ public void contextChanged(MethodUnderCaret methodUnderCaret) {
6299
63100
*/
64101

65-
environmentsSupplier.refresh();
66102

67103
if (!methodUnderCaret.isSupportedFile()){
68104
Log.log(LOGGER::debug, "methodUnderCaret is non supported file {}. ", methodUnderCaret);

0 commit comments

Comments
 (0)