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

Unified Diff: cc/paint/display_item_list.cc

Issue 2820133005: Revert of Back PaintRecord with PaintOpBuffer instead of SkPicture (Closed)
Patch Set: Created 3 years, 8 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/BUILD.gn ('k') | cc/paint/display_item_list_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/paint/display_item_list.cc
diff --git a/cc/paint/display_item_list.cc b/cc/paint/display_item_list.cc
index c1b069548409f6a31a1aeea75870222fc5c62645..83599482f53461dd77ef6952fa45231f5ecdb68c 100644
--- a/cc/paint/display_item_list.cc
+++ b/cc/paint/display_item_list.cc
@@ -100,13 +100,9 @@
if (canvas->quickReject(item.picture->cullRect()))
break;
- // TODO(enne): Maybe the PaintRecord itself could know whether this
- // was needed? It's not clear whether these save/restore semantics
- // that SkPicture handles during playback are things that should be
- // kept around.
- canvas->save();
+ // SkPicture always does a wrapping save/restore on the canvas, so it is
+ // not necessary here.
item.picture->playback(canvas, callback);
- canvas->restore();
break;
}
case DisplayItem::FLOAT_CLIP: {
@@ -180,33 +176,6 @@
canvas->restore();
}
-// Atttempts to merge a CompositingDisplayItem and DrawingDisplayItem
-// into a single "draw with alpha". This function returns true if
-// it was successful. If false, then the caller is responsible for
-// drawing these items. This is a DisplayItemList version of the
-// SkRecord optimization SkRecordNoopSaveLayerDrawRestores.
-static bool MergeAndDrawIfPossible(const CompositingDisplayItem& save_item,
- const DrawingDisplayItem& draw_item,
- SkCanvas* canvas) {
- if (save_item.color_filter)
- return false;
- if (save_item.xfermode != SkBlendMode::kSrcOver)
- return false;
- // TODO(enne): I believe that lcd_text_requires_opaque_layer is not
- // relevant here and that lcd text is preserved post merge, but I haven't
- // tested that.
- const PaintRecord* record = draw_item.picture.get();
- if (record->approximateOpCount() != 1)
- return false;
-
- const PaintOp* op = record->GetFirstOp();
- if (!op->IsDrawOp())
- return false;
-
- op->RasterWithAlpha(canvas, save_item.alpha);
- return true;
-}
-
void DisplayItemList::Raster(SkCanvas* canvas,
SkPicture::AbortCallback* callback) const {
gfx::Rect canvas_playback_rect;
@@ -215,33 +184,14 @@
std::vector<size_t> indices;
rtree_.Search(canvas_playback_rect, &indices);
- for (size_t i = 0; i < indices.size(); ++i) {
+ for (size_t index : indices) {
+ RasterItem(items_[index], canvas, callback);
+
// We use a callback during solid color analysis on the compositor thread to
// break out early. Since we're handling a sequence of pictures via rtree
// query results ourselves, we have to respect the callback and early out.
if (callback && callback->abort())
break;
-
- const DisplayItem& item = items_[indices[i]];
- // Optimize empty begin/end compositing and merge begin/draw/end compositing
- // where possible.
- // TODO(enne): remove empty clips here too?
- // TODO(enne): does this happen recursively? Or is this good enough?
- if (i < indices.size() - 2 && item.type == DisplayItem::COMPOSITING) {
- const DisplayItem& second = items_[indices[i + 1]];
- const DisplayItem& third = items_[indices[i + 2]];
- if (second.type == DisplayItem::DRAWING &&
- third.type == DisplayItem::END_COMPOSITING) {
- if (MergeAndDrawIfPossible(
- static_cast<const CompositingDisplayItem&>(item),
- static_cast<const DrawingDisplayItem&>(second), canvas)) {
- i += 2;
- continue;
- }
- }
- }
-
- RasterItem(item, canvas, callback);
}
}
« no previous file with comments | « cc/paint/BUILD.gn ('k') | cc/paint/display_item_list_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698