diff --git a/cc/picture.cc b/cc/picture.cc
index 47d1b23d59d04..9ff58454889c5 100644
--- a/cc/picture.cc
+++ b/cc/picture.cc
@@ -62,8 +62,8 @@ void Picture::Record(ContentLayerClient* painter,
                                          layer_rect_.y(),
                                          layer_rect_.width(),
                                          layer_rect_.height());
-  canvas->drawRect(layer_skrect, paint);
   canvas->clipRect(layer_skrect);
+  canvas->drawRect(layer_skrect, paint);
 
   gfx::RectF opaque_layer_rect;
   base::TimeTicks beginPaintTime = base::TimeTicks::Now();
diff --git a/cc/picture_pile_impl.cc b/cc/picture_pile_impl.cc
index f8e56cc1083c3..ff136e5138400 100644
--- a/cc/picture_pile_impl.cc
+++ b/cc/picture_pile_impl.cc
@@ -7,6 +7,7 @@
 #include "cc/rendering_stats.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkSize.h"
+#include "ui/gfx/rect_conversions.h"
 
 namespace cc {
 
@@ -45,21 +46,27 @@ scoped_refptr<PicturePileImpl> PicturePileImpl::CloneForDrawing() const {
 
 void PicturePileImpl::Raster(
     SkCanvas* canvas,
-    gfx::Rect rect,
+    gfx::Rect content_rect,
     float contents_scale,
     RenderingStats* stats) {
   base::TimeTicks rasterizeBeginTime = base::TimeTicks::Now();
 
   // TODO(enne): do this more efficiently, i.e. top down with Skia clips
   canvas->save();
-  canvas->translate(-rect.x(), -rect.y());
-  SkRect layer_skrect = SkRect::MakeXYWH(rect.x(), rect.y(),
-                                         rect.width(), rect.height());
+  canvas->translate(-content_rect.x(), -content_rect.y());
+  SkRect layer_skrect = SkRect::MakeXYWH(
+      content_rect.x(),
+      content_rect.y(),
+      content_rect.width(),
+      content_rect.height());
   canvas->clipRect(layer_skrect);
   canvas->scale(contents_scale, contents_scale);
+
+  gfx::Rect layer_rect = gfx::ToEnclosedRect(gfx::ScaleRect(gfx::RectF(content_rect), 1 / contents_scale));
+
   for (PicturePile::Pile::const_iterator i = pile_.begin();
        i != pile_.end(); ++i) {
-    if (!(*i)->LayerRect().Intersects(rect))
+    if (!(*i)->LayerRect().Intersects(layer_rect))
       continue;
     (*i)->Raster(canvas);
 
diff --git a/cc/picture_pile_impl.h b/cc/picture_pile_impl.h
index b041635e3e37a..5e9d65d4026cd 100644
--- a/cc/picture_pile_impl.h
+++ b/cc/picture_pile_impl.h
@@ -34,7 +34,7 @@ public:
   // It is assumed that contentsScale has already been applied to this canvas.
   void Raster(
       SkCanvas* canvas,
-      gfx::Rect rect,
+      gfx::Rect content_rect,
       float contents_scale,
       RenderingStats* stats);
 
diff --git a/cc/tile.cc b/cc/tile.cc
index 9ebaa51793a30..7cb4bec833522 100644
--- a/cc/tile.cc
+++ b/cc/tile.cc
@@ -13,13 +13,13 @@ Tile::Tile(TileManager* tile_manager,
            PicturePileImpl* picture_pile,
            gfx::Size tile_size,
            GLenum format,
-           gfx::Rect rect_inside_picture,
+           gfx::Rect content_rect,
            float contents_scale)
   : tile_manager_(tile_manager),
     picture_pile_(picture_pile),
     tile_size_(tile_size),
     format_(format),
-    rect_inside_picture_(rect_inside_picture),
+    content_rect_(content_rect),
     contents_scale_(contents_scale) {
   tile_manager_->RegisterTile(this);
 }
diff --git a/cc/tile.h b/cc/tile.h
index 0c8e05d63e017..51c61b7bf0beb 100644
--- a/cc/tile.h
+++ b/cc/tile.h
@@ -26,7 +26,7 @@ class CC_EXPORT Tile : public base::RefCounted<Tile> {
        PicturePileImpl* picture_pile,
        gfx::Size tile_size,
        GLenum format,
-       gfx::Rect rect_inside_picture,
+       gfx::Rect content_rect,
        float contents_scale);
 
   PicturePileImpl* picture_pile() {
@@ -68,7 +68,7 @@ class CC_EXPORT Tile : public base::RefCounted<Tile> {
   scoped_refptr<PicturePileImpl> picture_pile_;
   gfx::Rect tile_size_;
   GLenum format_;
-  gfx::Rect rect_inside_picture_;
+  gfx::Rect content_rect_;
   float contents_scale_;
   gfx::Rect opaque_rect_;
 
diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc
index 53ef4daa9f8ef..932c2a836d418 100644
--- a/cc/tile_manager.cc
+++ b/cc/tile_manager.cc
@@ -413,7 +413,7 @@ void TileManager::DispatchOneRasterTask(
       FROM_HERE,
       picture_pile_clone.get(),
       resource_pool_->resource_provider()->mapPixelBuffer(resource_id),
-      tile->rect_inside_picture_,
+      tile->content_rect_,
       tile->contents_scale(),
       stats,
       base::Bind(&TileManager::OnRasterTaskCompleted,