diff options
author | wm4 <wm4@nowhere> | 2019-12-23 11:17:01 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2019-12-23 11:17:01 +0100 |
commit | 96932fe77c912f86d8fc51e073b4fd26a124a1fb (patch) | |
tree | 6d7df3eaf1fc0f443b7db392a4130c42fb7635b1 /player/lua/defaults.lua | |
parent | 346c651de397165462d66f5b5c0bcec5a9ad4ae4 (diff) | |
download | mpv-96932fe77c912f86d8fc51e073b4fd26a124a1fb.tar.bz2 mpv-96932fe77c912f86d8fc51e073b4fd26a124a1fb.tar.xz |
lua: batch-update key bindings
Lua scripting implements key bindings by defining an input section with
all the bindings in it. Every add_key_binding() call ran a mpv command
to update this section. This caused a lot of spam at debug log levels.
Reduce the spam and more it efficient by batching updates into a single
mpv command when the script becomes inactive. This is pretty simple,
because there's already the concept of idle handlers.
This requires that the script actually goes to sleep, which might not
happen in various extremely bogus corner cases, such as polling the mpv
message queue with active waiting. Just don't do that.
Diffstat (limited to 'player/lua/defaults.lua')
-rw-r--r-- | player/lua/defaults.lua | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/player/lua/defaults.lua b/player/lua/defaults.lua index 29e513f4ea..ba59653828 100644 --- a/player/lua/defaults.lua +++ b/player/lua/defaults.lua @@ -132,8 +132,14 @@ end local key_bindings = {} local key_binding_counter = 0 +local key_bindings_dirty = false + +function mp.flush_keybindings() + if not key_bindings_dirty then + return + end + key_bindings_dirty = false -local function update_key_bindings() for i = 1, 2 do local section, flags local def = i == 1 @@ -229,7 +235,7 @@ local function add_binding(attrs, key, name, fn, rp) key_binding_counter = key_binding_counter + 1 attrs.priority = key_binding_counter key_bindings[name] = attrs - update_key_bindings() + key_bindings_dirty = true dispatch_key_bindings[name] = key_cb mp.register_script_message(name, msg_cb) end @@ -245,7 +251,7 @@ end function mp.remove_key_binding(name) key_bindings[name] = nil dispatch_key_bindings[name] = nil - update_key_bindings() + key_bindings_dirty = true mp.unregister_script_message(name) end @@ -517,6 +523,8 @@ function mp.dispatch_events(allow_wait) end end +mp.register_idle(mp.flush_keybindings) + -- additional helpers function mp.osd_message(text, duration) |