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,