diff options
| -rw-r--r-- | libs/hwui/hwui/AnimatedImageThread.cpp | 9 | ||||
| -rw-r--r-- | libs/hwui/hwui/AnimatedImageThread.h | 1 |
2 files changed, 7 insertions, 3 deletions
diff --git a/libs/hwui/hwui/AnimatedImageThread.cpp b/libs/hwui/hwui/AnimatedImageThread.cpp index c8990039875e..3d5841d308fb 100644 --- a/libs/hwui/hwui/AnimatedImageThread.cpp +++ b/libs/hwui/hwui/AnimatedImageThread.cpp @@ -22,13 +22,16 @@ namespace android { namespace uirenderer { AnimatedImageThread& AnimatedImageThread::getInstance() { - static AnimatedImageThread* sInstance = new AnimatedImageThread(); - return *sInstance; + [[clang::no_destroy]] static sp<AnimatedImageThread> sInstance = []() { + sp<AnimatedImageThread> thread = sp<AnimatedImageThread>::make(); + thread->start("AnimatedImageThread"); + return thread; + }(); + return *sInstance.get(); } AnimatedImageThread::AnimatedImageThread() { setpriority(PRIO_PROCESS, 0, PRIORITY_NORMAL + PRIORITY_MORE_FAVORABLE); - start("AnimatedImageThread"); } std::future<AnimatedImageDrawable::Snapshot> AnimatedImageThread::decodeNextFrame( diff --git a/libs/hwui/hwui/AnimatedImageThread.h b/libs/hwui/hwui/AnimatedImageThread.h index 9e3537430d5a..fac80e5310e8 100644 --- a/libs/hwui/hwui/AnimatedImageThread.h +++ b/libs/hwui/hwui/AnimatedImageThread.h @@ -37,6 +37,7 @@ public: std::future<AnimatedImageDrawable::Snapshot> reset(const sk_sp<AnimatedImageDrawable>&); private: + friend sp<AnimatedImageThread>; AnimatedImageThread(); }; |