Index: cc/picture.cc |
diff --git a/cc/picture.cc b/cc/picture.cc |
index c8fd76ffde70a01830f300dda033c40b37ee4ec9..423fb58770daee0a13ddae70166e4f3f80f535a0 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, |