From 56420487a119e9382fe14d57b826bfa5b6029152 Mon Sep 17 00:00:00 2001 From: Alejandro Romano Date: Mon, 20 Sep 2021 00:42:18 -0300 Subject: [PATCH] Fix persistent high CPU usage when emoji-sets is enabled MutationObserver enters into an infinite loop by iterating on itself. By disconnecting the observer and reconnecting it after parsing the DOM for emoji-sets to work, we stop the problem and Notion goes back to sane 0% CPU idle usage. --- mods/emoji-sets/mod.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mods/emoji-sets/mod.js b/mods/emoji-sets/mod.js index 8ceb5b5..dbdd766 100644 --- a/mods/emoji-sets/mod.js +++ b/mods/emoji-sets/mod.js @@ -1,6 +1,7 @@ /* * emoji sets * (c) 2020 dragonwocky (https://dragonwocky.me/) + * (c) minor fixes by Arecsu from martyr⁠— (https://martyr.shop/) * under the MIT license */ @@ -46,13 +47,19 @@ module.exports = { if (!queue.length) requestAnimationFrame(handle); queue.push(...list); }); - observer.observe(document.body, { - childList: true, - subtree: true, - characterData: true, - }); + + const observe = ()=> { + observer.observe(document.body, { + childList: true, + subtree: true, + characterData: true, + }); + }; + observe(); // initiate observer + function handle() { queue = []; + observer.disconnect(); // stop observer from getting stuck into an infinite loop from here const isMac = process.platform === 'darwin', native = (store().style === 'microsoft' && process.platform === 'win32') || @@ -138,6 +145,7 @@ module.exports = { } tweaked = true; } + observe(); // re-initiating the observer now that we don't risk an infinite loop } }); },