Bug 1263083 - Use single-tile layer when less than half the tile size in either dimension; r?mstange draft
authorJamie Nicol <jnicol@mozilla.com>
Fri, 24 Jun 2016 12:52:17 +0100
changeset 382247 81f9db1df2b9a276595d046da01ab7eb92223450
parent 381476 0e3f8401b804702c894eb5fdf7eae3cbdf618668
child 524148 33653bafa9a6672cb33d0d91d1538c5ccc6d62b0
push id21672
push userbmo:jnicol@mozilla.com
push dateWed, 29 Jun 2016 12:03:18 +0000
reviewersmstange
bugs1263083
milestone50.0a1
Bug 1263083 - Use single-tile layer when less than half the tile size in either dimension; r?mstange MozReview-Commit-ID: 8yYXVl36AHK
gfx/layers/client/ClientTiledPaintedLayer.cpp
--- a/gfx/layers/client/ClientTiledPaintedLayer.cpp
+++ b/gfx/layers/client/ClientTiledPaintedLayer.cpp
@@ -420,19 +420,26 @@ ClientTiledPaintedLayer::RenderLayer()
 {
   LayerManager::DrawPaintedLayerCallback callback =
     ClientManager()->GetPaintedLayerCallback();
   void *data = ClientManager()->GetPaintedLayerCallbackData();
 
   IntSize layerSize = mVisibleRegion.ToUnknownRegion().GetBounds().Size();
   IntSize tileSize(gfxPlatform::GetPlatform()->GetTileWidth(),
                    gfxPlatform::GetPlatform()->GetTileHeight());
+  bool isHalfTileWidthOrHeight = layerSize.width <= tileSize.width / 2 ||
+    layerSize.height <= tileSize.height / 2;
 
+  // Use single tile when layer is not scrollable, is smaller than one
+  // tile, or when more than half of the tiles' pixels in either
+  // dimension would be wasted.
   bool wantSingleTiledContentClient =
-      (mCreationHint == LayerManager::NONE || layerSize <= tileSize) &&
+      (mCreationHint == LayerManager::NONE ||
+       layerSize <= tileSize ||
+       isHalfTileWidthOrHeight) &&
       SingleTiledContentClient::ClientSupportsLayerSize(layerSize, ClientManager()) &&
       gfxPrefs::LayersSingleTileEnabled();
 
   if (mContentClient && mHaveSingleTiledContentClient && !wantSingleTiledContentClient) {
     mContentClient = nullptr;
     mValidRegion.SetEmpty();
   }