From 28601cf2b76a0faad3954f06cc74ffcf3bc3588e Mon Sep 17 00:00:00 2001 From: tobi-wan-kenobi Date: Fri, 9 Sep 2022 08:39:05 +0200 Subject: [PATCH] Revert "Merge branch '917-event-based-pulseaudio'" This reverts commit 72a888748e581ef11b31442b21b654ad31cda9bd, reversing changes made to d57ef9364a742b5458deeb773908f793e1581807. This merge causes really high CPU load if using both pasink and pasource, because those two modules trigger each other, and there's not a terrible lot I can do about that, unfortunately. --- bumblebee-status | 4 +- bumblebee_status/core/output.py | 23 ++++-------- bumblebee_status/modules/core/pulseaudio.py | 41 --------------------- 3 files changed, 9 insertions(+), 59 deletions(-) diff --git a/bumblebee-status b/bumblebee-status index e7b3ea3..698bcf8 100755 --- a/bumblebee-status +++ b/bumblebee-status @@ -75,7 +75,6 @@ def handle_events(config, update_lock): def main(): - global started config = core.config.Config(sys.argv[1:]) level = logging.DEBUG if config.debug() else logging.ERROR if config.logfile(): @@ -98,8 +97,6 @@ def main(): core.input.register(None, core.input.WHEEL_UP, "i3-msg workspace prev_on_output") core.input.register(None, core.input.WHEEL_DOWN, "i3-msg workspace next_on_output") - core.event.trigger("start") - update_lock = threading.Lock() event_thread = threading.Thread(target=handle_events, args=(config, update_lock, )) event_thread.daemon = True @@ -130,6 +127,7 @@ def main(): if util.format.asbool(config.get("engine.collapsible", True)) == True: core.input.register(None, core.input.MIDDLE_MOUSE, output.toggle_minimize) + core.event.trigger("start") started = True signal.signal(10, sig_USR1_handler) while True: diff --git a/bumblebee_status/core/output.py b/bumblebee_status/core/output.py index 1bd5038..cee579f 100644 --- a/bumblebee_status/core/output.py +++ b/bumblebee_status/core/output.py @@ -1,7 +1,6 @@ import sys import json import time -import threading import core.theme import core.event @@ -146,7 +145,6 @@ class i3(object): self.__content = {} self.__theme = theme self.__config = config - self.__lock = threading.Lock() core.event.register("update", self.update) core.event.register("start", self.draw, "start") core.event.register("draw", self.draw, "statusline") @@ -178,15 +176,14 @@ class i3(object): self.__content[widget_id]["minimized"] = not self.__content[widget_id]["minimized"] def draw(self, what, args=None): - with self.__lock: - cb = getattr(self, what) - data = cb(args) if args else cb() - if "blocks" in data: - sys.stdout.write(json.dumps(data["blocks"], default=dump_json)) - if "suffix" in data: - sys.stdout.write(data["suffix"]) - sys.stdout.write("\n") - sys.stdout.flush() + cb = getattr(self, what) + data = cb(args) if args else cb() + if "blocks" in data: + sys.stdout.write(json.dumps(data["blocks"], default=dump_json)) + if "suffix" in data: + sys.stdout.write(data["suffix"]) + sys.stdout.write("\n") + sys.stdout.flush() def start(self): return { @@ -247,10 +244,6 @@ class i3(object): return blocks def update(self, affected_modules=None, redraw_only=False, force=False): - with self.__lock: - self.update2(affected_modules, redraw_only, force) - - def update2(self, affected_modules=None, redraw_only=False, force=False): now = time.time() for module in self.__modules: if affected_modules and not module.id in affected_modules: diff --git a/bumblebee_status/modules/core/pulseaudio.py b/bumblebee_status/modules/core/pulseaudio.py index 9e7150b..70acb01 100644 --- a/bumblebee_status/modules/core/pulseaudio.py +++ b/bumblebee_status/modules/core/pulseaudio.py @@ -33,18 +33,12 @@ Requires the following executable: """ import re -import os -import time import logging import functools -import threading -import subprocess -import select import core.module import core.widget import core.input -import core.event import util.cli import util.graph @@ -109,36 +103,6 @@ class Module(core.module.Module): for event in events: core.input.register(self, button=event["button"], cmd=event["action"]) - self.__monitor = threading.Thread(target=self.__subscribe, args=()) - self.__monitor.start() - - def __subscribe(self): - self.update2() - core.event.trigger("update", [self.id], redraw_only=True) - try: - proc = subprocess.Popen("pactl subscribe", - stdout = subprocess.PIPE, - stderr = subprocess.STDOUT, - shell = True - ) - except: - return - while threading.main_thread().is_alive(): - r, w, e = select.select([proc.stdout], [], [], 1) - - if not (r or w or e): - self.update2() - core.event.trigger("update", [self.id], redraw_only=True) - core.event.trigger("draw") - continue # timeout - # whateve we got, use it - self.update2() - core.event.trigger("update", [self.id], redraw_only=True) - core.event.trigger("draw") - os.set_blocking(proc.stdout.fileno(), False) - proc.stdout.read() - os.set_blocking(proc.stdout.fileno(), True) - def set_volume(self, amount): util.cli.execute( "pactl set-{}-{} @DEFAULT_{}@ {}".format( @@ -236,11 +200,6 @@ class Module(core.module.Module): return output def update(self): - if self.__monitor.is_alive(): - return - self.update2() - - def update2(self): try: self._failed = False channel = "sinks" if self._channel == "sink" else "sources"