aboutsummaryrefslogtreecommitdiff
path: root/test/helpers.lua
diff options
context:
space:
mode:
authorglacambre <code@lacamb.re>2021-12-07 23:07:16 +0100
committerGhjuvan Lacambre <lacambre@adacore.com>2021-12-08 17:25:48 +0100
commit51d5f0517f9d39baa034781ba8956772eba65c38 (patch)
tree883f65f4b360fe41cc2e0139dfcab89bdb1bbc93 /test/helpers.lua
parentbe768be6b7ee896277971593e9287a86bc41efb2 (diff)
downloadrneovim-51d5f0517f9d39baa034781ba8956772eba65c38.tar.gz
rneovim-51d5f0517f9d39baa034781ba8956772eba65c38.tar.bz2
rneovim-51d5f0517f9d39baa034781ba8956772eba65c38.zip
test(helpers): optimize read_file_list
Read_file_list is used to read back data from the nvim log file as the testsuite executes. However, the nvim log file can get really big (each full run of the testsuite appends roughly 150MB of data to this file). Reading each line of this file can thus be extremely slow, and so are the repeated table.insert/table.removes that are done for each line. A solution to this issue is tto only read the end of the file. This results in a sizeable improvement in testsuite run times in some cases, e.g. on my computer: Without this commit: real 20m0.431s user 17m11.163s sys 1m59.422s With this commit: real 4m25.356s user 1m41.673s sys 1m31.253s
Diffstat (limited to 'test/helpers.lua')
-rw-r--r--test/helpers.lua14
1 files changed, 13 insertions, 1 deletions
diff --git a/test/helpers.lua b/test/helpers.lua
index 09b113c01d..87431e4342 100644
--- a/test/helpers.lua
+++ b/test/helpers.lua
@@ -741,9 +741,20 @@ function module.read_file_list(filename, start)
if not file then
return nil
end
+
+ -- There is no need to read more than the last 2MB of the log file, so seek
+ -- to that.
+ local file_size = file:seek("end")
+ local offset = file_size - 2000000
+ if offset < 0 then
+ offset = 0
+ end
+ file:seek("set", offset)
+
local lines = {}
local i = 1
- for line in file:lines() do
+ local line = file:read("*l")
+ while line ~= nil do
if i >= start then
table.insert(lines, line)
if #lines > maxlines then
@@ -751,6 +762,7 @@ function module.read_file_list(filename, start)
end
end
i = i + 1
+ line = file:read("*l")
end
file:close()
return lines