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

Unified Diff: third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp

Issue 2107103002: Find cached display items directly during painting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 4 years, 5 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: third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp b/third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp
index 826c05dd83d5a9004553b85733a21bbe0b077221..22798a20a459a9d405ae302ab952b594f06410ac 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp
@@ -6,7 +6,6 @@
#include "platform/RuntimeEnabledFeatures.h"
#include "platform/graphics/GraphicsContext.h"
-#include "platform/graphics/paint/CachedDisplayItem.h"
#include "platform/graphics/paint/ClipPathDisplayItem.h"
#include "platform/graphics/paint/ClipPathRecorder.h"
#include "platform/graphics/paint/ClipRecorder.h"
@@ -33,6 +32,14 @@ public:
protected:
PaintController& getPaintController() { return *m_paintController; }
+ int numCachedNewItems() const { return m_paintController->m_numCachedNewItems; }
+
+#if DCHECK_IS_ON()
+ int numSequentialMatches() const { return m_paintController->m_numSequentialMatches; }
+ int numOutOfOrderMatches() const { return m_paintController->m_numOutOfOrderMatches; }
+ int numIndexedItems() const { return m_paintController->m_numIndexedItems; }
+#endif
+
private:
void TearDown() override
{
@@ -115,6 +122,9 @@ TEST_F(PaintControllerTest, UpdateBasic)
drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 300, 300));
drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 200, 200));
drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 300, 300));
+
+ EXPECT_EQ(0, numCachedNewItems());
+
getPaintController().commitNewDisplayItems();
EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3,
@@ -125,6 +135,14 @@ TEST_F(PaintControllerTest, UpdateBasic)
second.setDisplayItemsUncached();
drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 300, 300));
drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 300, 300));
+
+ EXPECT_EQ(2, numCachedNewItems());
+#if DCHECK_IS_ON()
+ EXPECT_EQ(2, numSequentialMatches());
+ EXPECT_EQ(0, numOutOfOrderMatches());
+ EXPECT_EQ(1, numIndexedItems());
+#endif
+
getPaintController().commitNewDisplayItems();
EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
@@ -140,25 +158,93 @@ TEST_F(PaintControllerTest, UpdateSwapOrder)
GraphicsContext context(getPaintController());
drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100));
+ drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100));
drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200));
+ drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200));
drawRect(context, unaffected, backgroundDrawingType, FloatRect(300, 300, 10, 10));
+ drawRect(context, unaffected, foregroundDrawingType, FloatRect(300, 300, 10, 10));
getPaintController().commitNewDisplayItems();
- EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3,
+ EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
TestDisplayItem(first, backgroundDrawingType),
+ TestDisplayItem(first, foregroundDrawingType),
TestDisplayItem(second, backgroundDrawingType),
- TestDisplayItem(unaffected, backgroundDrawingType));
+ TestDisplayItem(second, foregroundDrawingType),
+ TestDisplayItem(unaffected, backgroundDrawingType),
+ TestDisplayItem(unaffected, foregroundDrawingType));
- second.setDisplayItemsUncached();
drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200));
+ drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200));
drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100));
+ drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100));
drawRect(context, unaffected, backgroundDrawingType, FloatRect(300, 300, 10, 10));
+ drawRect(context, unaffected, foregroundDrawingType, FloatRect(300, 300, 10, 10));
+
+ EXPECT_EQ(6, numCachedNewItems());
+#if DCHECK_IS_ON()
+ EXPECT_EQ(5, numSequentialMatches()); // second, first foreground, unaffected
+ EXPECT_EQ(1, numOutOfOrderMatches()); // first
+ EXPECT_EQ(2, numIndexedItems()); // first
+#endif
+
getPaintController().commitNewDisplayItems();
- EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3,
+ EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
TestDisplayItem(second, backgroundDrawingType),
+ TestDisplayItem(second, foregroundDrawingType),
TestDisplayItem(first, backgroundDrawingType),
- TestDisplayItem(unaffected, backgroundDrawingType));
+ TestDisplayItem(first, foregroundDrawingType),
+ TestDisplayItem(unaffected, backgroundDrawingType),
+ TestDisplayItem(unaffected, foregroundDrawingType));
+}
+
+TEST_F(PaintControllerTest, UpdateSwapOrderWithInvalidation)
+{
+ FakeDisplayItemClient first("first");
+ FakeDisplayItemClient second("second");
+ FakeDisplayItemClient unaffected("unaffected");
+ GraphicsContext context(getPaintController());
+
+ drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100));
+ drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100));
+ drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200));
+ drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200));
+ drawRect(context, unaffected, backgroundDrawingType, FloatRect(300, 300, 10, 10));
+ drawRect(context, unaffected, foregroundDrawingType, FloatRect(300, 300, 10, 10));
+ getPaintController().commitNewDisplayItems();
+
+ EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
+ TestDisplayItem(first, backgroundDrawingType),
+ TestDisplayItem(first, foregroundDrawingType),
+ TestDisplayItem(second, backgroundDrawingType),
+ TestDisplayItem(second, foregroundDrawingType),
+ TestDisplayItem(unaffected, backgroundDrawingType),
+ TestDisplayItem(unaffected, foregroundDrawingType));
+
+ first.setDisplayItemsUncached();
+ drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200));
+ drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200));
+ drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100));
+ drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100));
+ drawRect(context, unaffected, backgroundDrawingType, FloatRect(300, 300, 10, 10));
+ drawRect(context, unaffected, foregroundDrawingType, FloatRect(300, 300, 10, 10));
+
+ EXPECT_EQ(4, numCachedNewItems());
+#if DCHECK_IS_ON()
+ EXPECT_EQ(4, numSequentialMatches()); // second, unaffected
+ EXPECT_EQ(0, numOutOfOrderMatches());
+ EXPECT_EQ(2, numIndexedItems());
+#endif
+
+ getPaintController().commitNewDisplayItems();
+
+ EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
+ TestDisplayItem(second, backgroundDrawingType),
+ TestDisplayItem(second, foregroundDrawingType),
+ TestDisplayItem(first, backgroundDrawingType),
+ TestDisplayItem(first, foregroundDrawingType),
+ TestDisplayItem(unaffected, backgroundDrawingType),
+ TestDisplayItem(unaffected, foregroundDrawingType));
}
TEST_F(PaintControllerTest, UpdateNewItemInMiddle)
@@ -179,6 +265,14 @@ TEST_F(PaintControllerTest, UpdateNewItemInMiddle)
drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100));
drawRect(context, third, backgroundDrawingType, FloatRect(125, 100, 200, 50));
drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200));
+
+ EXPECT_EQ(2, numCachedNewItems());
+#if DCHECK_IS_ON()
+ EXPECT_EQ(2, numSequentialMatches()); // first, second
+ EXPECT_EQ(0, numOutOfOrderMatches());
+ EXPECT_EQ(0, numIndexedItems());
+#endif
+
getPaintController().commitNewDisplayItems();
EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3,
@@ -217,6 +311,14 @@ TEST_F(PaintControllerTest, UpdateInvalidationWithPhases)
drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100));
drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200));
drawRect(context, third, foregroundDrawingType, FloatRect(300, 100, 50, 50));
+
+ EXPECT_EQ(4, numCachedNewItems());
+#if DCHECK_IS_ON()
+ EXPECT_EQ(4, numSequentialMatches());
+ EXPECT_EQ(0, numOutOfOrderMatches());
+ EXPECT_EQ(2, numIndexedItems());
+#endif
+
getPaintController().commitNewDisplayItems();
EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
@@ -248,6 +350,7 @@ TEST_F(PaintControllerTest, UpdateAddFirstOverlap)
drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 150, 150));
drawRect(context, second, backgroundDrawingType, FloatRect(200, 200, 50, 50));
drawRect(context, second, foregroundDrawingType, FloatRect(200, 200, 50, 50));
+ EXPECT_EQ(0, numCachedNewItems());
getPaintController().commitNewDisplayItems();
EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 4,
@@ -259,6 +362,14 @@ TEST_F(PaintControllerTest, UpdateAddFirstOverlap)
first.setDisplayItemsUncached();
drawRect(context, second, backgroundDrawingType, FloatRect(200, 200, 50, 50));
drawRect(context, second, foregroundDrawingType, FloatRect(200, 200, 50, 50));
+
+ EXPECT_EQ(2, numCachedNewItems());
+#if DCHECK_IS_ON()
+ EXPECT_EQ(2, numSequentialMatches());
+ EXPECT_EQ(0, numOutOfOrderMatches());
+ EXPECT_EQ(2, numIndexedItems());
+#endif
+
getPaintController().commitNewDisplayItems();
EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
@@ -286,6 +397,7 @@ TEST_F(PaintControllerTest, UpdateAddLastOverlap)
drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 150, 150));
drawRect(context, second, backgroundDrawingType, FloatRect(200, 200, 50, 50));
drawRect(context, second, foregroundDrawingType, FloatRect(200, 200, 50, 50));
+ EXPECT_EQ(0, numCachedNewItems());
getPaintController().commitNewDisplayItems();
EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 4,
@@ -298,6 +410,7 @@ TEST_F(PaintControllerTest, UpdateAddLastOverlap)
second.setDisplayItemsUncached();
drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150));
drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 150, 150));
+ EXPECT_EQ(0, numCachedNewItems());
getPaintController().commitNewDisplayItems();
EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
@@ -327,6 +440,14 @@ TEST_F(PaintControllerTest, UpdateClip)
first.setDisplayItemsUncached();
drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150));
drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 150, 150));
+
+ EXPECT_EQ(1, numCachedNewItems());
+#if DCHECK_IS_ON()
+ EXPECT_EQ(1, numSequentialMatches());
+ EXPECT_EQ(0, numOutOfOrderMatches());
+ EXPECT_EQ(1, numIndexedItems());
+#endif
+
getPaintController().commitNewDisplayItems();
EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
@@ -483,9 +604,12 @@ TEST_F(PaintControllerTest, CachedSubsequenceSwapOrder)
EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, container2));
EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, container1));
- EXPECT_DISPLAY_LIST(getPaintController().newDisplayItemList(), 2,
- TestDisplayItem(container2, DisplayItem::CachedSubsequence),
- TestDisplayItem(container1, DisplayItem::CachedSubsequence));
+ EXPECT_EQ(12, numCachedNewItems());
+#if DCHECK_IS_ON()
+ EXPECT_EQ(1, numSequentialMatches());
+ EXPECT_EQ(1, numOutOfOrderMatches());
+ EXPECT_EQ(5, numIndexedItems());
+#endif
getPaintController().commitNewDisplayItems();
@@ -602,14 +726,13 @@ TEST_F(PaintControllerTest, CachedNestedSubsequenceUpdate)
EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, content1));
drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100, 100));
}
- EXPECT_DISPLAY_LIST(getPaintController().newDisplayItemList(), 7,
- TestDisplayItem(content2, DisplayItem::Subsequence),
- TestDisplayItem(content2, foregroundDrawingType),
- TestDisplayItem(content2, DisplayItem::EndSubsequence),
- TestDisplayItem(container1, DisplayItem::Subsequence),
- TestDisplayItem(content1, DisplayItem::CachedSubsequence),
- TestDisplayItem(container1, foregroundDrawingType),
- TestDisplayItem(container1, DisplayItem::EndSubsequence));
+
+ EXPECT_EQ(4, numCachedNewItems());
+#if DCHECK_IS_ON()
+ EXPECT_EQ(1, numSequentialMatches());
+ EXPECT_EQ(0, numOutOfOrderMatches());
+ EXPECT_EQ(2, numIndexedItems());
+#endif
getPaintController().commitNewDisplayItems();
@@ -667,10 +790,12 @@ TEST_F(PaintControllerTest, SkipCache)
drawRect(context, content, foregroundDrawingType, rect2);
getPaintController().endSkippingCache();
- EXPECT_DISPLAY_LIST(getPaintController().newDisplayItemList(), 3,
- TestDisplayItem(multicol, DisplayItem::drawingTypeToCachedDrawingType(backgroundDrawingType)),
- TestDisplayItem(content, foregroundDrawingType),
- TestDisplayItem(content, foregroundDrawingType));
+ EXPECT_EQ(1, numCachedNewItems());
+#if DCHECK_IS_ON()
+ EXPECT_EQ(1, numSequentialMatches());
+ EXPECT_EQ(0, numOutOfOrderMatches());
+ EXPECT_EQ(0, numIndexedItems());
+#endif
getPaintController().commitNewDisplayItems();

Powered by Google App Engine
This is Rietveld 408576698