Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4372929

Browse files
authored
Merge pull request rstudio#1319 from rstudio/bugfix/terminal-misc
Show terminal typing lag in diagnostics dialog. Built and tested on Mac, Linux, Windows.
2 parents 23cd49c + 736c77a commit 4372929

File tree

6 files changed

+38
-48
lines changed

6 files changed

+38
-48
lines changed

src/gwt/src/org/rstudio/core/client/Stopwatch.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,13 @@
1616

1717
public class Stopwatch
1818
{
19-
public Stopwatch()
19+
/**
20+
* Track how long something takes, you know, like a Stopwatch.
21+
* @param debugLog Show timing via Debug.log
22+
*/
23+
public Stopwatch(boolean debugLog)
2024
{
25+
debugLog_ = debugLog;
2126
reset();
2227
}
2328

@@ -29,9 +34,11 @@ public void reset()
2934
public long mark(String label)
3035
{
3136
long stopTime = System.currentTimeMillis();
32-
Debug.log("[Stopwatch] " + label + ": " + (stopTime - startTime_) + " ms");
37+
if (debugLog_)
38+
Debug.log("[Stopwatch] " + label + ": " + (stopTime - startTime_) + " ms");
3339
return stopTime - startTime_;
3440
}
3541

3642
private long startTime_;
43+
private boolean debugLog_;
3744
}

src/gwt/src/org/rstudio/studio/client/RStudioGinjector.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* RStudioGinjector.java
33
*
4-
* Copyright (C) 2009-12 by RStudio, Inc.
4+
* Copyright (C) 2009-17 by RStudio, Inc.
55
*
66
* Unless you have received this program directly from RStudio pursuant
77
* to the terms of a commercial license agreement with RStudio, then
@@ -129,7 +129,6 @@
129129
import org.rstudio.studio.client.workbench.views.terminal.TerminalList;
130130
import org.rstudio.studio.client.workbench.views.terminal.TerminalPopupMenu;
131131
import org.rstudio.studio.client.workbench.views.terminal.TerminalSession;
132-
import org.rstudio.studio.client.workbench.views.terminal.TerminalSessionSocket;
133132
import org.rstudio.studio.client.workbench.views.source.editors.text.r.SignatureToolTipManager;
134133
import org.rstudio.studio.client.workbench.views.source.editors.text.rmd.TextEditingTargetNotebook;
135134
import org.rstudio.studio.client.workbench.views.source.editors.text.rmd.display.ChunkOptionsPopupPanel;
@@ -231,7 +230,6 @@ public interface RStudioGinjector extends Ginjector
231230
void injectMembers(NewConnectionSnippetHost newConnectionSnippetHost);
232231
void injectMembers(NewConnectionSnippetDialog newConnectionSnippetDialog);
233232
void injectMembers(NewPackagePage page);
234-
void injectMembers(TerminalSessionSocket socket);
235233
void injectMembers(NewConnectionInstallPackagePage newConnectionInstallPackagePage);
236234
void injectMembers(ObjectExplorerEditingTargetWidget widget);
237235
void injectMembers(ObjectExplorerDataGrid widget);

src/gwt/src/org/rstudio/studio/client/workbench/prefs/model/UIPrefsAccessor.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.rstudio.core.client.VirtualConsole;
1818
import org.rstudio.core.client.js.JsObject;
1919
import org.rstudio.studio.client.application.Desktop;
20-
import org.rstudio.studio.client.application.ui.RStudioThemes;
2120
import org.rstudio.studio.client.notebook.CompileNotebookPrefs;
2221
import org.rstudio.studio.client.notebookv2.CompileNotebookv2Prefs;
2322
import org.rstudio.studio.client.rmarkdown.RmdOutput;
@@ -601,11 +600,6 @@ public PrefValue<Boolean> showTerminalTab()
601600
return bool("show_terminal_tab", true);
602601
}
603602

604-
public PrefValue<Boolean> enableReportTerminalLag()
605-
{
606-
return bool("enable_report_terminal_lag", false);
607-
}
608-
609603
public PrefValue<Boolean> terminalLocalEcho()
610604
{
611605
return bool("terminal_local_echo", true);

src/gwt/src/org/rstudio/studio/client/workbench/prefs/views/AppearancePreferencesPane.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* AppearancePreferencesPane.java
33
*
4-
* Copyright (C) 2009-12 by RStudio, Inc.
4+
* Copyright (C) 2009-17 by RStudio, Inc.
55
*
66
* Unless you have received this program directly from RStudio pursuant
77
* to the terms of a commercial license agreement with RStudio, then
@@ -33,7 +33,6 @@
3333
import org.rstudio.studio.client.application.Desktop;
3434
import org.rstudio.studio.client.application.events.EventBus;
3535
import org.rstudio.studio.client.application.events.ThemeChangedEvent;
36-
import org.rstudio.studio.client.application.ui.RStudioThemes;
3736
import org.rstudio.studio.client.workbench.prefs.model.RPrefs;
3837
import org.rstudio.studio.client.workbench.prefs.model.UIPrefs;
3938
import org.rstudio.studio.client.workbench.views.source.editors.text.themes.AceThemes;

src/gwt/src/org/rstudio/studio/client/workbench/views/terminal/TerminalInfoDialog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public TerminalInfoDialog(TerminalSession session, TerminalSessionSocket socket)
6262
diagnostics.append("Local-echo: '" + localEchoEnabled + "'\n");
6363
diagnostics.append("Working Dir: '" + cwd + "'\n");
6464
diagnostics.append("WebSockets: '" + uiPrefs_.terminalUseWebsockets().getValue() + "'\n");
65-
diagnostics.append("Report lag: '" + uiPrefs_.enableReportTerminalLag().getValue() + "'\n");
65+
diagnostics.append("Typing lag: '" + socket.getTypingLagMsg() + "'\n");
6666

6767
diagnostics.append("\nSystem Information\n------------------\n");
6868
diagnostics.append("Desktop: '" + Desktop.isDesktop() + "'\n");

src/gwt/src/org/rstudio/studio/client/workbench/views/terminal/TerminalSessionSocket.java

Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.rstudio.core.client.Stopwatch;
2222
import org.rstudio.core.client.StringUtil;
2323
import org.rstudio.core.client.regex.Pattern;
24-
import org.rstudio.studio.client.RStudioGinjector;
2524
import org.rstudio.studio.client.application.Desktop;
2625
import org.rstudio.studio.client.common.console.ConsoleOutputEvent;
2726
import org.rstudio.studio.client.common.console.ConsoleProcess;
@@ -31,13 +30,11 @@
3130
import org.rstudio.studio.client.server.ServerRequestCallback;
3231
import org.rstudio.studio.client.server.Void;
3332
import org.rstudio.studio.client.server.VoidServerRequestCallback;
34-
import org.rstudio.studio.client.workbench.prefs.model.UIPrefs;
3533
import org.rstudio.studio.client.workbench.views.terminal.events.TerminalDataInputEvent;
3634
import org.rstudio.studio.client.workbench.views.terminal.xterm.XTermWidget;
3735

3836
import com.google.gwt.core.client.GWT;
3937
import com.google.gwt.event.shared.HandlerRegistration;
40-
import com.google.inject.Inject;
4138
import com.sksamuel.gwt.websockets.CloseEvent;
4239
import com.sksamuel.gwt.websockets.Websocket;
4340
import com.sksamuel.gwt.websockets.WebsocketListenerExt;
@@ -99,7 +96,7 @@ long duration()
9996
}
10097

10198
private String input_;
102-
private Stopwatch stopWatch_ = new Stopwatch();
99+
private Stopwatch stopWatch_ = new Stopwatch(false);
103100
private long duration_;
104101
}
105102

@@ -119,12 +116,7 @@ public void outputReceived(String output)
119116
if (item == null)
120117
return;
121118

122-
long average = 0;
123-
if (accumulatedPoints_ > 0)
124-
{
125-
average = accumulatedTime_ / accumulatedPoints_;
126-
}
127-
if (!item.matches(output, average))
119+
if (!item.matches(output, average()))
128120
{
129121
// output not what we expected, reset the whole list
130122
pending_.clear();
@@ -136,6 +128,20 @@ public void outputReceived(String output)
136128
}
137129
}
138130

131+
private long average()
132+
{
133+
if (accumulatedPoints_ > 0)
134+
{
135+
return accumulatedTime_ / accumulatedPoints_;
136+
}
137+
return 0;
138+
}
139+
140+
public String averageTimeMsg()
141+
{
142+
return Long.toString(average()) + "ms";
143+
}
144+
139145
private LinkedList<InputDatapoint> pending_;
140146
private long accumulatedPoints_;
141147
private long accumulatedTime_;
@@ -149,29 +155,16 @@ public void outputReceived(String output)
149155
public TerminalSessionSocket(Session session,
150156
XTermWidget xterm)
151157
{
152-
RStudioGinjector.INSTANCE.injectMembers(this);
153-
154158
session_ = session;
155159
xterm_ = xterm;
156160
localEcho_ = new TerminalLocalEcho(xterm_);
157161

158162
// Show delay between receiving a keystroke and sending it to the
159-
// terminal emulator; for diagnostics on laggy typing. Intended for
160-
// brief use from a command-prompt. Time between input/display shown
161-
// in console.
162-
reportTypingLag_ = uiPrefs_.enableReportTerminalLag().getValue();
163-
if (reportTypingLag_)
164-
{
165-
inputEchoTiming_ = new InputEchoTimeMonitor();
166-
}
163+
// terminal emulator; for diagnostics on laggy typing.
164+
// Time between input/display shown in terminal diagnostics dialog.
165+
inputEchoTiming_ = new InputEchoTimeMonitor();
167166
}
168167

169-
@Inject
170-
private void initialize(UIPrefs uiPrefs)
171-
{
172-
uiPrefs_ = uiPrefs;
173-
}
174-
175168
/**
176169
* Connect the input/output channel to the server. This requires that
177170
* an rsession has already been started via RPC and the consoleProcess
@@ -360,16 +353,14 @@ public void dispatchOutput(String output, boolean detectLocalEcho)
360353
@Override
361354
public void onTerminalDataInput(TerminalDataInputEvent event)
362355
{
363-
if (reportTypingLag_)
364-
inputEchoTiming_.inputReceived(event.getData());
356+
inputEchoTiming_.inputReceived(event.getData());
365357
session_.receivedInput(event.getData());
366358
}
367359

368360
@Override
369361
public void onConsoleOutput(ConsoleOutputEvent event)
370362
{
371-
if (reportTypingLag_)
372-
inputEchoTiming_.outputReceived(event.getOutput());
363+
inputEchoTiming_.outputReceived(event.getOutput());
373364
session_.receivedOutput(event.getOutput());
374365
}
375366

@@ -430,13 +421,17 @@ private void diagnostic(String msg)
430421
diagnostic_.append(msg);
431422
diagnostic_.append("\n");
432423
}
424+
425+
public String getTypingLagMsg()
426+
{
427+
return inputEchoTiming_.averageTimeMsg();
428+
}
433429

434430
private HandlerRegistrations registrations_ = new HandlerRegistrations();
435431
private final Session session_;
436432
private final XTermWidget xterm_;
437433
private ConsoleProcess consoleProcess_;
438434
private HandlerRegistration terminalInputHandler_;
439-
private boolean reportTypingLag_;
440435
private InputEchoTimeMonitor inputEchoTiming_;
441436
private Websocket socket_;
442437
private TerminalLocalEcho localEcho_;
@@ -448,7 +443,4 @@ private void diagnostic(String msg)
448443

449444
public static final Pattern PASSWORD_PATTERN =
450445
Pattern.create(PASSWORD_REGEX, "im");
451-
452-
// Injected ----
453-
private UIPrefs uiPrefs_;
454446
}

0 commit comments

Comments
 (0)