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

Skip to content

Commit 736c77a

Browse files
committed
Show terminal typing lag in diagnostics dialog
I had code to compute typing lag in terminal, hidden behind an undocumented user preference and reporting to Javascript console. Got rid of preference, and just show the value in Terminal Diagnostics.
1 parent 23cd49c commit 736c77a

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)