Index: cc/picture.cc |
diff --git a/cc/picture.cc b/cc/picture.cc |
index c8fd76ffde70a01830f300dda033c40b37ee4ec9..501621b0668249d3745dc7378e91d98a984a8930 100644 |
--- a/cc/picture.cc |
+++ b/cc/picture.cc |
@@ -114,17 +114,23 @@ void Picture::Raster( |
canvas->restore(); |
} |
-bool Picture::IsCheapInRect(const gfx::Rect& layer_rect) const { |
- TRACE_EVENT0("cc", "Picture::IsCheapInRect"); |
+void Picture::AnalyzeInRect(skia::AnalysisCanvas* canvas, |
+ const gfx::Rect& content_rect, |
+ float contents_scale, |
+ Analysis* analysis) { |
+ // Verify the output is valid. |
+ DCHECK(analysis); |
- SkBitmap emptyBitmap; |
- emptyBitmap.setConfig(SkBitmap::kNo_Config, layer_rect.width(), |
- layer_rect.height()); |
- skia::AnalysisDevice device(emptyBitmap); |
- skia::AnalysisCanvas canvas(&device); |
+ canvas->save(); |
+ canvas->clipRect(gfx::RectToSkRect(content_rect)); |
+ canvas->scale(contents_scale, contents_scale); |
+ canvas->translate(layer_rect_.x(), layer_rect_.y()); |
+ canvas->drawPicture(*picture_); |
+ canvas->restore(); |
- canvas.drawPicture(*picture_); |
- return canvas.isCheap(); |
+ analysis->is_solid_color = canvas->getColorIfSolid(&analysis->solid_color); |
+ analysis->is_transparent = canvas->isTransparent(); |
+ analysis->is_cheap_to_raster = canvas->isCheap(); |
} |
void Picture::GatherPixelRefs(const gfx::Rect& layer_rect, |
@@ -155,4 +161,10 @@ void Picture::GatherPixelRefs(const gfx::Rect& layer_rect, |
pixel_refs->unref(); |
} |
+Picture::Analysis::Analysis() : |
+ is_solid_color(false), |
+ is_transparent(false), |
+ is_cheap_to_raster(false) { |
+} |
+ |
} // namespace cc |