-
Notifications
You must be signed in to change notification settings - Fork 24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Performance Issues and discussion #39
Comments
These are the times on my machine when showing all artists: "get albums" also includes fetching the covers. When loading covers directly with MPD this changes to: So, it's not the bulk but still a great factor. "render covers" is the conversation from binary data or a file path to a GdkPixbuf, but this is not blocking the UI. In fact only "get artists" is really blocking the UI, "get albums" can block the UI when an artist with many albums gets processed, this may also be the issue 1.1.
Yes, that's right but it doesn't take much time. Performing this once when "AlbumWindow._refresh" is executed would be fine but at application startup is not possible since the cover size might change.
I'd really like to use |
What are you using to measure these timings?
Can you point from which commit was |
I'm using the
Version 0.6.0 was the first version with idle and 0.8.3 the last. Commit 7391686 introduced it and commit db7a8e9 removed it. |
According point 1.:
Yes, that's right but I like to avoid a client side cache or database.
I'm open for suggestions. But I think this is not easy I've spend much time on this and it's already faster than it was. |
You can test with cProfile without changing the code. I'm using it as |
How long does the whole process of showing all artists take on your setup?
Ok, but this is limited by MPD the function just fetches the covers with a standard MPD command. Any suggestions on speeding this up? |
7m42s ~ 8m51s |
Ok, that's way to long. Can you send me a list similar to mine so I can see how long each step takes? |
Will a python cProfile output do? |
I never used them before but I think it'll to. Btw another question: You said your GUI is blocking, when and how long? |
My bad, I just went back and checked it, it doesn't actually block but it becomes very "sluggish" and can give the impression that it's blocked. |
I think it should be possible to reduce the time needed for get_albums by using "tagtypes" and "count". I'll look into it after the next release. |
968158d uses |
Not much of an improvement seen here, it's still taking several minutes. |
Ok, but MPD traffic is now at a minimum. I currently don't see any room for improvements. May I ask how large your collect is? Mine is about 5000 songs and 400 albums. Just to see if the time grows linear with the number of albums/songs. |
Hi! Reading this thread again I noticed I forgot to answer one of your questions. Sorry about that.
Right clicking on "all artists" will open a small menu. Just click on "play" and activate the shuffle mode. This method requires the maximum playlist size (16384) to be at least the number of all your songs. For larger collection this could be a solution, but I've never tried it. |
Sure, feel free to split the issue. About the shuffle, I'll take a look on it. I don't think playing around with mpd config max playlist size will be the answer here (unpredictable behavior depending on different libraries/users). |
What do you mean by that? I'm still using automatic updates and it is working just fine without the problems you mentioned in the first comment.
I think 16384 is now a fixed value in mpd it either is sufficient or not. |
Not related to mpdevil. I changed it since it's slightly faster for bulk updating metadata (when editing multiple cuesheets for example) since each file change triggers a db disk write.
It doesn't seem to be fixed according to https://mpd.readthedocs.io/en/latest/user.html#resource-limitations |
Ok, I see.
Ok, that is weird it is not mentioned in the So I'll close this issue. Feel free to open a new issue if you find anything broken related to the shuffling. |
1. all artists is unusable with very large library collections, the indexing is too slow.
Caching results and cover images could result in performance boosts. Having it work asynchronously can improve responsiveness too.
GdkPixbuf.Pixbuf.new_from_file_at_size()
gets performed multiple times for cover-less albums/tracks when it can be cached/done once at application startup. (it's using the default CD image after all)2. mpd update handling: currently done using mpd protocol command
status
. A better way would be to useidle
command (python-mpd2 hasMPDClient.idle
) that can inform when a database update was finished which can then trigger a mpdevil update instead of triggering multiple updates while mpd hasn't even finished (every "mpdevil update" resets the library navigation position). This might not be too bad if mpd is updated manually but under auto updates from mpd it's infuriating to have the UI jump around at times or even unusable if the library changes are large.Others:
I can offer to look into 1.2 and 2 but I doubt I can be of any help about the rest of the points.
The text was updated successfully, but these errors were encountered: