From 2d6d4b43cef63bd1f77952d37c8979ad57bad28a Mon Sep 17 00:00:00 2001 From: FichteFoll Date: Tue, 14 Apr 2020 16:59:15 +0200 Subject: [PATCH] Work around performance regression in mpv's osd In mpv-player/mpv@07287262513c0d1ea46b7beaf100e73f2008295f, a strcmp on the previously displayed and the new text has been removed, causing excessive GPU usage especially on idle frames when playback was paused. I will submit a patch to upstream, but mpv versions 0.31 & 0.32 are already affected by this. See torque/mpv-progressbar#56 for a similar report to a different script. --- syncplay/resources/syncplayintf.lua | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/syncplay/resources/syncplayintf.lua b/syncplay/resources/syncplayintf.lua index 9115faf..839f4e4 100644 --- a/syncplay/resources/syncplayintf.lua +++ b/syncplay/resources/syncplayintf.lua @@ -133,6 +133,7 @@ function add_chat(chat_message, mood) chat_log[entry] = { xpos=CANVAS_WIDTH, timecreated=mp.get_time(), text=tostring(chat_message), row=row } end +local old_ass_text = '' function chat_update() local ass = assdraw.ass_new() local chat_ass = '' @@ -179,7 +180,14 @@ function chat_update() ass:append(input_ass()) ass:append(chat_ass) end - mp.set_osd_ass(CANVAS_WIDTH,CANVAS_HEIGHT, ass.text) + + -- The commit that introduced the new API removed the internal heuristics on whether a refresh is required, + -- so we check for changed text manually to not cause excessive GPU load + -- https://github.com/mpv-player/mpv/commit/07287262513c0d1ea46b7beaf100e73f2008295f#diff-d88d582039dea993b6229da9f61ba76cL530 + if ass.text ~= old_ass_text then + mp.set_osd_ass(CANVAS_WIDTH,CANVAS_HEIGHT, ass.text) + old_ass_text = ass.text + end end function process_alert_osd() @@ -982,4 +990,4 @@ function set_syncplayintf_options(input) end chat_format = get_output_style() readyMpvAfterSettingsKnown() -end \ No newline at end of file +end