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

Unified Diff: cc/paint/paint_op_buffer.h

Issue 2830243002: cc: Don't perform image analysis if the DisplayItemList has no images. (Closed)
Patch Set: rebase Created 3 years, 7 months 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
« no previous file with comments | « cc/paint/display_item_list.cc ('k') | cc/paint/paint_op_buffer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/paint/paint_op_buffer.h
diff --git a/cc/paint/paint_op_buffer.h b/cc/paint/paint_op_buffer.h
index dec8543115b6d6994cd3a2fc5197bcd94d5ef71c..fb37414f16cc760a8b3c0bff05bf2f7412a444d7 100644
--- a/cc/paint/paint_op_buffer.h
+++ b/cc/paint/paint_op_buffer.h
@@ -92,6 +92,9 @@ struct CC_PAINT_EXPORT PaintOp {
int CountSlowPaths() const { return 0; }
int CountSlowPathsFromFlags() const { return 0; }
+ bool HasDiscardableImages() const { return false; }
+ bool HasDiscardableImagesFromFlags() const { return false; }
+
// Returns the number of bytes used by this op in referenced sub records
// and display lists. This doesn't count other objects like paths or blobs.
size_t AdditionalBytesUsed() const { return 0; }
@@ -107,6 +110,14 @@ struct CC_PAINT_EXPORT PaintOpWithFlags : PaintOp {
explicit PaintOpWithFlags(const PaintFlags& flags) : flags(flags) {}
int CountSlowPathsFromFlags() const { return flags.getPathEffect() ? 1 : 0; }
+ bool HasDiscardableImagesFromFlags() const {
+ if (!IsDrawOp())
+ return false;
+
+ SkShader* shader = flags.getShader();
+ SkImage* image = shader ? shader->isAImage(nullptr, nullptr) : nullptr;
+ return image && image->isLazyGenerated();
+ }
// Subclasses should provide a static RasterWithFlags() method which is called
// from the Raster() method. The RasterWithFlags() should use the PaintFlags
@@ -364,6 +375,7 @@ struct CC_PAINT_EXPORT DrawDisplayItemListOp final : PaintOp {
SkCanvas* canvas,
const SkMatrix& original_ctm);
size_t AdditionalBytesUsed() const;
+ bool HasDiscardableImages() const;
// TODO(enne): DisplayItemList should know number of slow paths.
scoped_refptr<DisplayItemList> list;
@@ -409,6 +421,7 @@ struct CC_PAINT_EXPORT DrawImageOp final : PaintOpWithFlags {
const PaintFlags* flags,
SkCanvas* canvas,
const SkMatrix& original_ctm);
+ bool HasDiscardableImages() const;
PaintImage image;
SkScalar left;
@@ -434,6 +447,7 @@ struct CC_PAINT_EXPORT DrawImageRectOp final : PaintOpWithFlags {
const PaintFlags* flags,
SkCanvas* canvas,
const SkMatrix& original_ctm);
+ bool HasDiscardableImages() const;
PaintImage image;
SkRect src;
@@ -558,6 +572,7 @@ struct CC_PAINT_EXPORT DrawRecordOp final : PaintOp {
SkCanvas* canvas,
const SkMatrix& original_ctm);
size_t AdditionalBytesUsed() const;
+ bool HasDiscardableImages() const;
sk_sp<const PaintRecord> record;
};
@@ -771,6 +786,7 @@ class CC_PAINT_EXPORT PaintOpBuffer : public SkRefCnt {
return sizeof(*this) + reserved_ + subrecord_bytes_used_;
}
int numSlowPaths() const { return num_slow_paths_; }
+ bool HasDiscardableImages() const { return has_discardable_images_; }
// Resize the PaintOpBuffer to exactly fit the current amount of used space.
void ShrinkToFit();
@@ -933,6 +949,9 @@ class CC_PAINT_EXPORT PaintOpBuffer : public SkRefCnt {
num_slow_paths_ += op->CountSlowPathsFromFlags();
num_slow_paths_ += op->CountSlowPaths();
+ has_discardable_images_ |= op->HasDiscardableImages();
+ has_discardable_images_ |= op->HasDiscardableImagesFromFlags();
+
subrecord_bytes_used_ += op->AdditionalBytesUsed();
}
@@ -948,6 +967,7 @@ class CC_PAINT_EXPORT PaintOpBuffer : public SkRefCnt {
int num_slow_paths_ = 0;
// Record additional bytes used by referenced sub-records and display lists.
size_t subrecord_bytes_used_ = 0;
+ bool has_discardable_images_ = false;
SkRect cull_rect_;
DISALLOW_COPY_AND_ASSIGN(PaintOpBuffer);
« no previous file with comments | « cc/paint/display_item_list.cc ('k') | cc/paint/paint_op_buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698