diff options
author | sergeyv <sergeyv@google.com> | 2017-01-19 15:37:02 -0800 |
---|---|---|
committer | sergeyv <sergeyv@google.com> | 2017-01-30 16:42:41 -0800 |
commit | 3e9999bd866fac71c72e6b484a9836c87c328a08 (patch) | |
tree | 5f4f3303c211e618bb8daed4b62f8ebfecccd530 /libs/hwui/DeferredLayerUpdater.h | |
parent | df9a4f9a7c599ccd2348d429e6a6f0a5a415f780 (diff) |
Explicitly destroy Layer in DeferredLayerUpdater on destroyHardwareResources()
Change-Id: I0987104eabda9a2a302b9e765213aad48f93aea4
Test: refactoring CL. Existing tests still pass
bug:33753499
Diffstat (limited to 'libs/hwui/DeferredLayerUpdater.h')
-rw-r--r-- | libs/hwui/DeferredLayerUpdater.h | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/libs/hwui/DeferredLayerUpdater.h b/libs/hwui/DeferredLayerUpdater.h index 3814be2cbec4..064b724c5e5f 100644 --- a/libs/hwui/DeferredLayerUpdater.h +++ b/libs/hwui/DeferredLayerUpdater.h @@ -32,13 +32,20 @@ namespace android { namespace uirenderer { +class RenderState; + // Container to hold the properties a layer should be set to at the start // of a render pass class DeferredLayerUpdater : public VirtualLightRefBase { public: // Note that DeferredLayerUpdater assumes it is taking ownership of the layer // and will not call incrementRef on it as a result. - ANDROID_API explicit DeferredLayerUpdater(Layer* layer); + typedef std::function<Layer*(RenderState& renderState, uint32_t layerWidth, + uint32_t layerHeight, SkColorFilter* colorFilter, int alpha, + SkBlendMode mode, bool blend)> CreateLayerFn; + ANDROID_API explicit DeferredLayerUpdater(RenderState& renderState, + CreateLayerFn createLayerFn, Layer::Api layerApi); + ANDROID_API ~DeferredLayerUpdater(); ANDROID_API bool setSize(int width, int height) { @@ -97,20 +104,30 @@ public: void updateLayer(bool forceFilter, GLenum renderTarget, const float* textureTransform); + void destroyLayer(); + + Layer::Api getBackingLayerApi() { + return mLayerApi; + } + private: + RenderState& mRenderState; + // Generic properties - int mWidth; - int mHeight; - bool mBlend; - SkColorFilter* mColorFilter; - int mAlpha; - SkBlendMode mMode; + int mWidth = 0; + int mHeight = 0; + bool mBlend = false; + SkColorFilter* mColorFilter = nullptr; + int mAlpha = 255; + SkBlendMode mMode = SkBlendMode::kSrcOver; sp<GLConsumer> mSurfaceTexture; SkMatrix* mTransform; bool mNeedsGLContextAttach; bool mUpdateTexImage; Layer* mLayer; + Layer::Api mLayerApi; + CreateLayerFn mCreateLayerFn; void doUpdateTexImage(); void doUpdateVkTexImage(); |