summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/hwui/hwui/AnimatedImageThread.cpp9
-rw-r--r--libs/hwui/hwui/AnimatedImageThread.h1
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();
};