summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/WebCore/platform/graphics/android/GLWebViewState.cpp4
-rw-r--r--Source/WebCore/platform/graphics/android/LayerAndroid.cpp2
-rw-r--r--Source/WebCore/platform/graphics/android/PaintTileOperation.cpp10
-rw-r--r--Source/WebCore/platform/graphics/android/PaintTileOperation.h4
-rw-r--r--Source/WebCore/platform/graphics/android/PaintedSurface.h3
-rw-r--r--Source/WebCore/platform/graphics/android/TexturesGenerator.cpp5
-rw-r--r--Source/WebCore/platform/graphics/android/TexturesGenerator.h1
-rw-r--r--Source/WebCore/platform/graphics/android/TiledTexture.cpp3
-rw-r--r--Source/WebCore/platform/graphics/android/TilesManager.cpp34
-rw-r--r--Source/WebCore/platform/graphics/android/TilesManager.h7
10 files changed, 17 insertions, 56 deletions
diff --git a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
index 4155461..748c5e9 100644
--- a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
+++ b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
@@ -554,10 +554,8 @@ bool GLWebViewState::drawGL(IntRect& rect, SkRect& viewport, IntRect* invalRect,
// the BaseTiles' texture.
TilesManager::instance()->transferQueue()->updateDirtyBaseTiles();
- if (compositedRoot != m_previouslyUsedRoot) {
+ if (compositedRoot != m_previouslyUsedRoot)
TilesManager::instance()->swapLayersTextures(m_previouslyUsedRoot, compositedRoot);
- TilesManager::instance()->cleanupTilesTextures();
- }
bool ret = baseLayer->drawGL(compositedRoot, rect, viewport, webViewRect,
titleBarHeight, clip, scale, pagesSwapped, color);
diff --git a/Source/WebCore/platform/graphics/android/LayerAndroid.cpp b/Source/WebCore/platform/graphics/android/LayerAndroid.cpp
index 00db27c..97ff692 100644
--- a/Source/WebCore/platform/graphics/android/LayerAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/LayerAndroid.cpp
@@ -164,6 +164,7 @@ LayerAndroid::~LayerAndroid()
{
if (m_texture)
m_texture->removeLayer(this);
+ SkSafeUnref(m_texture);
removeChildren();
delete m_extra;
delete m_contentsImage;
@@ -719,6 +720,7 @@ void LayerAndroid::assignTexture(LayerAndroid* oldTree)
if (oldLayer && oldLayer->texture()) {
oldLayer->texture()->replaceLayer(this);
m_texture = oldLayer->texture();
+ SkSafeRef(m_texture);
}
}
diff --git a/Source/WebCore/platform/graphics/android/PaintTileOperation.cpp b/Source/WebCore/platform/graphics/android/PaintTileOperation.cpp
index d5623df..064ffb9 100644
--- a/Source/WebCore/platform/graphics/android/PaintTileOperation.cpp
+++ b/Source/WebCore/platform/graphics/android/PaintTileOperation.cpp
@@ -26,16 +26,21 @@
#include "config.h"
#include "PaintTileOperation.h"
#include "LayerAndroid.h"
+#include "PaintedSurface.h"
namespace WebCore {
-PaintTileOperation::PaintTileOperation(BaseTile* tile, LayerAndroid* layer)
+PaintTileOperation::PaintTileOperation(BaseTile* tile, PaintedSurface* surface)
: QueuedOperation(QueuedOperation::PaintTile, tile->page())
, m_tile(tile)
- , m_layer(layer)
+ , m_surface(surface)
+ , m_layer(0)
{
if (m_tile)
m_tile->setRepaintPending(true);
+ if (m_surface)
+ m_layer = surface->layer();
+ SkSafeRef(m_surface);
SkSafeRef(m_layer);
}
@@ -45,6 +50,7 @@ PaintTileOperation::~PaintTileOperation()
m_tile->setRepaintPending(false);
m_tile = 0;
}
+ SkSafeUnref(m_surface);
SkSafeUnref(m_layer);
}
diff --git a/Source/WebCore/platform/graphics/android/PaintTileOperation.h b/Source/WebCore/platform/graphics/android/PaintTileOperation.h
index 4d1bb1a..72a4125 100644
--- a/Source/WebCore/platform/graphics/android/PaintTileOperation.h
+++ b/Source/WebCore/platform/graphics/android/PaintTileOperation.h
@@ -31,10 +31,11 @@
namespace WebCore {
class LayerAndroid;
+class PaintedSurface;
class PaintTileOperation : public QueuedOperation {
public:
- PaintTileOperation(BaseTile* tile, LayerAndroid* layer = 0);
+ PaintTileOperation(BaseTile* tile, PaintedSurface* surface = 0);
virtual ~PaintTileOperation();
virtual bool operator==(const QueuedOperation* operation);
virtual void run();
@@ -44,6 +45,7 @@ public:
private:
BaseTile* m_tile;
+ PaintedSurface* m_surface;
LayerAndroid* m_layer;
};
diff --git a/Source/WebCore/platform/graphics/android/PaintedSurface.h b/Source/WebCore/platform/graphics/android/PaintedSurface.h
index 39d6154..84fe64c 100644
--- a/Source/WebCore/platform/graphics/android/PaintedSurface.h
+++ b/Source/WebCore/platform/graphics/android/PaintedSurface.h
@@ -30,6 +30,7 @@
#include "ClassTracker.h"
#include "IntRect.h"
#include "LayerAndroid.h"
+#include "SkRefCnt.h"
#include "TextureOwner.h"
#include "TiledTexture.h"
#include "TilesManager.h"
@@ -40,7 +41,7 @@ class SkCanvas;
namespace WebCore {
-class PaintedSurface : public TilePainter {
+class PaintedSurface : public SkRefCnt, TilePainter {
public:
PaintedSurface(LayerAndroid* layer)
: m_layer(layer)
diff --git a/Source/WebCore/platform/graphics/android/TexturesGenerator.cpp b/Source/WebCore/platform/graphics/android/TexturesGenerator.cpp
index 9780336..3f7d6a3 100644
--- a/Source/WebCore/platform/graphics/android/TexturesGenerator.cpp
+++ b/Source/WebCore/platform/graphics/android/TexturesGenerator.cpp
@@ -70,11 +70,6 @@ void TexturesGenerator::removePaintOperationsForPage(TiledPage* page, bool waitF
removeOperationsForFilter(new PagePaintFilter(page), waitForRunning);
}
-void TexturesGenerator::removeOperationsForPainter(TilePainter* painter, bool waitForRunning)
-{
- removeOperationsForFilter(new TilePainterFilter(painter), waitForRunning);
-}
-
void TexturesGenerator::removeOperationsForFilter(OperationFilter* filter)
{
removeOperationsForFilter(filter, true);
diff --git a/Source/WebCore/platform/graphics/android/TexturesGenerator.h b/Source/WebCore/platform/graphics/android/TexturesGenerator.h
index bac198c..19ab1af 100644
--- a/Source/WebCore/platform/graphics/android/TexturesGenerator.h
+++ b/Source/WebCore/platform/graphics/android/TexturesGenerator.h
@@ -49,7 +49,6 @@ public:
virtual status_t readyToRun();
void removeOperationsForPage(TiledPage* page);
- void removeOperationsForPainter(TilePainter* painter, bool waitForRunning);
void removePaintOperationsForPage(TiledPage* page, bool waitForRunning);
void removeOperationsForFilter(OperationFilter* filter);
void removeOperationsForFilter(OperationFilter* filter, bool waitForRunning);
diff --git a/Source/WebCore/platform/graphics/android/TiledTexture.cpp b/Source/WebCore/platform/graphics/android/TiledTexture.cpp
index a49c6c6..d975825 100644
--- a/Source/WebCore/platform/graphics/android/TiledTexture.cpp
+++ b/Source/WebCore/platform/graphics/android/TiledTexture.cpp
@@ -139,7 +139,7 @@ void TiledTexture::prepareTile(bool repaint, int x, int y)
LayerAndroid* layer = m_surface->layer();
if (schedule && layer && !tile->isRepaintPending()) {
- PaintTileOperation *operation = new PaintTileOperation(tile, layer);
+ PaintTileOperation *operation = new PaintTileOperation(tile, m_surface);
TilesManager::instance()->scheduleOperation(operation);
}
}
@@ -228,7 +228,6 @@ void TiledTexture::endPaint()
void TiledTexture::removeTiles()
{
- TilesManager::instance()->removeOperationsForPainter(this, true);
for (unsigned int i = 0; i < m_tiles.size(); i++) {
delete m_tiles[i];
}
diff --git a/Source/WebCore/platform/graphics/android/TilesManager.cpp b/Source/WebCore/platform/graphics/android/TilesManager.cpp
index bf14c61..ba48111 100644
--- a/Source/WebCore/platform/graphics/android/TilesManager.cpp
+++ b/Source/WebCore/platform/graphics/android/TilesManager.cpp
@@ -198,40 +198,6 @@ void TilesManager::addPaintedSurface(PaintedSurface* surface)
m_paintedSurfaces.append(surface);
}
-void TilesManager::cleanupTilesTextures()
-{
- // release existing surfaces without layers
- WTF::Vector<PaintedSurface*> collect;
- for (unsigned int i = 0; i < m_paintedSurfaces.size(); i++) {
- PaintedSurface* surface = m_paintedSurfaces[i];
- if (!surface->layer() && !surface->busy())
- collect.append(surface);
- }
- XLOG("remove %d / %d PaintedSurfaces", collect.size(), m_paintedSurfaces.size());
- for (unsigned int i = 0; i < collect.size(); i++) {
- m_paintedSurfaces.remove(m_paintedSurfaces.find(collect[i]));
- TilePainter* painter = collect[i]->texture();
- // Mark the current painter to destroy!!
- m_pixmapsGenerationThread->removeOperationsForPainter(painter, true);
- XLOG("destroy %x (%x)", collect[i], painter);
- delete collect[i];
- }
- for (unsigned int i = 0; i < m_tilesTextures.size(); i++) {
- BaseTileTexture* texture = m_tilesTextures[i];
- texture->setUsedLevel(-1);
- if (texture->owner()) {
- bool keep = false;
- for (unsigned int j = 0; j < m_paintedSurfaces.size(); j++) {
- if (m_paintedSurfaces[j]->owns(texture))
- keep = true;
- }
- if (!keep) {
- texture->release(texture->owner());
- }
- }
- }
-}
-
BaseTileTexture* TilesManager::getAvailableTexture(BaseTile* owner)
{
android::Mutex::Autolock lock(m_texturesLock);
diff --git a/Source/WebCore/platform/graphics/android/TilesManager.h b/Source/WebCore/platform/graphics/android/TilesManager.h
index 3541422..8f0ac7f 100644
--- a/Source/WebCore/platform/graphics/android/TilesManager.h
+++ b/Source/WebCore/platform/graphics/android/TilesManager.h
@@ -66,11 +66,6 @@ public:
m_pixmapsGenerationThread->removeOperationsForPage(page);
}
- void removeOperationsForPainter(TilePainter* painter, bool waitForCompletion)
- {
- m_pixmapsGenerationThread->removeOperationsForPainter(painter, waitForCompletion);
- }
-
void removePaintOperationsForPage(TiledPage* page, bool waitForCompletion)
{
m_pixmapsGenerationThread->removePaintOperationsForPage(page, waitForCompletion);
@@ -90,8 +85,6 @@ public:
BaseTileTexture* getAvailableTexture(BaseTile* owner);
- void cleanupTilesTextures();
-
void markGeneratorAsReady()
{
{