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

Commit c52ac0b9 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Add fine-grained debug layer"

parents 37e65a40 975591a7
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -4,6 +4,11 @@ LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk

HWUI_NEW_OPS := true

# Enables fine-grained GLES error checking
# If set to true, every GLES call is wrapped & error checked
# Has moderate overhead
HWUI_ENABLE_OPENGL_VALIDATION := false

hwui_src_files := \
    font/CacheTexture.cpp \
    font/Font.cpp \
@@ -157,6 +162,13 @@ ifneq (false,$(ANDROID_ENABLE_RENDERSCRIPT))
        frameworks/rs
endif

ifeq (true, $(HWUI_ENABLE_OPENGL_VALIDATION))
    hwui_cflags += -include debug/wrap_gles.h
    hwui_src_files += debug/wrap_gles.cpp
    hwui_c_includes += frameworks/native/opengl/libs/GLES2
    hwui_cflags += -DDEBUG_OPENGL=3
endif


# ------------------------
# static library
@@ -188,8 +200,8 @@ LOCAL_CFLAGS := \
        -DHWUI_NULL_GPU
LOCAL_SRC_FILES := \
        $(hwui_src_files) \
        tests/common/nullegl.cpp \
        tests/common/nullgles.cpp
        debug/nullegl.cpp \
        debug/nullgles.cpp
LOCAL_C_INCLUDES := $(hwui_c_includes) $(call hwui_proto_include)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(hwui_c_includes) $(call hwui_proto_include)

+0 −2
Original line number Diff line number Diff line
@@ -784,9 +784,7 @@ void BakedOpDispatcher::onCopyFromLayerOp(BakedOpRenderer& renderer, const CopyF
                .build();
        renderer.renderGlop(state, glop);
    }
    GL_CHECKPOINT();
    renderer.renderState().layerPool().putOrDelete(*op.layerHandle);
    GL_CHECKPOINT();
}

} // namespace uirenderer
+4 −6
Original line number Diff line number Diff line
@@ -49,7 +49,8 @@ void BakedOpRenderer::startRepaintLayer(OffscreenBuffer* offscreenBuffer, const
    // attach the texture to the FBO
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
            offscreenBuffer->texture.id(), 0);
    LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(), "startLayer FAILED");
    GL_CHECKPOINT(LOW);

    LOG_ALWAYS_FATAL_IF(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE,
            "framebuffer incomplete!");

@@ -63,7 +64,7 @@ void BakedOpRenderer::endLayer() {
    if (mRenderTarget.stencil) {
        // if stencil was used for clipping, detach it and return it to pool
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0);
        LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(), "glfbrb endlayer failed");
        GL_CHECKPOINT(MODERATE);
        mCaches.renderBufferCache.put(mRenderTarget.stencil);
        mRenderTarget.stencil = nullptr;
    }
@@ -74,8 +75,7 @@ void BakedOpRenderer::endLayer() {

    // Detach the texture from the FBO
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
    LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(), "endLayer FAILED, bound fbo = %u",
            mRenderState.getFramebuffer());
    GL_CHECKPOINT(LOW);
    mRenderState.deleteFramebuffer(mRenderTarget.frameBufferId);
    mRenderTarget.frameBufferId = 0;
}
@@ -139,8 +139,6 @@ void BakedOpRenderer::endFrame(const Rect& repaintRect) {
    mCaches.pathCache.trim();
    mCaches.tessellationCache.trim();

    GL_CHECKPOINT();

#if DEBUG_MEMORY_USAGE
    mCaches.dumpMemoryUsage();
#else
+11 −1
Original line number Diff line number Diff line
@@ -17,8 +17,18 @@
#ifndef ANDROID_HWUI_DEBUG_H
#define ANDROID_HWUI_DEBUG_H

#define DEBUG_LEVEL_HIGH 3
#define DEBUG_LEVEL_MODERATE 2
#define DEBUG_LEVEL_LOW 1
#define DEBUG_LEVEL_NONE 0

// Turn on to check for OpenGL errors on each frame
#define DEBUG_OPENGL 1
// Note DEBUG_LEVEL_HIGH for DEBUG_OPENGL is only setable by enabling
// HWUI_ENABLE_OPENGL_VALIDATION when building HWUI. Similarly if
// HWUI_ENABLE_OPENGL_VALIDATION is set then this is always DEBUG_LEVEL_HIGH
#ifndef DEBUG_OPENGL
#define DEBUG_OPENGL DEBUG_LEVEL_LOW
#endif

// Turn on to enable initialization information
#define DEBUG_INIT 0
+8 −8
Original line number Diff line number Diff line
@@ -100,30 +100,30 @@ public:
        // Relay through layers in reverse order, since layers
        // later in the list will be drawn by earlier ones
        for (int i = mLayerBuilders.size() - 1; i >= 1; i--) {
            GL_CHECKPOINT();
            GL_CHECKPOINT(MODERATE);
            LayerBuilder& layer = *(mLayerBuilders[i]);
            if (layer.renderNode) {
                // cached HW layer - can't skip layer if empty
                renderer.startRepaintLayer(layer.offscreenBuffer, layer.repaintRect);
                GL_CHECKPOINT();
                GL_CHECKPOINT(MODERATE);
                layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
                GL_CHECKPOINT();
                GL_CHECKPOINT(MODERATE);
                renderer.endLayer();
            } else if (!layer.empty()) { // save layer - skip entire layer if empty
                layer.offscreenBuffer = renderer.startTemporaryLayer(layer.width, layer.height);
                GL_CHECKPOINT();
                GL_CHECKPOINT(MODERATE);
                layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
                GL_CHECKPOINT();
                GL_CHECKPOINT(MODERATE);
                renderer.endLayer();
            }
        }

        GL_CHECKPOINT();
        GL_CHECKPOINT(MODERATE);
        const LayerBuilder& fbo0 = *(mLayerBuilders[0]);
        renderer.startFrame(fbo0.width, fbo0.height, fbo0.repaintRect);
        GL_CHECKPOINT();
        GL_CHECKPOINT(MODERATE);
        fbo0.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
        GL_CHECKPOINT();
        GL_CHECKPOINT(MODERATE);
        renderer.endFrame(fbo0.repaintRect);
    }

Loading