diff options
author | John Reck <jreck@google.com> | 2014-06-18 14:21:29 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2014-06-18 14:31:52 -0700 |
commit | c25e506f7fc08790c0532f927f31310a2ca778b7 (patch) | |
tree | 65317bcbeeb38b60a74306be22f8c37276196ffe /libs/hwui/RenderNode.cpp | |
parent | ce9f308063cc2bc7851f3f58c881da8a7271eecc (diff) |
Throw ISE on too-big-views-with-layers
Bug: 12971954
Change-Id: I3ef995e91f236014b0a72a90846ef19ce6dc42b1
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); } |