summaryrefslogtreecommitdiff
path: root/libs/hwui/RenderNode.cpp
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2014-06-18 14:21:29 -0700
committerJohn Reck <jreck@google.com>2014-06-18 14:31:52 -0700
commitc25e506f7fc08790c0532f927f31310a2ca778b7 (patch)
tree65317bcbeeb38b60a74306be22f8c37276196ffe /libs/hwui/RenderNode.cpp
parentce9f308063cc2bc7851f3f58c881da8a7271eecc (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.cpp15
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);
}