diff options
author | Stan Iliev <stani@google.com> | 2018-03-26 14:29:50 -0400 |
---|---|---|
committer | Stan Iliev <stani@google.com> | 2018-03-28 13:49:21 -0400 |
commit | 216b1572b46ecb1225c8b1a904d7f98e2e6c4b01 (patch) | |
tree | 3009b84e23a643564b0e20caa54555eadaf51dd2 /libs/hwui/renderthread/OpenGLPipeline.cpp | |
parent | 294ad785342f0eaaf41c59d819edd559450a4a2a (diff) |
Better error reporting for createOrUpdateLayer
Pass error handler down to the pipeline object, which allows
skia pipelines to print cache memory usage.
In case of an error, print arguments that were used to invoke
SkSurface::MakeRenderTarget.
Test: Ran android build on a device
Bug: 76115654
Change-Id: I5baddfa66debd505eddc3117cf94aa6ae69bedaa
Diffstat (limited to 'libs/hwui/renderthread/OpenGLPipeline.cpp')
-rw-r--r-- | libs/hwui/renderthread/OpenGLPipeline.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/libs/hwui/renderthread/OpenGLPipeline.cpp b/libs/hwui/renderthread/OpenGLPipeline.cpp index f3103fd0cbb4..876af47e256f 100644 --- a/libs/hwui/renderthread/OpenGLPipeline.cpp +++ b/libs/hwui/renderthread/OpenGLPipeline.cpp @@ -23,6 +23,7 @@ #include "OpenGLReadback.h" #include "ProfileRenderer.h" #include "renderstate/RenderState.h" +#include "TreeInfo.h" #include <cutils/properties.h> #include <strings.h> @@ -202,7 +203,8 @@ static bool layerMatchesWH(OffscreenBuffer* layer, int width, int height) { bool OpenGLPipeline::createOrUpdateLayer(RenderNode* node, const DamageAccumulator& damageAccumulator, - bool wideColorGamut) { + bool wideColorGamut, + ErrorHandler* errorHandler) { RenderState& renderState = mRenderThread.renderState(); OffscreenBufferPool& layerPool = renderState.layerPool(); bool transformUpdateNeeded = false; @@ -228,6 +230,22 @@ bool OpenGLPipeline::createOrUpdateLayer(RenderNode* node, node->getLayer()->setWindowTransform(windowTransform); } + if (!node->hasLayer()) { + Caches::getInstance().dumpMemoryUsage(); + if (errorHandler) { + std::ostringstream err; + err << "Unable to create layer for " << node->getName(); + const int maxTextureSize = Caches::getInstance().maxTextureSize; + if (node->getWidth() > maxTextureSize || node->getHeight() > maxTextureSize) { + err << ", size " << node->getWidth() << "x" << node->getHeight() + << " exceeds max size " << maxTextureSize; + } else { + err << ", see logcat for more info"; + } + errorHandler->onError(err.str()); + } + } + return transformUpdateNeeded; } |