From de60dcc5a13653caaafd2bbc354e3cfcc63248dc Mon Sep 17 00:00:00 2001 From: zehkira <9485872-zehkira@users.noreply.gitlab.com> Date: Mon, 27 Oct 2025 10:16:51 +0100 Subject: [PATCH 1/3] Minimize expensive checks in logging module --- source/monophony/logging.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/monophony/logging.py b/source/monophony/logging.py index 72ec483..78451e1 100644 --- a/source/monophony/logging.py +++ b/source/monophony/logging.py @@ -64,13 +64,11 @@ def error(source: str, text: Any, details: Any=''): def _log(level: type, source: str, text: str, details: str): - if threading.current_thread() is not threading.main_thread(): - GLib.idle_add(_log, level, source, text, details) + if level.name not in log_levels: return - if level.name not in os.getenv( - _LOG_LEVELS_VARIABLE, _DEFAULT_LOG_LEVELS - ).split(','): + if threading.current_thread() is not threading.main_thread(): + GLib.idle_add(_log, level, source, text, details) return text = text.strip() @@ -100,6 +98,10 @@ def _get_directory() -> str: return os.getenv('XDG_RUNTIME_DIR', '/var/tmp') + '/' + NAME +log_levels = os.getenv( + _LOG_LEVELS_VARIABLE, _DEFAULT_LOG_LEVELS +).split(',') + log_directory = _get_directory() os.makedirs(log_directory, exist_ok=True) open(f'{log_directory}/log', 'a+').close() -- GitLab From 2046ff9c94f42faa5cf80c6df8d7d3da6ecde213 Mon Sep 17 00:00:00 2001 From: zehkira <9485872-zehkira@users.noreply.gitlab.com> Date: Mon, 27 Oct 2025 10:29:47 +0100 Subject: [PATCH 2/3] Minimize debug code executed while debug is disabled --- source/monophony/debug.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/source/monophony/debug.py b/source/monophony/debug.py index a302368..4f4d7b9 100644 --- a/source/monophony/debug.py +++ b/source/monophony/debug.py @@ -9,10 +9,6 @@ from gi.repository import GLib, GObject _DEBUG_VARIABLE = 'MONOPHONY_DEBUG' -def is_active() -> bool: - return bool(os.getenv(_DEBUG_VARIABLE)) - - def log_memory_status() -> bool: gobject_count = 0 other_count = 0 @@ -32,17 +28,20 @@ def log_memory_status() -> bool: # Use with multiple inheriance: class Class(MemoryDebugger, ...) class MemoryDebugger: + def __del__(self): + logging.info(__name__, f'Collected {self.__class__.__name__}') + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if is_active(): - logging.info(__name__, f'Initialized {self.__class__.__name__}') - - def __del__(self): - if is_active(): - logging.info(__name__, f'Collected {self.__class__.__name__}') + logging.info(__name__, f'Initialized {self.__class__.__name__}') -if is_active(): +debug_active = os.getenv(_DEBUG_VARIABLE) +if debug_active: logging.warning(__name__, 'Debug mode enabled, expect low performance') GLib.timeout_add_seconds(2, log_memory_status) +else: + del MemoryDebugger.__del__ + del MemoryDebugger.__init__ + -- GitLab From c54beedd7d9feb104152b627283d81abead85f06 Mon Sep 17 00:00:00 2001 From: zehkira <9485872-zehkira@users.noreply.gitlab.com> Date: Mon, 27 Oct 2025 10:45:24 +0100 Subject: [PATCH 3/3] Disable pointless settings writes on init --- source/monophony/player.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/source/monophony/player.py b/source/monophony/player.py index 4d3e2f7..857cce5 100644 --- a/source/monophony/player.py +++ b/source/monophony/player.py @@ -98,8 +98,10 @@ class Player(GObject.Object): self._mpris_event_sender = EventSender(self._mpris_server) self._mpris_server.publish() - self.set_mode(int(settings.load('mode', PlaybackMode.NORMAL))) - self.set_volume(float(settings.load('volume', 1.0))) + self.set_mode( + int(settings.load('mode', PlaybackMode.NORMAL)), save_setting=False + ) + self.set_volume(float(settings.load('volume', 1.0)), save_setting=False) @GObject.Signal(name='queue-changed') def _queue_changed(self, _queue: object, _index: int): @@ -453,18 +455,26 @@ class Player(GObject.Object): logging.info(__name__, f'Set pause to "{pause}"') def set_volume( - self, volume: float, notify_frontend: bool=True, notify_mpris: bool=True + self, + volume: float, + notify_frontend: bool=True, + notify_mpris: bool=True, + save_setting: bool=True ): - settings.save({'volume': volume}) + if save_setting: + settings.save({'volume': volume}) + self._playbin.props.volume = volume if notify_mpris: self._mpris_event_sender.on_volume() if notify_frontend: self.emit('volume-changed', volume) - def set_mode(self, mode: int): + def set_mode(self, mode: int, save_setting: bool=True): self.mode = mode - settings.save({'mode': mode}) + if save_setting: + settings.save({'mode': mode}) + self.emit('mode-changed', self.mode) def shuffle(self): -- GitLab