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

Unified Diff: Source/platform/graphics/paint/ClipDisplayItem.cpp

Issue 1193433004: Blink-side contiguous allocation of display items. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Ready for review Created 5 years, 6 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
Index: Source/platform/graphics/paint/ClipDisplayItem.cpp
diff --git a/Source/platform/graphics/paint/ClipDisplayItem.cpp b/Source/platform/graphics/paint/ClipDisplayItem.cpp
index 26eb7900ec54c0b23c77b90f5e579c9607c4df57..75f8c200746c5eb5b9bc942db1bab759247690c3 100644
--- a/Source/platform/graphics/paint/ClipDisplayItem.cpp
+++ b/Source/platform/graphics/paint/ClipDisplayItem.cpp
@@ -7,6 +7,7 @@
#include "platform/geometry/FloatRoundedRect.h"
#include "platform/graphics/GraphicsContext.h"
+#include "platform/graphics/paint/DisplayItems.h"
#include "public/platform/WebDisplayItemList.h"
#include "third_party/skia/include/core/SkScalar.h"
@@ -15,16 +16,25 @@ namespace blink {
void ClipDisplayItem::replay(GraphicsContext& context)
{
context.save();
- context.clipRect(m_clipRect, NotAntiAliased, m_operation);
- for (FloatRoundedRect roundedRect : m_roundedRectClips)
- context.clipRoundedRect(roundedRect, m_operation);
+ context.clipRect(m_clipRect, NotAntiAliased, SkRegion::kIntersect_Op);
+ if (m_roundedRectClips) {
+ for (const auto& roundedRect : *m_roundedRectClips)
+ context.clipRoundedRect(roundedRect, SkRegion::kIntersect_Op);
+ }
}
void ClipDisplayItem::appendToWebDisplayItemList(WebDisplayItemList* list) const
{
- WebVector<SkRRect> webRoundedRects(m_roundedRectClips.size());
- for (size_t i = 0; i < m_roundedRectClips.size(); ++i) {
- FloatRoundedRect::Radii rectRadii = m_roundedRectClips[i].radii();
+ if (!m_roundedRectClips) {
+ WebVector<SkRRect> webRoundedRects;
+ list->appendClipItem(m_clipRect, webRoundedRects);
+ return;
+ }
+
+ Vector<FloatRoundedRect>& roundedRects = *m_roundedRectClips;
+ WebVector<SkRRect> webRoundedRects(roundedRects.size());
+ for (size_t i = 0; i < m_roundedRectClips->size(); ++i) {
+ FloatRoundedRect::Radii rectRadii = roundedRects[i].radii();
SkVector skRadii[4];
skRadii[SkRRect::kUpperLeft_Corner].set(SkIntToScalar(rectRadii.topLeft().width()),
SkIntToScalar(rectRadii.topLeft().height()));
@@ -35,13 +45,22 @@ void ClipDisplayItem::appendToWebDisplayItemList(WebDisplayItemList* list) const
skRadii[SkRRect::kLowerLeft_Corner].set(SkIntToScalar(rectRadii.bottomLeft().width()),
SkIntToScalar(rectRadii.bottomLeft().height()));
SkRRect skRoundedRect;
- skRoundedRect.setRectRadii(m_roundedRectClips[i].rect(), skRadii);
+ skRoundedRect.setRectRadii(roundedRects[i].rect(), skRadii);
webRoundedRects[i] = skRoundedRect;
}
// FIXME: needs to include the SkRegion::Op
list->appendClipItem(m_clipRect, webRoundedRects);
}
+void ClipDisplayItem::appendByMoving(DisplayItems& destination)
+{
+ destination.emplaceBack<ClipDisplayItem>(
+ DisplayItemClientWrapperHelper(*this),
+ type(),
+ m_clipRect,
+ m_roundedRectClips.release());
+}
+
void EndClipDisplayItem::replay(GraphicsContext& context)
{
context.restore();
@@ -52,6 +71,12 @@ void EndClipDisplayItem::appendToWebDisplayItemList(WebDisplayItemList* list) co
list->appendEndClipItem();
}
+void EndClipDisplayItem::appendByMoving(DisplayItems& destination)
+{
+ destination.emplaceBack<EndClipDisplayItem>(
+ DisplayItemClientWrapperHelper(*this), type());
+}
+
#ifndef NDEBUG
void ClipDisplayItem::dumpPropertiesAsDebugString(WTF::StringBuilder& stringBuilder) const
{

Powered by Google App Engine
This is Rietveld 408576698