OSDN Git Service

Fix offscreen tile optimization with small content
authorChris Craik <ccraik@google.com>
Thu, 1 Dec 2011 01:01:07 +0000 (17:01 -0800)
committerChris Craik <ccraik@google.com>
Thu, 1 Dec 2011 01:01:07 +0000 (17:01 -0800)
bug:5691644
Change-Id: Ida66f42c634099c4399bae0bbf4b5776913757b0

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

index 2b3c2ee..8352cce 100644 (file)
@@ -257,23 +257,23 @@ void TiledPage::prepare(bool goingDown, bool goingLeft, const SkIRect& tileBound
 
         firstTileY -= expandY;
         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();
+        // 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();
 
-    // adjust perimeter to not go outside base content bounds
-    if (firstTileX < 0) {
-        nbTilesWidth += firstTileX;
-        firstTileX = 0;
-    }
-    if (firstTileY < 0) {
-        nbTilesHeight += firstTileY;
-        firstTileY = 0;
+        // adjust perimeter to not go outside base content bounds
+        if (firstTileX < 0) {
+            nbTilesWidth += firstTileX;
+            firstTileX = 0;
+        }
+        if (firstTileY < 0) {
+            nbTilesHeight += firstTileY;
+            firstTileY = 0;
+        }
+        nbTilesWidth = std::min(nbTilesWidth, static_cast<int>(ceilf(maxWidthTiles)) - firstTileX);
+        nbTilesHeight = std::min(nbTilesHeight, static_cast<int>(ceilf(maxHeightTiles)) - firstTileY);
     }
-    nbTilesWidth = std::min(nbTilesWidth, static_cast<int>(ceilf(maxWidthTiles)) - firstTileX);
-    nbTilesHeight = std::min(nbTilesHeight, static_cast<int>(ceilf(maxHeightTiles)) - firstTileY);
 
     // check against corrupted scale values giving bad height/width (use float to avoid overflow)
     float numTiles = static_cast<float>(nbTilesHeight) * static_cast<float>(nbTilesWidth);