Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3226)

Unified Diff: cc/playback/discardable_image_map.cc

Issue 1418573002: cc: Add image decode control in the compositor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/playback/discardable_image_map.cc
diff --git a/cc/playback/discardable_image_map.cc b/cc/playback/discardable_image_map.cc
index 133347544febde0358e421249e3a8bdc9757efd8..b1facd5bade0e5dd8d3539fbb9de156cb723de8e 100644
--- a/cc/playback/discardable_image_map.cc
+++ b/cc/playback/discardable_image_map.cc
@@ -15,23 +15,25 @@
namespace cc {
-namespace {
-
SkRect MapRect(const SkMatrix& matrix, const SkRect& src) {
SkRect dst;
matrix.mapRect(&dst, src);
return dst;
}
-SkSize ExtractScale(const SkMatrix& matrix) {
- SkSize scale = SkSize::Make(matrix.getScaleX(), matrix.getScaleY());
+bool ExtractScale(const SkMatrix& matrix, SkSize* scale) {
+ *scale = SkSize::Make(matrix.getScaleX(), matrix.getScaleY());
if (matrix.getType() & SkMatrix::kAffine_Mask) {
- if (!matrix.decomposeScale(&scale))
- scale.set(1, 1);
+ if (!matrix.decomposeScale(scale)) {
+ scale->set(1, 1);
+ return false;
+ }
}
- return scale;
+ return true;
}
+namespace {
+
// We're using an NWay canvas with no added canvases, so in effect
// non-overridden functions are no-ops.
class DiscardableImagesMetadataCanvas : public SkNWayCanvas {
@@ -92,15 +94,33 @@ class DiscardableImagesMetadataCanvas : public SkNWayCanvas {
const SkRect& rect,
const SkMatrix& matrix,
const SkPaint* paint) {
- if (rect.intersects(canvas_bounds_) && image->isLazyGenerated()) {
- SkFilterQuality filter_quality = kNone_SkFilterQuality;
- if (paint) {
- filter_quality = paint->getFilterQuality();
+ if (!image->isLazyGenerated())
+ return;
+
+ SkRect paint_rect = rect;
+ if (paint) {
+ if (paint->canComputeFastBounds()) {
+ paint_rect = paint->computeFastBounds(rect, &paint_rect);
+ } else {
+ // TODO(vmpstr): UMA this case.
+ paint_rect = canvas_bounds_;
}
- image_set_->push_back(
- std::make_pair(DrawImage(image, ExtractScale(matrix), filter_quality),
- gfx::SkRectToRectF(rect)));
}
+
+ if (!rect.intersects(canvas_bounds_))
+ return;
+
+ SkFilterQuality filter_quality = kNone_SkFilterQuality;
+ if (paint) {
+ filter_quality = paint->getFilterQuality();
+ }
+
+ SkSize scale;
+ bool is_decomposable = ExtractScale(matrix, &scale);
+ image_set_->push_back(
+ std::make_pair(DrawImage(image, scale, filter_quality,
+ matrix.hasPerspective(), is_decomposable),
+ gfx::SkRectToRectF(rect)));
}
std::vector<std::pair<DrawImage, gfx::RectF>>* image_set_;

Powered by Google App Engine
This is Rietveld 408576698