diff options
Diffstat (limited to 'Source/WebCore')
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(); |