summaryrefslogtreecommitdiffstats
path: root/Source/WebCore
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore')
-rw-r--r--Source/WebCore/platform/graphics/android/BaseRenderer.cpp6
-rw-r--r--Source/WebCore/platform/graphics/android/BaseRenderer.h7
-rw-r--r--Source/WebCore/platform/graphics/android/GLUtils.cpp6
-rw-r--r--Source/WebCore/platform/graphics/android/GaneshRenderer.h3
-rw-r--r--Source/WebCore/platform/graphics/android/RasterRenderer.cpp5
-rw-r--r--Source/WebCore/platform/graphics/android/RasterRenderer.h1
-rw-r--r--Source/WebCore/platform/graphics/android/TransferQueue.cpp4
-rw-r--r--Source/WebCore/platform/graphics/android/TransferQueue.h2
8 files changed, 25 insertions, 9 deletions
diff --git a/Source/WebCore/platform/graphics/android/BaseRenderer.cpp b/Source/WebCore/platform/graphics/android/BaseRenderer.cpp
index fb95e14..fba62b7 100644
--- a/Source/WebCore/platform/graphics/android/BaseRenderer.cpp
+++ b/Source/WebCore/platform/graphics/android/BaseRenderer.cpp
@@ -88,7 +88,7 @@ void BaseRenderer::drawTileInfo(SkCanvas* canvas,
canvas->drawText(str, strlen(str), 20, 15, paint);
}
-void BaseRenderer::renderTiledContent(const TileRenderInfo& renderInfo)
+void BaseRenderer::renderTiledContent(TileRenderInfo& renderInfo)
{
const bool visualIndicator = TilesManager::instance()->getShowVisualIndicator();
const SkSize& tileSize = renderInfo.tileSize;
@@ -112,6 +112,10 @@ void BaseRenderer::renderTiledContent(const TileRenderInfo& renderInfo)
canvas.translate(-renderInfo.x * tileSize.width(), -renderInfo.y * tileSize.height());
canvas.scale(renderInfo.scale, renderInfo.scale);
renderInfo.tilePainter->paint(renderInfo.baseTile, &canvas);
+ if (renderInfo.baseTile && renderInfo.baseTile->backTexture())
+ checkForPureColor(renderInfo, &canvas);
+ else
+ renderInfo.isPureColor = false;
if (visualIndicator) {
double after = currentTimeMS();
diff --git a/Source/WebCore/platform/graphics/android/BaseRenderer.h b/Source/WebCore/platform/graphics/android/BaseRenderer.h
index 4f65aff..ef1e4c2 100644
--- a/Source/WebCore/platform/graphics/android/BaseRenderer.h
+++ b/Source/WebCore/platform/graphics/android/BaseRenderer.h
@@ -28,6 +28,7 @@
#if USE(ACCELERATED_COMPOSITING)
+#include "Color.h"
#include "SkRect.h"
#include <wtf/text/StringHash.h>
@@ -62,6 +63,9 @@ struct TileRenderInfo {
// info about the texture that we are to render into
TextureInfo* textureInfo;
+
+ bool isPureColor;
+ Color pureColor;
};
/**
@@ -73,7 +77,7 @@ public:
BaseRenderer(RendererType type) : m_type(type) {}
virtual ~BaseRenderer() {}
- void renderTiledContent(const TileRenderInfo& renderInfo);
+ void renderTiledContent(TileRenderInfo& renderInfo);
RendererType getType() { return m_type; }
@@ -87,6 +91,7 @@ protected:
virtual void setupCanvas(const TileRenderInfo& renderInfo, SkCanvas* canvas) = 0;
virtual void setupPartialInval(const TileRenderInfo& renderInfo, SkCanvas* canvas) {}
virtual void renderingComplete(const TileRenderInfo& renderInfo, SkCanvas* canvas) = 0;
+ virtual void checkForPureColor(TileRenderInfo& renderInfo, SkCanvas* canvas) = 0;
void drawTileInfo(SkCanvas* canvas, const TileRenderInfo& renderInfo,
int updateCount, double renderDuration);
diff --git a/Source/WebCore/platform/graphics/android/GLUtils.cpp b/Source/WebCore/platform/graphics/android/GLUtils.cpp
index 55d986f..be56f92 100644
--- a/Source/WebCore/platform/graphics/android/GLUtils.cpp
+++ b/Source/WebCore/platform/graphics/android/GLUtils.cpp
@@ -464,16 +464,14 @@ bool GLUtils::skipTransferForPureColor(const TileRenderInfo* renderInfo,
if (tilePtr) {
BaseTileTexture* tileTexture = tilePtr->backTexture();
// Check the bitmap, and make everything ready here.
- Color pureColor;
- if (tileTexture && isPureColorBitmap(bitmap, pureColor)) {
+ if (tileTexture && renderInfo->isPureColor) {
// update basetile's info
// Note that we are skipping the whole TransferQueue.
renderInfo->textureInfo->m_width = bitmap.width();
renderInfo->textureInfo->m_height = bitmap.height();
renderInfo->textureInfo->m_internalFormat = GL_RGBA;
- TilesManager::instance()->transferQueue()->addItemInPureColorQueue(renderInfo,
- pureColor);
+ TilesManager::instance()->transferQueue()->addItemInPureColorQueue(renderInfo);
skipTransfer = true;
}
diff --git a/Source/WebCore/platform/graphics/android/GaneshRenderer.h b/Source/WebCore/platform/graphics/android/GaneshRenderer.h
index 7963a66..d7eda24 100644
--- a/Source/WebCore/platform/graphics/android/GaneshRenderer.h
+++ b/Source/WebCore/platform/graphics/android/GaneshRenderer.h
@@ -49,6 +49,9 @@ protected:
virtual void setupCanvas(const TileRenderInfo& renderInfo, SkCanvas* canvas);
virtual void setupPartialInval(const TileRenderInfo& renderInfo, SkCanvas* canvas);
virtual void renderingComplete(const TileRenderInfo& renderInfo, SkCanvas* canvas);
+ virtual void checkForPureColor(TileRenderInfo& renderInfo, SkCanvas* canvas) {
+ renderInfo.isPureColor = false;
+ }
};
diff --git a/Source/WebCore/platform/graphics/android/RasterRenderer.cpp b/Source/WebCore/platform/graphics/android/RasterRenderer.cpp
index c218d94..bcfe7d8 100644
--- a/Source/WebCore/platform/graphics/android/RasterRenderer.cpp
+++ b/Source/WebCore/platform/graphics/android/RasterRenderer.cpp
@@ -92,6 +92,11 @@ void RasterRenderer::renderingComplete(const TileRenderInfo& renderInfo, SkCanva
GLUtils::paintTextureWithBitmap(&renderInfo, bitmap);
}
+void RasterRenderer::checkForPureColor(TileRenderInfo& renderInfo, SkCanvas* canvas)
+{
+ renderInfo.isPureColor = GLUtils::isPureColorBitmap(*g_bitmap, renderInfo.pureColor);
+}
+
} // namespace WebCore
#endif // USE(ACCELERATED_COMPOSITING)
diff --git a/Source/WebCore/platform/graphics/android/RasterRenderer.h b/Source/WebCore/platform/graphics/android/RasterRenderer.h
index 74ee52d..39e00f2 100644
--- a/Source/WebCore/platform/graphics/android/RasterRenderer.h
+++ b/Source/WebCore/platform/graphics/android/RasterRenderer.h
@@ -49,6 +49,7 @@ protected:
virtual void setupCanvas(const TileRenderInfo& renderInfo, SkCanvas* canvas);
virtual void renderingComplete(const TileRenderInfo& renderInfo, SkCanvas* canvas);
+ virtual void checkForPureColor(TileRenderInfo& renderInfo, SkCanvas* canvas);
private:
static SkBitmap* g_bitmap;
diff --git a/Source/WebCore/platform/graphics/android/TransferQueue.cpp b/Source/WebCore/platform/graphics/android/TransferQueue.cpp
index 8e41d15..a3552ac 100644
--- a/Source/WebCore/platform/graphics/android/TransferQueue.cpp
+++ b/Source/WebCore/platform/graphics/android/TransferQueue.cpp
@@ -475,14 +475,14 @@ bool TransferQueue::tryUpdateQueueWithBitmap(const TileRenderInfo* renderInfo,
return true;
}
-void TransferQueue::addItemInPureColorQueue(const TileRenderInfo* renderInfo, Color color)
+void TransferQueue::addItemInPureColorQueue(const TileRenderInfo* renderInfo)
{
// The pure color tiles' queue will be read from UI thread and written in
// Tex Gen thread, thus we need to have a lock here.
android::Mutex::Autolock lock(m_transferQueueItemLocks);
TileTransferData data;
addItemCommon(renderInfo, GpuUpload, &data);
- data.pureColor = color;
+ data.pureColor = renderInfo->pureColor;
m_pureColorTileQueue.append(data);
}
diff --git a/Source/WebCore/platform/graphics/android/TransferQueue.h b/Source/WebCore/platform/graphics/android/TransferQueue.h
index b864085..8bc5c19 100644
--- a/Source/WebCore/platform/graphics/android/TransferQueue.h
+++ b/Source/WebCore/platform/graphics/android/TransferQueue.h
@@ -134,7 +134,7 @@ public:
void lockQueue() { m_transferQueueItemLocks.lock(); }
void unlockQueue() { m_transferQueueItemLocks.unlock(); }
- void addItemInPureColorQueue(const TileRenderInfo* renderInfo, Color color);
+ void addItemInPureColorQueue(const TileRenderInfo* renderInfo);
void setPendingDiscardWithLock();
void emptyQueue();