From 6c4b6e8b0e30a9dee2decb0b5d84285be03febeb Mon Sep 17 00:00:00 2001 From: Stan Iliev Date: Thu, 1 Mar 2018 15:51:17 -0500 Subject: [PATCH] Fix a crash when grContext was deleted Fix a crash when trimMemory has occurred and then a java VectorDrawable object is deleted. Test: Ran Camera app Bug: 72837472 Change-Id: I4bdc5975a9ceccc09af17edd9905345f97c2660f --- libs/hwui/renderthread/RenderProxy.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index 4be7a57daedfd..c6a9b55f8ac1e 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -356,14 +356,21 @@ void RenderProxy::disableVsync() { void RenderProxy::repackVectorDrawableAtlas() { RenderThread& thread = RenderThread::getInstance(); thread.queue().post([&thread]() { - thread.cacheManager().acquireVectorDrawableAtlas()->repackIfNeeded(thread.getGrContext()); + // The context may be null if trimMemory executed, but then the atlas was deleted too. + if (thread.getGrContext() != nullptr) { + thread.cacheManager().acquireVectorDrawableAtlas()->repackIfNeeded( + thread.getGrContext()); + } }); } void RenderProxy::releaseVDAtlasEntries() { RenderThread& thread = RenderThread::getInstance(); thread.queue().post([&thread]() { - thread.cacheManager().acquireVectorDrawableAtlas()->delayedReleaseEntries(); + // The context may be null if trimMemory executed, but then the atlas was deleted too. + if (thread.getGrContext() != nullptr) { + thread.cacheManager().acquireVectorDrawableAtlas()->delayedReleaseEntries(); + } }); }