From 890a126423344e779362fc557198d8624f6f2346 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 18 Sep 2021 20:29:52 +0300 Subject: [PATCH] Use shared provider for interaction animations. --- .../view/history_view_emoji_interactions.cpp | 25 +++++++++++++------ .../view/history_view_emoji_interactions.h | 4 +++ Telegram/lib_lottie | 2 +- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Telegram/SourceFiles/history/view/history_view_emoji_interactions.cpp b/Telegram/SourceFiles/history/view/history_view_emoji_interactions.cpp index 449f36578..55ad1657f 100644 --- a/Telegram/SourceFiles/history/view/history_view_emoji_interactions.cpp +++ b/Telegram/SourceFiles/history/view/history_view_emoji_interactions.cpp @@ -145,14 +145,25 @@ std::unique_ptr EmojiInteractions::preparePlayer( }; const auto data = media->bytes(); const auto filepath = document->filepath(); - return std::make_unique( - kCachesCount, - get, - put, - Lottie::ReadContent(data, filepath), - Lottie::FrameRequest{ - _emojiSize * kSizeMultiplier * style::DevicePixelRatio() }, + const auto request = Lottie::FrameRequest{ + _emojiSize * kSizeMultiplier * style::DevicePixelRatio(), + }; + auto &weakProvider = _sharedProviders[document]; + auto shared = [&] { + if (const auto result = weakProvider.lock()) { + return result; + } + const auto result = Lottie::SinglePlayer::SharedProvider( + kCachesCount, + get, + put, + Lottie::ReadContent(data, filepath), + request, Lottie::Quality::High); + weakProvider = result; + return result; + }(); + return std::make_unique(std::move(shared), request); } void EmojiInteractions::visibleAreaUpdated( diff --git a/Telegram/SourceFiles/history/view/history_view_emoji_interactions.h b/Telegram/SourceFiles/history/view/history_view_emoji_interactions.h index 8184091df..aceca3432 100644 --- a/Telegram/SourceFiles/history/view/history_view_emoji_interactions.h +++ b/Telegram/SourceFiles/history/view/history_view_emoji_interactions.h @@ -17,6 +17,7 @@ struct EmojiInteractionPlayRequest; namespace Lottie { class SinglePlayer; +class FrameProvider; } // namespace Lottie namespace Main { @@ -81,6 +82,9 @@ private: std::vector _delayed; rpl::event_stream _updateRequests; rpl::event_stream _playStarted; + base::flat_map< + not_null, + std::weak_ptr> _sharedProviders; rpl::lifetime _lifetime; diff --git a/Telegram/lib_lottie b/Telegram/lib_lottie index 11003d490..6e3c468a9 160000 --- a/Telegram/lib_lottie +++ b/Telegram/lib_lottie @@ -1 +1 @@ -Subproject commit 11003d490b8a89b5b62e4185ea34b79565b5da16 +Subproject commit 6e3c468a9c58ecaf576c9b44599b816e5b03e98a