Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 939834f1 authored by Stan Iliev's avatar Stan Iliev Committed by android-build-merger
Browse files

Merge "Better error reporting for createOrUpdateLayer" into pi-dev

am: 67a58660

Change-Id: I3f3bcf4d83fcb6210baecf3b7f4e4cc2d8ad996c
parents 80b9e35d 67a58660
Loading
Loading
Loading
Loading
+1 −14
Original line number Diff line number Diff line
@@ -243,24 +243,11 @@ void RenderNode::pushLayerUpdate(TreeInfo& info) {
        return;
    }

    if (info.canvasContext.createOrUpdateLayer(this, *info.damageAccumulator)) {
    if (info.canvasContext.createOrUpdateLayer(this, *info.damageAccumulator, info.errorHandler)) {
        damageSelf(info);
    }

    if (!hasLayer()) {
        Caches::getInstance().dumpMemoryUsage();
        if (info.errorHandler) {
            std::ostringstream err;
            err << "Unable to create layer for " << getName();
            const int maxTextureSize = Caches::getInstance().maxTextureSize;
            if (getWidth() > maxTextureSize || getHeight() > maxTextureSize) {
                err << ", size " << getWidth() << "x" << getHeight() << " exceeds max size "
                    << maxTextureSize;
            } else {
                err << ", see logcat for more info";
            }
            info.errorHandler->onError(err.str());
        }
        return;
    }

+16 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <SkOverdrawColorFilter.h>
#include <SkPicture.h>
#include <SkPictureRecorder.h>
#include "TreeInfo.h"
#include "VectorDrawable.h"
#include "utils/TraceUtils.h"

@@ -158,7 +159,7 @@ void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque,
}

bool SkiaPipeline::createOrUpdateLayer(RenderNode* node, const DamageAccumulator& damageAccumulator,
                                       bool wideColorGamut) {
                                       bool wideColorGamut, ErrorHandler* errorHandler) {
    // compute the size of the surface (i.e. texture) to be allocated for this layer
    const int surfaceWidth = ceilf(node->getWidth() / float(LAYER_SIZE)) * LAYER_SIZE;
    const int surfaceHeight = ceilf(node->getHeight() / float(LAYER_SIZE)) * LAYER_SIZE;
@@ -182,6 +183,20 @@ bool SkiaPipeline::createOrUpdateLayer(RenderNode* node, const DamageAccumulator
            Matrix4 windowTransform;
            damageAccumulator.computeCurrentTransform(&windowTransform);
            node->getSkiaLayer()->inverseTransformInWindow = windowTransform;
        } else {
            String8 cachesOutput;
            mRenderThread.cacheManager().dumpMemoryUsage(cachesOutput,
                    &mRenderThread.renderState());
            ALOGE("%s", cachesOutput.string());
            if (errorHandler) {
                std::ostringstream err;
                err << "Unable to create layer for " << node->getName();
                const int maxTextureSize = DeviceInfo::get()->maxTextureSize();
                err << ", size " << info.width() << "x" << info.height() << " max size "
                    << maxTextureSize << " color type " << (int)info.colorType()
                    << " has context " << (int)(mRenderThread.getGrContext() != nullptr);
                errorHandler->onError(err.str());
            }
        }
        return true;
    }
+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ public:
                      const BakedOpRenderer::LightInfo& lightInfo) override;

    bool createOrUpdateLayer(RenderNode* node, const DamageAccumulator& damageAccumulator,
                             bool wideColorGamut) override;
                             bool wideColorGamut, ErrorHandler* errorHandler) override;

    void renderFrame(const LayerUpdateQueue& layers, const SkRect& clip,
                     const std::vector<sp<RenderNode>>& nodes, bool opaque, bool wideColorGamut,
+5 −2
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ namespace uirenderer {

class AnimationContext;
class DeferredLayerUpdater;
class ErrorHandler;
class Layer;
class Rect;
class RenderState;
@@ -74,8 +75,10 @@ public:
     *
     *  @return true if the layer has been created or updated
     */
    bool createOrUpdateLayer(RenderNode* node, const DamageAccumulator& dmgAccumulator) {
        return mRenderPipeline->createOrUpdateLayer(node, dmgAccumulator, mWideColorGamut);
    bool createOrUpdateLayer(RenderNode* node, const DamageAccumulator& dmgAccumulator,
                             ErrorHandler* errorHandler) {
        return mRenderPipeline->createOrUpdateLayer(node, dmgAccumulator, mWideColorGamut,
                errorHandler);
    }

    /**
+2 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ class Surface;
namespace uirenderer {

class DeferredLayerUpdater;
class ErrorHandler;

namespace renderthread {

@@ -68,7 +69,7 @@ public:
                              const BakedOpRenderer::LightInfo& lightInfo) = 0;
    virtual TaskManager* getTaskManager() = 0;
    virtual bool createOrUpdateLayer(RenderNode* node, const DamageAccumulator& damageAccumulator,
                                     bool wideColorGamut) = 0;
                                     bool wideColorGamut, ErrorHandler* errorHandler) = 0;
    virtual bool pinImages(std::vector<SkImage*>& mutableImages) = 0;
    virtual bool pinImages(LsaVector<sk_sp<Bitmap>>& images) = 0;
    virtual void unpinImages() = 0;
Loading