[gnome-music] player: rate-limit sync_playing signals: 1 per second



commit f133fb0b2273b845e89e02d70268d1875a0e1026
Author: Vadim Rutkovsky <vrutkovs redhat com>
Date:   Wed Aug 5 13:12:55 2015 +0200

    player: rate-limit sync_playing signals: 1 per second

 gnomemusic/__init__.py |   18 ++++++++++++++++++
 gnomemusic/player.py   |    4 ++--
 2 files changed, 20 insertions(+), 2 deletions(-)
---
diff --git a/gnomemusic/__init__.py b/gnomemusic/__init__.py
index 1787055..21039a2 100644
--- a/gnomemusic/__init__.py
+++ b/gnomemusic/__init__.py
@@ -64,6 +64,24 @@ def log(fn):
     return wrapped
 
 
+def RateLimited(maxPerSecond):
+    minInterval = 1.0 / float(maxPerSecond)
+
+    def decorate(func):
+        lastTimeCalled = [0.0]
+
+        def rateLimitedFunction(*args, **kargs):
+            elapsed = time.clock() - lastTimeCalled[0]
+            leftToWait = minInterval - elapsed
+            if leftToWait > 0:
+                return
+            ret = func(*args, **kargs)
+            lastTimeCalled[0] = time.clock()
+            return ret
+        return rateLimitedFunction
+    return decorate
+
+
 class TrackerWrapper:
     class __TrackerWrapper:
         def __init__(self):
diff --git a/gnomemusic/player.py b/gnomemusic/player.py
index caca45a..54ffdfb 100644
--- a/gnomemusic/player.py
+++ b/gnomemusic/player.py
@@ -51,7 +51,7 @@ import requests
 import time
 from threading import Thread
 
-from gnomemusic import log
+from gnomemusic import log, RateLimited
 import logging
 logger = logging.getLogger(__name__)
 
@@ -241,7 +241,6 @@ class Player(GObject.GObject):
         self._sync_prev_next()
         self._sync_repeat_image()
 
-    @log
     def _on_bus_state_changed(self, bus, message):
         # Note: not all state changes are signaled through here, in particular
         # transitions between Gst.State.READY and Gst.State.NULL are never async
@@ -546,6 +545,7 @@ class Player(GObject.GObject):
         return self._get_playing()
 
     @log
+    @RateLimited(1)
     def _sync_playing(self):
         if self._get_playing():
             image = self._pauseImage



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]