summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-22 02:12:49 +0000
committerenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-22 02:12:49 +0000
commitf8bd2e8cf58a8cae0e5d1f6e63dd41b2dde5f5b2 (patch)
tree5d9d5c443655cd3de853cb4de75cf1f38d621dd3 /cc
parent7ebed72c88826819cdd70556ec1e8b12a9bc5b1d (diff)
downloadchromium_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.cpp7
-rw-r--r--cc/CCCheckerboardDrawQuad.h9
-rw-r--r--cc/CCDrawQuadTest.cpp4
-rw-r--r--cc/CCRenderPassTest.cpp2
-rw-r--r--cc/CCRendererGL.cpp3
-rw-r--r--cc/CCTiledLayerImpl.cpp35
-rw-r--r--cc/CCTiledLayerImpl.h1
-rw-r--r--cc/ShaderChromium.cpp9
-rw-r--r--cc/ShaderChromium.h2
-rw-r--r--cc/TiledLayerChromium.cpp9
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;