summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--player/lua/stats.lua107
1 files changed, 63 insertions, 44 deletions
diff --git a/player/lua/stats.lua b/player/lua/stats.lua
index 9294347990..7884b231f0 100644
--- a/player/lua/stats.lua
+++ b/player/lua/stats.lua
@@ -6,6 +6,7 @@
-- Please note: not every property is always available and therefore not always
-- visible.
+local mp = require 'mp'
local options = require 'mp.options'
-- Options
@@ -15,22 +16,25 @@ local o = {
key_toggle = "I",
duration = 3,
- redraw_delay = 1, -- acts as duration in the toggling case
+ redraw_delay = 1, -- acts as duration in the toggling case
+ timing_warning = true,
ass_formatting = true,
debug = false,
-- Graph options and style
- skip_frames = 5,
plot_graphs = true,
+ skip_frames = 5,
+ global_max = true,
plot_bg_border_color = "0000FF",
plot_bg_color = "262626",
plot_color = "FFFFFF",
-- Text style
font = "Source Sans Pro",
+ font_mono = "Source Sans Pro", -- monospaced digits are sufficient
font_size = 9,
font_color = "FFFFFF",
- border_size = 1.0,
+ border_size = 0.8,
border_color = "262626",
shadow_x_offset = 0.0,
shadow_y_offset = 0.0,
@@ -59,8 +63,8 @@ local o = {
options.read_options(o)
local format = string.format
-local plast = {{}, {}, {}}
-local ppos = 0
+local plast = {{0}, {0}, {0}}
+local ppos = 1
local plen = 50
local recorder = nil
local timer = mp.add_periodic_timer(o.redraw_delay, function() print_stats(o.redraw_delay + 1) end)
@@ -245,34 +249,27 @@ function append_property(s, prop, attr, excluded)
end
-function generate_graph(values)
+function generate_graph(values, v_max, scale)
-- check if at least one value was recorded yet
if ppos < 1 then
return ""
end
- local pmax = 1
- for e = 1, plen do
- if values[e] and values[e] > pmax then
- pmax = values[e]
- end
- end
-
local x_tics = 1
local x_max = (plen - 1) * x_tics
local y_offset = o.border_size
- local y_max = o.font_size / 1.5
+ local y_max = o.font_size * 0.66
local x = 0
local i = ppos
- local s = {format("m 0 0 n %f %f l ", x, y_max - (y_max * values[i] / pmax * 0.8))}
+ local s = {format("m 0 0 n %f %f l ", x, y_max - (y_max * values[i] / v_max * scale))}
i = ((i - 2) % plen) + 1
- while i ~= ppos do
+ for p = 1, plen - 1 do
if values[i] then
x = x - x_tics
- s[#s+1] = format("%f %f ", x, y_max - (y_max * values[i] / pmax * 0.8))
+ s[#s+1] = format("%f %f ", x, y_max - (y_max * values[i] / v_max * scale))
end
i = ((i - 2) % plen) + 1
end
@@ -315,16 +312,6 @@ function append_perfdata(s)
return
end
- local graph_render = ""
- local graph_present = ""
- local graph_upload = ""
-
- if o.plot_graphs and timer:is_enabled() then
- graph_render = generate_graph(plast[1])
- graph_present = generate_graph(plast[2])
- graph_upload = generate_graph(plast[3])
- end
-
local dfps = mp.get_property_number("display-fps", 0)
dfps = dfps > 0 and (1 / dfps * 1e6)
@@ -333,23 +320,57 @@ function append_perfdata(s)
local peak_s = vo_p["render-peak"] + vo_p["present-peak"] + vo_p["upload-peak"]
-- highlight i with a red border when t exceeds the time for one frame
- function hl(i, t)
- if t > dfps and dfps > 0 then
- return format("{\\bord0.5}{\\3c&H0000FF&}%s{\\bord%s}{\\3c&H%s&}",
+ local function hl(i, t)
+ if o.timing_warning and t > dfps and dfps > 0 then
+ return format("{\\bord0.5}{\\3c&H0000FF&}%05d{\\bord%s}{\\3c&H%s&}",
i, o.border_size, o.border_color)
end
- return i
+ return format("%05d", i)
end
- s[#s+1] = format("%s%s%s%s%s / %s / %s μs %s", o.nl, o.indent, b("Render Time:"),
- o.prefix_sep, hl(vo_p["render-last"], last_s), hl(vo_p["render-avg"], avg_s),
- hl(vo_p["render-peak"], peak_s), graph_render)
- s[#s+1] = format("%s%s%s%s%s / %s / %s μs %s", o.nl, o.indent, b("Present Time:"),
- o.prefix_sep, hl(vo_p["present-last"], last_s), hl(vo_p["present-avg"], avg_s),
- hl(vo_p["present-peak"], peak_s), graph_present)
- s[#s+1] = format("%s%s%s%s%s / %s / %s μs %s", o.nl, o.indent, b("Upload Time:"),
- o.prefix_sep, hl(vo_p["upload-last"], last_s), hl(vo_p["upload-avg"], avg_s),
- hl(vo_p["upload-peak"], peak_s), graph_upload)
+
+ local rsuffix, psuffix, usuffix
+
+ if o.plot_graphs and timer:is_enabled() then
+ local max = {1, 1, 1}
+ for e = 1, plen do
+ if plast[1][e] and plast[1][e] > max[1] then max[1] = plast[1][e] end
+ if plast[2][e] and plast[2][e] > max[2] then max[2] = plast[2][e] end
+ if plast[3][e] and plast[3][e] > max[3] then max[3] = plast[3][e] end
+ end
+ if o.global_max then
+ max[1] = math.max(max[1], max[2], max[3])
+ max[2], max[3] = max[1], max[1]
+ end
+
+ rsuffix = generate_graph(plast[1], max[1], 0.8)
+ psuffix = generate_graph(plast[2], max[2], 0.8)
+ usuffix = generate_graph(plast[3], max[3], 0.8)
+
+ s[#s+1] = format("%s%s%s%s{\\fs%s}%s%s%s{\\fs%s}", o.nl, o.indent,
+ b("Timings:"), o.prefix_sep, o.font_size * 0.66,
+ "Render ⏎ Present ⏎ Upload", o.prefix_sep,
+ "(last/average/peak μs)", o.font_size)
+ else
+ rsuffix = "Render"
+ psuffix = "Present"
+ usuffix = "Upload"
+
+ s[#s+1] = format("%s%s%s%s{\\fs%s}%s{\\fs%s}", o.nl, o.indent,
+ b("Timings:"), o.prefix_sep, o.font_size * 0.66,
+ "(last/average/peak μs)", o.font_size)
+ end
+
+ local f = "%s%s%s{\\fn%s}%s / %s / %s{\\fn%s}%s%s"
+ s[#s+1] = format(f, o.nl, o.indent, o.indent, o.font_mono,
+ hl(vo_p["render-last"], last_s), hl(vo_p["render-avg"], avg_s),
+ hl(vo_p["render-peak"], peak_s), o.font, o.prefix_sep, rsuffix)
+ s[#s+1] = format(f, o.nl, o.indent, o.indent, o.font_mono,
+ hl(vo_p["present-last"], last_s), hl(vo_p["present-avg"], avg_s),
+ hl(vo_p["present-peak"], peak_s), o.font, o.prefix_sep, psuffix)
+ s[#s+1] = format(f, o.nl, o.indent, o.indent, o.font_mono,
+ hl(vo_p["upload-last"], last_s), hl(vo_p["upload-avg"], avg_s),
+ hl(vo_p["upload-peak"], peak_s), o.font, o.prefix_sep, usuffix)
end
@@ -416,9 +437,9 @@ end
if not pcall(function() timer:is_enabled() end) then
- local txt = "Stats.lua: your version of mpv does not possess required functionality. \nPlease upgrade mpv."
+ local txt = "Stats.lua: your version of mpv does not possess required functionality. \nPlease upgrade mpv or use an older version of this script."
print(txt)
- mp.osd_message(txt, 12)
+ mp.osd_message(txt, 15)
return
end
@@ -434,5 +455,3 @@ mp.register_event("video-reconfig",
print_stats(o.redraw_delay + 1)
end
end)
-
-print("test")