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

Commit 279e8c64 authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Add new property to debug non-rectangular clip operations" into jb-mr2-dev

parents 40bbc3bb 3ff0bfdd
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ void Caches::init() {

    debugLayersUpdates = false;
    debugOverdraw = false;
    debugStencilClip = kStencilHide;

    mInitialized = true;
}
@@ -132,6 +133,7 @@ void Caches::initConstraints() {
bool Caches::initProperties() {
    bool prevDebugLayersUpdates = debugLayersUpdates;
    bool prevDebugOverdraw = debugOverdraw;
    StencilClipDebug prevDebugStencilClip = debugStencilClip;

    char property[PROPERTY_VALUE_MAX];
    if (property_get(PROPERTY_DEBUG_LAYERS_UPDATES, property, NULL) > 0) {
@@ -148,8 +150,23 @@ bool Caches::initProperties() {
        debugOverdraw = false;
    }

    // See Properties.h for valid values
    if (property_get(PROPERTY_DEBUG_STENCIL_CLIP, property, NULL) > 0) {
        INIT_LOGD("  Stencil clip debug enabled: %s", property);
        if (!strcmp(property, "hide")) {
            debugStencilClip = kStencilHide;
        } else if (!strcmp(property, "highlight")) {
            debugStencilClip = kStencilShowHighlight;
        } else if (!strcmp(property, "region")) {
            debugStencilClip = kStencilShowRegion;
        }
    } else {
        debugStencilClip = kStencilHide;
    }

    return (prevDebugLayersUpdates != debugLayersUpdates) ||
            (prevDebugOverdraw != debugOverdraw);
            (prevDebugOverdraw != debugOverdraw) ||
            (prevDebugStencilClip != debugStencilClip);
}

void Caches::terminate() {
+9 −0
Original line number Diff line number Diff line
@@ -245,9 +245,18 @@ public:

    // Misc
    GLint maxTextureSize;

    // Debugging
    bool debugLayersUpdates;
    bool debugOverdraw;

    enum StencilClipDebug {
        kStencilHide,
        kStencilShowHighlight,
        kStencilShowRegion
    };
    StencilClipDebug debugStencilClip;

    TextureCache textureCache;
    LayerCache layerCache;
    RenderBufferCache renderBufferCache;
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@
#define DEBUG_RENDER_BUFFERS 0

// Turn on to make stencil operations easier to debug
// (writes 255 instead of 1 in the buffer, forces 8 bit stencil)
#define DEBUG_STENCIL 0

// Turn on to display debug info about 9patch objects
+14 −0
Original line number Diff line number Diff line
@@ -1368,6 +1368,12 @@ void OpenGLRenderer::setStencilFromClip() {
            drawRegionRects(*mSnapshot->clipRegion, 0xff000000, SkXfermode::kSrc_Mode, false);

            mCaches.stencil.enableTest();

            // Draw the region used to generate the stencil if the appropriate debug
            // mode is enabled
            if (mCaches.debugStencilClip == Caches::kStencilShowRegion) {
                drawRegionRects(*mSnapshot->clipRegion, 0x7f0000ff, SkXfermode::kSrcOver_Mode);
            }
        } else {
            mCaches.stencil.disable();
        }
@@ -1515,12 +1521,20 @@ void OpenGLRenderer::setupDraw(bool clear) {
        }
        setStencilFromClip();
    }

    mDescription.reset();

    mSetShaderColor = false;
    mColorSet = false;
    mColorA = mColorR = mColorG = mColorB = 0.0f;
    mTextureUnit = 0;
    mTrackDirtyRegions = true;

    // Enable debug highlight when what we're about to draw is tested against
    // the stencil buffer and if stencil highlight debugging is on
    mDescription.hasDebugHighlight = !mCaches.debugOverdraw &&
            mCaches.debugStencilClip == Caches::kStencilShowHighlight &&
            mCaches.stencil.isTestEnabled();
}

void OpenGLRenderer::setupDrawWithTexture(bool isAlpha8) {
+7 −0
Original line number Diff line number Diff line
@@ -83,6 +83,8 @@ namespace uirenderer {

#define PROGRAM_HAS_COLORS 42

#define PROGRAM_HAS_DEBUG_HIGHLIGHT 43

///////////////////////////////////////////////////////////////////////////////
// Types
///////////////////////////////////////////////////////////////////////////////
@@ -159,6 +161,8 @@ struct ProgramDescription {
    bool hasGammaCorrection;
    float gamma;

    bool hasDebugHighlight;

    /**
     * Resets this description. All fields are reset back to the default
     * values they hold after building a new instance.
@@ -199,6 +203,8 @@ struct ProgramDescription {

        hasGammaCorrection = false;
        gamma = 2.2f;

        hasDebugHighlight = false;
    }

    /**
@@ -267,6 +273,7 @@ struct ProgramDescription {
        if (hasGammaCorrection) key |= programid(0x1) << PROGRAM_HAS_GAMMA_CORRECTION;
        if (isSimpleGradient) key |= programid(0x1) << PROGRAM_IS_SIMPLE_GRADIENT;
        if (hasColors) key |= programid(0x1) << PROGRAM_HAS_COLORS;
        if (hasDebugHighlight) key |= programid(0x1) << PROGRAM_HAS_DEBUG_HIGHLIGHT;
        return key;
    }

Loading