aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/os/shell.c15
-rw-r--r--test/functional/fixtures/shell-test.c17
-rw-r--r--test/functional/ui/output_spec.lua2
3 files changed, 14 insertions, 20 deletions
diff --git a/src/nvim/os/shell.c b/src/nvim/os/shell.c
index 19d199f4d5..6956410401 100644
--- a/src/nvim/os/shell.c
+++ b/src/nvim/os/shell.c
@@ -405,8 +405,11 @@ static bool out_data_decide_throttle(size_t size)
return false;
} else if (!visit) {
started = os_hrtime();
- } else if (visit % 20 == 0) {
+ } else {
uint64_t since = os_hrtime() - started;
+ if (since < (visit * 0.1L * NS_1_SECOND)) {
+ return true;
+ }
if (since > (3 * NS_1_SECOND)) {
received = visit = 0;
return false;
@@ -415,12 +418,10 @@ static bool out_data_decide_throttle(size_t size)
visit++;
// Pulse "..." at the bottom of the screen.
- size_t tick = (visit % 20 == 0)
- ? 3 // Force all dots "..." on last visit.
- : (visit % 4);
- pulse_msg[0] = (tick == 0) ? ' ' : '.';
- pulse_msg[1] = (tick == 0 || 1 == tick) ? ' ' : '.';
- pulse_msg[2] = (tick == 0 || 1 == tick || 2 == tick) ? ' ' : '.';
+ size_t tick = visit % 4;
+ pulse_msg[0] = (tick > 0) ? '.' : ' ';
+ pulse_msg[1] = (tick > 1) ? '.' : ' ';
+ pulse_msg[2] = (tick > 2) ? '.' : ' ';
if (visit == 1) {
msg_putchar('\n');
}
diff --git a/test/functional/fixtures/shell-test.c b/test/functional/fixtures/shell-test.c
index 550e5dd997..a221a31bde 100644
--- a/test/functional/fixtures/shell-test.c
+++ b/test/functional/fixtures/shell-test.c
@@ -40,7 +40,6 @@ static void help(void)
puts(" 0: foo bar");
puts(" ...");
puts(" 96: foo bar");
- puts(" shell-test REP_NODELAY N {text}");
puts(" shell-test INTERACT");
puts(" Prints \"interact $ \" to stderr, and waits for \"exit\" input.");
}
@@ -67,8 +66,7 @@ int main(int argc, char **argv)
if (argc >= 3) {
fprintf(stderr, "%s\n", argv[2]);
}
- } else if (strcmp(argv[1], "REP") == 0 ||
- strcmp(argv[1], "REP_NODELAY") == 0) {
+ } else if (strcmp(argv[1], "REP") == 0) {
if (argc != 4) {
fprintf(stderr, "REP expects exactly 3 arguments\n");
return 4;
@@ -78,15 +76,10 @@ int main(int argc, char **argv)
fprintf(stderr, "Invalid count: %s\n", argv[2]);
return 4;
}
- if (strcmp(argv[1], "REP_NODELAY") == 0) {
- for (int i = 0; i < count; i++) {
- printf("%d: %s\n", i, argv[3]);
- fflush(stdout);
- }
- } else {
- for (int i = 0; i < count; i++) {
- printf("%d: %s\n", i, argv[3]);
- fflush(stdout);
+ for (int i = 0; i < count; i++) {
+ printf("%d: %s\n", i, argv[3]);
+ fflush(stdout);
+ if (i % 100 == 0) {
usleep(1000); // Wait 1 ms (simulate typical output).
}
}
diff --git a/test/functional/ui/output_spec.lua b/test/functional/ui/output_spec.lua
index 4a0e7ccad0..139ef5964e 100644
--- a/test/functional/ui/output_spec.lua
+++ b/test/functional/ui/output_spec.lua
@@ -50,7 +50,7 @@ describe("shell command :!", function()
end)
it("throttles shell-command output greater than ~10KB", function()
- child_session.feed_data(":!"..nvim_dir.."/shell-test REP_NODELAY 30001 foo\n")
+ child_session.feed_data(":!"..nvim_dir.."/shell-test REP 30001 foo\n")
-- If we observe any line starting with a dot, then throttling occurred.
-- Avoid false failure on slow systems.