Clear native shader when Paint shader changes
Since Recents never goes away that means TaskViewThumbnail never goes away which in turn means mDrawPaint never goes away. mDrawPaint has a setShader(null) called on it to release the BitmapShader it was previously drawn with, but that change didn't push down to native until the next time the paint was used. As a result, the Paint held on to a reference to the bitmap. The fix is simple, when the shader is changed simply push down an immediate clear of the native shader. Since the bitmap of a BitmapShader isn't changeable we don't need to worry about clearing references for shader mutation, merely when Paint#setShader() happens. Bug: 38258699 Test: Open & close recents, observe EGL memory immediately returns to sub-5MB. Change-Id: I6742efa8ae8dfca76b62a06bc1a1a00646feba64
This commit is contained in:
@@ -1036,6 +1036,8 @@ public class Paint {
|
||||
// old shader's pointer may be reused by another shader allocation later
|
||||
if (mShader != shader) {
|
||||
mNativeShader = -1;
|
||||
// Release any native references to the old shader content
|
||||
nSetShader(mNativePaint, 0);
|
||||
}
|
||||
// Defer setting the shader natively until getNativeInstance() is called
|
||||
mShader = shader;
|
||||
|
||||
Reference in New Issue
Block a user