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

Commit 741f6bb8 authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Isolate tiling clip state from snapshot" into jb-mr2-dev

parents dc0299fb 5f803623
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -351,9 +351,9 @@ void DisplayList::outputViewProperties(const int level) {
                    level * 2, "", mTransformMatrix, MATRIX_ARGS(mTransformMatrix));
        }
    }
    if (mAlpha < 1 && !mCaching) {
        if (!mHasOverlappingRendering) {
            ALOGD("%*sSetAlpha %.2f", level * 2, "", mAlpha);
    if (mAlpha < 1) {
        if (mCaching || !mHasOverlappingRendering) {
            ALOGD("%*sScaleAlpha %.2f", level * 2, "", mAlpha);
        } else {
            int flags = SkCanvas::kHasAlphaLayer_SaveFlag;
            if (mClipChildren) {
+6 −6
Original line number Diff line number Diff line
@@ -193,6 +193,7 @@ status_t OpenGLRenderer::prepareDirty(float left, float top,
    mSaveCount = 1;

    mSnapshot->setClip(left, top, right, bottom);
    mTilingClip.set(left, top, right, bottom);
    mDirtyClip = true;

    updateLayers();
@@ -206,8 +207,7 @@ status_t OpenGLRenderer::prepareDirty(float left, float top,
    // invoked during the frame
    mSuppressTiling = mCaches.hasRegisteredFunctors();

    mTilingSnapshot = mSnapshot;
    startTiling(mTilingSnapshot, true);
    startTiling(mSnapshot, true);

    debugOverdraw(true, true);

@@ -252,9 +252,9 @@ void OpenGLRenderer::syncState() {

void OpenGLRenderer::startTiling(const sp<Snapshot>& s, bool opaque) {
    if (!mSuppressTiling) {
        Rect* clip = mTilingSnapshot->clipRect;
        Rect* clip = &mTilingClip;
        if (s->flags & Snapshot::kFlagFboTarget) {
            clip = &s->layer->clipRect;
            clip = &(s->layer->clipRect);
        }

        startTiling(*clip, s->height, opaque);
@@ -480,10 +480,10 @@ void OpenGLRenderer::debugOverdraw(bool enable, bool clear) {

void OpenGLRenderer::renderOverdraw() {
    if (mCaches.debugOverdraw && getTargetFbo() == 0) {
        const Rect* clip = mTilingSnapshot->clipRect;
        const Rect* clip = &mTilingClip;

        mCaches.enableScissor();
        mCaches.setScissor(clip->left, mTilingSnapshot->height - clip->bottom,
        mCaches.setScissor(clip->left, mFirstSnapshot->height - clip->bottom,
                clip->right - clip->left, clip->bottom - clip->top);

        mCaches.stencil.enableDebugTest(2);
+1 −1
Original line number Diff line number Diff line
@@ -947,7 +947,7 @@ private:
    // Current state
    sp<Snapshot> mSnapshot;
    // State used to define the clipping region
    sp<Snapshot> mTilingSnapshot;
    Rect mTilingClip;

    // Used to draw textured quads
    TextureVertex mMeshVertices[4];
+11 −0
Original line number Diff line number Diff line
@@ -14,6 +14,8 @@
 * limitations under the License.
 */

#define LOG_TAG "OpenGLRenderer"

#include "Snapshot.h"

#include <SkCanvas.h>
@@ -199,5 +201,14 @@ bool Snapshot::isIgnored() const {
    return invisible || empty;
}

void Snapshot::dump() const {
    ALOGD("Snapshot %p, flags %x, prev %p, height %d, ignored %d, hasComplexClip %d",
            this, flags, previous.get(), height, isIgnored(), clipRegion && !clipRegion->isEmpty());
    ALOGD("  ClipRect (at %p) %.1f %.1f %.1f %.1f",
            clipRect, clipRect->left, clipRect->top, clipRect->right, clipRect->bottom);
    ALOGD("  Transform (at %p):", transform);
    transform->dump();
}

}; // namespace uirenderer
}; // namespace android
+2 −0
Original line number Diff line number Diff line
@@ -228,6 +228,8 @@ public:
     */
    float alpha;

    void dump() const;

private:
    void ensureClipRegion();
    void copyClipRectFromRegion();