diff options
Diffstat (limited to 'libs/hwui/RenderNode.cpp')
| -rw-r--r-- | libs/hwui/RenderNode.cpp | 15 | 
1 files changed, 14 insertions, 1 deletions
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index 05f4edf6e75e..3d93383e2c49 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -20,6 +20,7 @@  #include "RenderNode.h"  #include <algorithm> +#include <string>  #include <SkCanvas.h>  #include <algorithm> @@ -158,7 +159,10 @@ void RenderNode::pushLayerUpdate(TreeInfo& info) {          applyLayerPropertiesToLayer(info);          damageSelf(info);      } else if (mLayer->layer.getWidth() != getWidth() || mLayer->layer.getHeight() != getHeight()) { -        LayerRenderer::resizeLayer(mLayer, getWidth(), getHeight()); +        if (!LayerRenderer::resizeLayer(mLayer, getWidth(), getHeight())) { +            LayerRenderer::destroyLayer(mLayer); +            mLayer = 0; +        }          damageSelf(info);      } @@ -166,6 +170,15 @@ void RenderNode::pushLayerUpdate(TreeInfo& info) {      info.damageAccumulator->peekAtDirty(&dirty);      info.damageAccumulator->popTransform(); +    if (!mLayer) { +        if (info.errorHandler) { +            std::string msg = "Unable to create layer for "; +            msg += getName(); +            info.errorHandler->onError(msg); +        } +        return; +    } +      if (!dirty.isEmpty()) {          mLayer->updateDeferred(this, dirty.fLeft, dirty.fTop, dirty.fRight, dirty.fBottom);      }  |