diff options
author | dec05eba <dec05eba@protonmail.com> | 2022-12-17 23:06:35 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2022-12-17 23:06:35 +0100 |
commit | 88cd57714af6bfc307d41f9dfa74da45600d51e0 (patch) | |
tree | 708451908928a4da1771320f36f30218f5eff63c | |
parent | 35e754008bb449c52cb54ccbf2ed9a21e97009c5 (diff) |
Only unload the exact thumbnail that is not visible on the screen
-rw-r--r-- | include/AsyncImageLoader.hpp | 5 | ||||
-rw-r--r-- | src/AsyncImageLoader.cpp | 8 |
2 files changed, 5 insertions, 8 deletions
diff --git a/include/AsyncImageLoader.hpp b/include/AsyncImageLoader.hpp index 42e7915..2d083b5 100644 --- a/include/AsyncImageLoader.hpp +++ b/include/AsyncImageLoader.hpp @@ -25,9 +25,8 @@ namespace QuickMedia { LoadingState loading_state = LoadingState::NOT_LOADED; mgl::Texture texture; std::unique_ptr<mgl::Image> image; // Set in another thread. This should be .reset after loading it into |texture|, to save memory - size_t counter = 0; + uint32_t counter = 0; Path thumbnail_path; - std::string url; }; struct ThumbnailLoadData { @@ -91,6 +90,6 @@ namespace QuickMedia { AsyncTask<void> load_threads[NUM_IMAGE_LOAD_PARALLEL]; MessageQueue<ThumbnailLoadData> image_thumbnail_create_queue; std::unordered_map<std::string, std::shared_ptr<ThumbnailData>> thumbnails; - size_t counter = 0; + uint32_t counter = 0; }; } diff --git a/src/AsyncImageLoader.cpp b/src/AsyncImageLoader.cpp index 4fe7f0d..95bc9ca 100644 --- a/src/AsyncImageLoader.cpp +++ b/src/AsyncImageLoader.cpp @@ -315,10 +315,8 @@ namespace QuickMedia { // TODO: Instead of generating a new hash everytime to access thumbnail, cache the hash of the thumbnail url. // TODO: Cache this resize_url auto &thumbnail_data = thumbnails[url + "_" + std::to_string(resize_target_size.x) + "x" + std::to_string(resize_target_size.y)]; - if(!thumbnail_data) { + if(!thumbnail_data) thumbnail_data = std::make_shared<ThumbnailData>(); - thumbnail_data->url = url; - } thumbnail_data->counter = counter; if(thumbnail_data->thumbnail_path.data.empty()) { @@ -361,7 +359,7 @@ namespace QuickMedia { if(download.read_program.pid == -1) continue; - if(download.url == it->second->url) { + if(download.thumbnail_data.get() == it->second.get()) { reset_download(download); break; } @@ -369,7 +367,7 @@ namespace QuickMedia { } image_thumbnail_create_queue.erase_if([&it](ThumbnailLoadData &load_data) { - return load_data.path.data == it->second->url; + return load_data.thumbnail_data.get() == it->second.get(); }); it = thumbnails.erase(it); |