From b90346424b0615e58ac9d166d87a17cad39c4bb0 Mon Sep 17 00:00:00 2001 From: tobi-wan-kenobi Date: Thu, 1 Sep 2022 21:12:21 +0200 Subject: [PATCH] [core/output] rate-limit output (see #917) according to research (Jakob Nielsen '93), roughly 0.1s is what is required for the user to feel "instantaneous". based on this, rate-limit updates to only once per ~0.03s (0.1 felt really laggy for me, so let's be conservative) --- bumblebee_status/core/output.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bumblebee_status/core/output.py b/bumblebee_status/core/output.py index cee579f..21f74ae 100644 --- a/bumblebee_status/core/output.py +++ b/bumblebee_status/core/output.py @@ -1,6 +1,7 @@ import sys import json import time +import datetime import core.theme import core.event @@ -145,6 +146,7 @@ class i3(object): self.__content = {} self.__theme = theme self.__config = config + self.__previous_draw = datetime.datetime.min core.event.register("update", self.update) core.event.register("start", self.draw, "start") core.event.register("draw", self.draw, "statusline") @@ -176,6 +178,14 @@ class i3(object): self.__content[widget_id]["minimized"] = not self.__content[widget_id]["minimized"] def draw(self, what, args=None): + + if what == "statusline": + now = datetime.datetime.now() + prev = self.__previous_draw + self.__previous_draw = now + if (now - prev).total_seconds() < 0.03: + return + cb = getattr(self, what) data = cb(args) if args else cb() if "blocks" in data: