diff options
author | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-22 02:12:49 +0000 |
---|---|---|
committer | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-22 02:12:49 +0000 |
commit | f8bd2e8cf58a8cae0e5d1f6e63dd41b2dde5f5b2 (patch) | |
tree | 5d9d5c443655cd3de853cb4de75cf1f38d621dd3 /cc | |
parent | 7ebed72c88826819cdd70556ec1e8b12a9bc5b1d (diff) | |
download | chromium_src-f8bd2e8cf58a8cae0e5d1f6e63dd41b2dde5f5b2.zip chromium_src-f8bd2e8cf58a8cae0e5d1f6e63dd41b2dde5f5b2.tar.gz chromium_src-f8bd2e8cf58a8cae0e5d1f6e63dd41b2dde5f5b2.tar.bz2 |
[cc] Color evicted vs. invalidated checkerboard tiles differently
If --show-debug-layer-borders are on, tint checkerboards differently.
* Light red = texture backing for tile was evicted or never painted
* Light blue = we have a texture backing, but it's been invalidated
BUG=150610
Review URL: https://chromiumcodereview.appspot.com/10962042
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158148 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r-- | cc/CCCheckerboardDrawQuad.cpp | 7 | ||||
-rw-r--r-- | cc/CCCheckerboardDrawQuad.h | 9 | ||||
-rw-r--r-- | cc/CCDrawQuadTest.cpp | 4 | ||||
-rw-r--r-- | cc/CCRenderPassTest.cpp | 2 | ||||
-rw-r--r-- | cc/CCRendererGL.cpp | 3 | ||||
-rw-r--r-- | cc/CCTiledLayerImpl.cpp | 35 | ||||
-rw-r--r-- | cc/CCTiledLayerImpl.h | 1 | ||||
-rw-r--r-- | cc/ShaderChromium.cpp | 9 | ||||
-rw-r--r-- | cc/ShaderChromium.h | 2 | ||||
-rw-r--r-- | cc/TiledLayerChromium.cpp | 9 |
10 files changed, 67 insertions, 14 deletions
diff --git a/cc/CCCheckerboardDrawQuad.cpp b/cc/CCCheckerboardDrawQuad.cpp index 4e15e48..62d946e 100644 --- a/cc/CCCheckerboardDrawQuad.cpp +++ b/cc/CCCheckerboardDrawQuad.cpp @@ -8,13 +8,14 @@ namespace cc { -PassOwnPtr<CCCheckerboardDrawQuad> CCCheckerboardDrawQuad::create(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect) +PassOwnPtr<CCCheckerboardDrawQuad> CCCheckerboardDrawQuad::create(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, SkColor color) { - return adoptPtr(new CCCheckerboardDrawQuad(sharedQuadState, quadRect)); + return adoptPtr(new CCCheckerboardDrawQuad(sharedQuadState, quadRect, color)); } -CCCheckerboardDrawQuad::CCCheckerboardDrawQuad(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect) +CCCheckerboardDrawQuad::CCCheckerboardDrawQuad(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, SkColor color) : CCDrawQuad(sharedQuadState, CCDrawQuad::Checkerboard, quadRect) + , m_color(color) { } diff --git a/cc/CCCheckerboardDrawQuad.h b/cc/CCCheckerboardDrawQuad.h index f8bc01f..97110f5 100644 --- a/cc/CCCheckerboardDrawQuad.h +++ b/cc/CCCheckerboardDrawQuad.h @@ -6,6 +6,7 @@ #define CCCheckerboardDrawQuad_h #include "CCDrawQuad.h" +#include "SkColor.h" #include <wtf/PassOwnPtr.h> namespace cc { @@ -14,11 +15,15 @@ namespace cc { class CCCheckerboardDrawQuad : public CCDrawQuad { public: - static PassOwnPtr<CCCheckerboardDrawQuad> create(const CCSharedQuadState*, const IntRect&); + static PassOwnPtr<CCCheckerboardDrawQuad> create(const CCSharedQuadState*, const IntRect&, SkColor); + + SkColor color() const { return m_color; }; static const CCCheckerboardDrawQuad* materialCast(const CCDrawQuad*); private: - CCCheckerboardDrawQuad(const CCSharedQuadState*, const IntRect&); + CCCheckerboardDrawQuad(const CCSharedQuadState*, const IntRect&, SkColor); + + SkColor m_color; }; #pragma pack(pop) diff --git a/cc/CCDrawQuadTest.cpp b/cc/CCDrawQuadTest.cpp index 7e7a21e..82cff73 100644 --- a/cc/CCDrawQuadTest.cpp +++ b/cc/CCDrawQuadTest.cpp @@ -161,8 +161,10 @@ void compareDrawQuad(CCDrawQuad* quad, CCDrawQuad* copy, CCSharedQuadState* copy TEST(CCDrawQuadTest, copyCheckerboardDrawQuad) { + SkColor color = 0xfabb0011; CREATE_SHARED_STATE(); - CREATE_QUAD_0(CCCheckerboardDrawQuad); + CREATE_QUAD_1(CCCheckerboardDrawQuad, color); + EXPECT_EQ(color, copyQuad->color()); } TEST(CCDrawQuadTest, copyDebugBorderDrawQuad) diff --git a/cc/CCRenderPassTest.cpp b/cc/CCRenderPassTest.cpp index 0d5bad4..48bf07e 100644 --- a/cc/CCRenderPassTest.cpp +++ b/cc/CCRenderPassTest.cpp @@ -66,7 +66,7 @@ TEST(CCRenderPassTest, copyShouldBeIdenticalExceptIdAndQuads) // Stick a quad in the pass, this should not get copied. CCTestRenderPass* testPass = static_cast<CCTestRenderPass*>(pass.get()); testPass->sharedQuadStateList().append(CCSharedQuadState::create(WebTransformationMatrix(), IntRect(), IntRect(), 1, false)); - testPass->quadList().append(CCCheckerboardDrawQuad::create(testPass->sharedQuadStateList().last(), IntRect())); + testPass->quadList().append(CCCheckerboardDrawQuad::create(testPass->sharedQuadStateList().last(), IntRect(), SkColor())); CCRenderPass::Id newId(63, 4); diff --git a/cc/CCRendererGL.cpp b/cc/CCRendererGL.cpp index f86e96c..570b8f1 100644 --- a/cc/CCRendererGL.cpp +++ b/cc/CCRendererGL.cpp @@ -284,6 +284,9 @@ void CCRendererGL::drawCheckerboardQuad(const DrawingFrame& frame, const CCCheck ASSERT(program && program->initialized()); GLC(context(), context()->useProgram(program->program())); + SkColor color = quad->color(); + GLC(context(), context()->uniform4f(program->fragmentShader().colorLocation(), SkColorGetR(color) / 255.0, SkColorGetG(color) / 255.0, SkColorGetB(color) / 255.0, 1)); + IntRect tileRect = quad->quadRect(); float texOffsetX = tileRect.x(); float texOffsetY = tileRect.y(); diff --git a/cc/CCTiledLayerImpl.cpp b/cc/CCTiledLayerImpl.cpp index 404cfa6d..1a9c100 100644 --- a/cc/CCTiledLayerImpl.cpp +++ b/cc/CCTiledLayerImpl.cpp @@ -35,6 +35,16 @@ static const int debugTileBorderMissingTileColorRed = 255; static const int debugTileBorderMissingTileColorGreen = 0; static const int debugTileBorderMissingTileColorBlue = 0; +static const int defaultCheckerboardColorRed = 241; +static const int defaultCheckerboardColorGreen = 241; +static const int defaultCheckerboardColorBlue = 241; +static const int debugTileEvictedCheckerboardColorRed = 255; +static const int debugTileEvictedCheckerboardColorGreen = 200; +static const int debugTileEvictedCheckerboardColorBlue = 200; +static const int debugTileInvalidatedCheckerboardColorRed = 128; +static const int debugTileInvalidatedCheckerboardColorGreen = 200; +static const int debugTileInvalidatedCheckerboardColorBlue = 245; + class DrawableTile : public CCLayerTilingData::Tile { WTF_MAKE_NONCOPYABLE(DrawableTile); public: @@ -146,9 +156,19 @@ void CCTiledLayerImpl::appendQuads(CCQuadSink& quadSink, CCAppendQuadsData& appe continue; if (!tile || !tile->resourceId()) { - if (drawCheckerboardForMissingTiles()) - appendQuadsData.hadMissingTiles |= quadSink.append(CCCheckerboardDrawQuad::create(sharedQuadState, tileRect), appendQuadsData); - else + if (drawCheckerboardForMissingTiles()) { + SkColor defaultColor = SkColorSetRGB(defaultCheckerboardColorRed, defaultCheckerboardColorGreen, defaultCheckerboardColorBlue); + SkColor evictedColor = SkColorSetRGB(debugTileEvictedCheckerboardColorRed, debugTileEvictedCheckerboardColorGreen, debugTileEvictedCheckerboardColorBlue); + SkColor invalidatedColor = SkColorSetRGB(debugTileInvalidatedCheckerboardColorRed, debugTileEvictedCheckerboardColorGreen, debugTileEvictedCheckerboardColorBlue); + + SkColor checkerColor; + if (hasDebugBorders()) + checkerColor = tile ? invalidatedColor : evictedColor; + else + checkerColor = defaultColor; + + appendQuadsData.hadMissingTiles |= quadSink.append(CCCheckerboardDrawQuad::create(sharedQuadState, tileRect, checkerColor), appendQuadsData); + } else appendQuadsData.hadMissingTiles |= quadSink.append(CCSolidColorDrawQuad::create(sharedQuadState, tileRect, backgroundColor()), appendQuadsData); continue; } @@ -198,6 +218,15 @@ void CCTiledLayerImpl::pushTileProperties(int i, int j, CCResourceProvider::Reso tile->setOpaqueRect(opaqueRect); } +void CCTiledLayerImpl::pushInvalidTile(int i, int j) +{ + DrawableTile* tile = tileAt(i, j); + if (!tile) + tile = createTile(i, j); + tile->setResourceId(0); + tile->setOpaqueRect(IntRect()); +} + Region CCTiledLayerImpl::visibleContentOpaqueRegion() const { if (m_skipsDraw) diff --git a/cc/CCTiledLayerImpl.h b/cc/CCTiledLayerImpl.h index 13edb05..7026d31 100644 --- a/cc/CCTiledLayerImpl.h +++ b/cc/CCTiledLayerImpl.h @@ -30,6 +30,7 @@ public: void setSkipsDraw(bool skipsDraw) { m_skipsDraw = skipsDraw; } void setTilingData(const CCLayerTilingData& tiler); void pushTileProperties(int, int, CCResourceProvider::ResourceId, const IntRect& opaqueRect); + void pushInvalidTile(int, int); void setContentsSwizzled(bool contentsSwizzled) { m_contentsSwizzled = contentsSwizzled; } bool contentsSwizzled() const { return m_contentsSwizzled; } diff --git a/cc/ShaderChromium.cpp b/cc/ShaderChromium.cpp index f08adc1..cf485c1 100644 --- a/cc/ShaderChromium.cpp +++ b/cc/ShaderChromium.cpp @@ -846,15 +846,17 @@ void FragmentShaderCheckerboard::init(WebGraphicsContext3D* context, unsigned pr "alpha", "texTransform", "frequency", + "color", }; - int locations[3]; + int locations[4]; getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex); m_alphaLocation = locations[0]; m_texTransformLocation = locations[1]; m_frequencyLocation = locations[2]; - ASSERT(m_alphaLocation != -1 && m_texTransformLocation != -1 && m_frequencyLocation != -1); + m_colorLocation = locations[3]; + ASSERT(m_alphaLocation != -1 && m_texTransformLocation != -1 && m_frequencyLocation != -1 && m_colorLocation != -1); } std::string FragmentShaderCheckerboard::getShaderString() const @@ -868,10 +870,11 @@ std::string FragmentShaderCheckerboard::getShaderString() const uniform float alpha; uniform float frequency; uniform vec4 texTransform; + uniform vec4 color; void main() { vec4 color1 = vec4(1.0, 1.0, 1.0, 1.0); - vec4 color2 = vec4(0.945, 0.945, 0.945, 1.0); + vec4 color2 = color; vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texTransform.xy; vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); float picker = abs(coord.x - coord.y); diff --git a/cc/ShaderChromium.h b/cc/ShaderChromium.h index 753d92a..2518382 100644 --- a/cc/ShaderChromium.h +++ b/cc/ShaderChromium.h @@ -338,10 +338,12 @@ public: int alphaLocation() const { return m_alphaLocation; } int texTransformLocation() const { return m_texTransformLocation; } int frequencyLocation() const { return m_frequencyLocation; } + int colorLocation() const { return m_colorLocation; } private: int m_alphaLocation; int m_texTransformLocation; int m_frequencyLocation; + int m_colorLocation; }; } // namespace cc diff --git a/cc/TiledLayerChromium.cpp b/cc/TiledLayerChromium.cpp index 75bd57d..4a28e8a 100644 --- a/cc/TiledLayerChromium.cpp +++ b/cc/TiledLayerChromium.cpp @@ -215,13 +215,20 @@ void TiledLayerChromium::pushPropertiesTo(CCLayerImpl* layer) // FIXME: This should not ever be null. if (!tile) continue; + tile->isInUseOnImpl = false; + if (!tile->managedTexture()->haveBackingTexture()) { + // Evicted tiles get deleted from both layers invalidTiles.append(tile); continue; } - if (!tile->validForFrame) + + if (!tile->validForFrame) { + // Invalidated tiles are set so they can get different debug colors. + tiledLayer->pushInvalidTile(i, j); continue; + } tiledLayer->pushTileProperties(i, j, tile->managedTexture()->resourceId(), tile->opaqueRect()); tile->isInUseOnImpl = true; |