From fab020f2d0b202634c4f4ddfc4296eafc669e071 Mon Sep 17 00:00:00 2001 From: sandos Date: Mon, 12 Dec 2011 22:22:03 +0100 Subject: [PATCH] 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()