Allow non-atlasable layer to still be hoisted
authorrobertphillips <robertphillips@google.com>
Thu, 8 Jan 2015 18:15:25 +0000 (10:15 -0800)
committerCommit bot <commit-bot@chromium.org>
Thu, 8 Jan 2015 18:15:25 +0000 (10:15 -0800)
The PlausiblyAtlasable check was preventing large layers from ever being hoisted in the FindLayersToHoist path.

Review URL: https://codereview.chromium.org/844613002

src/gpu/GrLayerCache.cpp
src/gpu/GrLayerHoister.cpp

index e521b3e3239678c5c16d2ec2be35edf7648e9b04..8f6a69bcf51aaaa8a8948817e52ae203da58dc6f 100644 (file)
@@ -253,9 +253,7 @@ bool GrLayerCache::lock(GrCachedLayer* layer, const GrSurfaceDesc& desc, bool* n
         usage = GrContext::kExact_ScratchTexMatch;
     }
 
-    SkAutoTUnref<GrTexture> tex(
-        fContext->refScratchTexture(desc, usage));
-
+    SkAutoTUnref<GrTexture> tex(fContext->refScratchTexture(desc, usage));
     if (!tex) {
         return false;
     }
index ab27f08493ecc261770b85947ab9464282bcbff2..7d6f5ab1b3879b4f1648d459ec6bc3111405622c 100644 (file)
@@ -82,8 +82,7 @@ static void prepare_for_hoisting(GrLayerCache* layerCache,
     hl->fPreMat.preConcat(info.fPreMat);
 }
 
-// Compute the source rect if possible and return false if further processing 
-// on the layer should be abandoned based on its source rect.
+// Compute the source rect and return false if it is empty.
 static bool compute_source_rect(const SkLayerInfo::BlockInfo& info, const SkMatrix& initialMat,
                                 const SkIRect& dstIR, SkIRect* srcIR) {
     SkIRect clipBounds = dstIR;
@@ -109,10 +108,6 @@ static bool compute_source_rect(const SkLayerInfo::BlockInfo& info, const SkMatr
         *srcIR = clipBounds;
     }
 
-    if (!GrLayerCache::PlausiblyAtlasable(srcIR->width(), srcIR->height())) {
-        return false;
-    }
-
     return true;
 }
 
@@ -170,7 +165,8 @@ void GrLayerHoister::FindLayersToAtlas(GrContext* context,
 
         SkIRect srcIR;
 
-        if (!compute_source_rect(info, initialMat, dstIR, &srcIR)) {
+        if (!compute_source_rect(info, initialMat, dstIR, &srcIR) ||
+            !GrLayerCache::PlausiblyAtlasable(srcIR.width(), srcIR.height())) {
             continue;
         }