From fab020f2d0b202634c4f4ddfc4296eafc669e071 Mon Sep 17 00:00:00 2001 From: sandos Date: Mon, 12 Dec 2011 22:22:03 +0100 Subject: [PATCH 1/3] performance of playlistinfo and status not dependent on playlist length --- mopidy/backends/base/current_playlist.py | 10 ++++++++++ mopidy/frontends/mpd/protocol/current_playlist.py | 6 ++++++ mopidy/frontends/mpd/protocol/status.py | 4 ++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/mopidy/backends/base/current_playlist.py b/mopidy/backends/base/current_playlist.py index 17125ac0..367f9c5d 100644 --- a/mopidy/backends/base/current_playlist.py +++ b/mopidy/backends/base/current_playlist.py @@ -1,6 +1,7 @@ from copy import copy import logging import random +import pprint from mopidy.listeners import BackendListener from mopidy.models import CpTrack @@ -28,6 +29,7 @@ class CurrentPlaylistController(object): Read-only. """ + logger.debug(u'current_playlist.cp_tracks') return [copy(ct) for ct in self._cp_tracks] @property @@ -37,8 +39,16 @@ class CurrentPlaylistController(object): Read-only. """ + logger.debug(u'current_playlist.tracks()') return [ct[1] for ct in self._cp_tracks] + @property + def tracks_len(self): + """ + Length of current playlist + """ + return len(self._cp_tracks) + @property def version(self): """ diff --git a/mopidy/frontends/mpd/protocol/current_playlist.py b/mopidy/frontends/mpd/protocol/current_playlist.py index c7136804..c566bf7e 100644 --- a/mopidy/frontends/mpd/protocol/current_playlist.py +++ b/mopidy/frontends/mpd/protocol/current_playlist.py @@ -254,6 +254,12 @@ def playlistinfo(context, songpos=None, end = songpos + 1 if start == -1: end = None + else: + #Fetch one single track, hot code path (avoid deep-copying the entire playlist) + res = context.backend.current_playlist.get(cpid=songpos).get() + cpids = [res.cpid] + l = [res.track] + return tracks_to_mpd_format(l, 0, 1, cpids=cpids) cpids = [ct[0] for ct in context.backend.current_playlist.cp_tracks.get()] return tracks_to_mpd_format( diff --git a/mopidy/frontends/mpd/protocol/status.py b/mopidy/frontends/mpd/protocol/status.py index 20a66775..b0bc7ad7 100644 --- a/mopidy/frontends/mpd/protocol/status.py +++ b/mopidy/frontends/mpd/protocol/status.py @@ -166,7 +166,7 @@ def status(context): decimal places for millisecond precision. """ futures = { - 'current_playlist.tracks': context.backend.current_playlist.tracks, + 'current_playlist.tracks_len': context.backend.current_playlist.tracks_len, 'current_playlist.version': context.backend.current_playlist.version, 'mixer.volume': context.mixer.volume, 'playback.consume': context.backend.playback.consume, @@ -213,7 +213,7 @@ def _status_consume(futures): return 0 def _status_playlist_length(futures): - return len(futures['current_playlist.tracks'].get()) + return futures['current_playlist.tracks_len'].get() def _status_playlist_version(futures): return futures['current_playlist.version'].get() From 1414c2394b1f46ce6c0f2c5825353cbb9e099d66 Mon Sep 17 00:00:00 2001 From: sandos Date: Mon, 12 Dec 2011 22:23:28 +0100 Subject: [PATCH 2/3] Remove unused import --- mopidy/backends/base/current_playlist.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mopidy/backends/base/current_playlist.py b/mopidy/backends/base/current_playlist.py index 367f9c5d..85c4e135 100644 --- a/mopidy/backends/base/current_playlist.py +++ b/mopidy/backends/base/current_playlist.py @@ -1,7 +1,6 @@ from copy import copy import logging import random -import pprint from mopidy.listeners import BackendListener from mopidy.models import CpTrack From 5b1d77e79f27acb77c3339e1f1ae28b9071cfbcd Mon Sep 17 00:00:00 2001 From: sandos Date: Mon, 12 Dec 2011 22:26:33 +0100 Subject: [PATCH 3/3] Remove some logging --- mopidy/backends/base/current_playlist.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/mopidy/backends/base/current_playlist.py b/mopidy/backends/base/current_playlist.py index 85c4e135..1134984b 100644 --- a/mopidy/backends/base/current_playlist.py +++ b/mopidy/backends/base/current_playlist.py @@ -28,7 +28,6 @@ class CurrentPlaylistController(object): Read-only. """ - logger.debug(u'current_playlist.cp_tracks') return [copy(ct) for ct in self._cp_tracks] @property @@ -38,7 +37,6 @@ class CurrentPlaylistController(object): Read-only. """ - logger.debug(u'current_playlist.tracks()') return [ct[1] for ct in self._cp_tracks] @property