OSDN Git Service

Don't paint/allocate off screen tiles
authorChris Craik <ccraik@google.com>
Mon, 17 Oct 2011 21:29:04 +0000 (14:29 -0700)
committerChris Craik <ccraik@google.com>
Mon, 17 Oct 2011 21:29:04 +0000 (14:29 -0700)
bug:5320471

Also, reduce prefetch distance

Change-Id: I9e677c16b5d0cdc16b87bd820591088ab10ab44b

Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp
Source/WebCore/platform/graphics/android/TiledPage.cpp

index 827c858..a8c4d7a 100644 (file)
@@ -57,8 +57,8 @@
 // TODO: dynamically determine based on DPI
 #define PREFETCH_SCALE_MODIFIER 0.3
 #define PREFETCH_OPACITY 1
-#define PREFETCH_X_DIST 1
-#define PREFETCH_Y_DIST 2
+#define PREFETCH_X_DIST 0
+#define PREFETCH_Y_DIST 1
 
 namespace WebCore {
 
index 34f0d4e..b3b4daf 100644 (file)
@@ -142,9 +142,6 @@ void TiledPage::invalidateRect(const IntRect& inval, const unsigned int pictureC
 
 void TiledPage::prepareRow(bool goingLeft, int tilesInRow, int firstTileX, int y, const SkIRect& tileBounds)
 {
-    if (y < 0)
-        return;
-
     for (int i = 0; i < tilesInRow; i++) {
         int x = firstTileX;
 
@@ -156,9 +153,6 @@ void TiledPage::prepareRow(bool goingLeft, int tilesInRow, int firstTileX, int y
         else
             x += i;
 
-        if (x < 0)
-            continue;
-
         BaseTile* currentTile = 0;
         BaseTile* availableTile = 0;
         for (int j = 0; j < m_baseTileSize; j++) {
@@ -269,6 +263,14 @@ void TiledPage::prepare(bool goingDown, bool goingLeft, const SkIRect& tileBound
         nbTilesHeight += expandY * 2;
     }
 
+    // crop the prepared region to the contents of the base layer
+    float maxWidthTiles = m_glWebViewState->baseContentWidth() * m_scale / TilesManager::tileWidth();
+    float maxHeightTiles = m_glWebViewState->baseContentHeight() * m_scale / TilesManager::tileHeight();
+    firstTileX = std::max(0, firstTileX);
+    firstTileY = std::max(0, firstTileY);
+    lastTileX = std::min(lastTileX, static_cast<int>(ceilf(maxWidthTiles)) - 1);
+    lastTileY = std::min(lastTileY, static_cast<int>(ceilf(maxHeightTiles)) - 1);
+
     m_expandedTileBounds.fLeft = firstTileX;
     m_expandedTileBounds.fTop = firstTileY;
     m_expandedTileBounds.fRight = lastTileX;