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

Unified Diff: Source/web/PageOverlayList.cpp

Issue 867063004: [Slimming Paint] Paint the inspector overlay with GraphicsLayer DisplayList. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 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/web/PageOverlayList.cpp
diff --git a/Source/web/PageOverlayList.cpp b/Source/web/PageOverlayList.cpp
index f5b99ffa5642c655d8af3d766c639b8df0224852..c0355ad0563f35d8fa5d5a1beecc950999833258 100644
--- a/Source/web/PageOverlayList.cpp
+++ b/Source/web/PageOverlayList.cpp
@@ -51,47 +51,19 @@ PageOverlayList::~PageOverlayList()
bool PageOverlayList::add(WebPageOverlay* overlay, int zOrder)
{
- bool added = false;
- size_t index = find(overlay);
- if (index == WTF::kNotFound) {
- OwnPtr<PageOverlay> pageOverlay = PageOverlay::create(m_viewImpl, overlay);
- m_pageOverlays.append(pageOverlay.release());
- index = m_pageOverlays.size() - 1;
- added = true;
- }
-
- PageOverlay* pageOverlay = m_pageOverlays[index].get();
- pageOverlay->setZOrder(zOrder);
-
- // Adjust page overlay list order based on their z-order numbers. We first
- // check if we need to move the overlay up and do so if needed. Otherwise,
- // check if we need to move it down.
- bool zOrderChanged = false;
- for (size_t i = index; i + 1 < m_pageOverlays.size(); ++i) {
- if (m_pageOverlays[i]->zOrder() >= m_pageOverlays[i + 1]->zOrder()) {
- m_pageOverlays[i].swap(m_pageOverlays[i + 1]);
- zOrderChanged = true;
- }
- }
-
- if (!zOrderChanged) {
- for (size_t i = index; i >= 1; --i) {
- if (m_pageOverlays[i]->zOrder() < m_pageOverlays[i - 1]->zOrder()) {
- m_pageOverlays[i].swap(m_pageOverlays[i - 1]);
- zOrderChanged = true;
- }
- }
- }
-
- // If we did move the overlay, that means z-order is changed and we need to
- // update overlay layers' z-order. Otherwise, just update current overlay.
- if (zOrderChanged) {
- for (size_t i = 0; i < m_pageOverlays.size(); ++i)
- m_pageOverlays[i]->clear();
- update();
- } else
- pageOverlay->update();
+ bool added;
+ size_t index = findOrAdd(overlay, added);
+ m_pageOverlays[index]->setZOrder(zOrder);
+ updateForZOrder(index);
+ return added;
+}
+bool PageOverlayList::add(PageOverlay::Painter* overlayPainter, int zOrder)
+{
+ bool added;
+ size_t index = findOrAdd(overlayPainter, added);
+ m_pageOverlays[index]->setZOrder(zOrder);
+ updateForZOrder(index);
return added;
}
@@ -106,6 +78,17 @@ bool PageOverlayList::remove(WebPageOverlay* overlay)
return true;
}
+bool PageOverlayList::remove(PageOverlay::Painter* overlayPainter)
+{
+ size_t index = find(overlayPainter);
+ if (index == WTF::kNotFound)
+ return false;
+
+ m_pageOverlays[index]->clear();
+ m_pageOverlays.remove(index);
+ return true;
+}
+
void PageOverlayList::update()
{
for (size_t i = 0; i < m_pageOverlays.size(); ++i)
@@ -114,12 +97,18 @@ void PageOverlayList::update()
void PageOverlayList::paintWebFrame(GraphicsContext& gc)
{
+ // If accelerated compositing is active, page overlays are painted through
+ // their corresponding GraphicsLayer.
+ ASSERT(!m_viewImpl->isAcceleratedCompositingActive());
+
for (size_t i = 0; i < m_pageOverlays.size(); ++i)
m_pageOverlays[i]->paintWebFrame(gc);
}
size_t PageOverlayList::find(WebPageOverlay* overlay)
{
+ if (!overlay)
+ return WTF::kNotFound;
for (size_t i = 0; i < m_pageOverlays.size(); ++i) {
if (m_pageOverlays[i]->overlay() == overlay)
return i;
@@ -127,6 +116,17 @@ size_t PageOverlayList::find(WebPageOverlay* overlay)
return WTF::kNotFound;
}
+size_t PageOverlayList::find(PageOverlay::Painter* overlayPainter)
+{
+ if (!overlayPainter)
+ return WTF::kNotFound;
+ for (size_t i = 0; i < m_pageOverlays.size(); ++i) {
+ if (m_pageOverlays[i]->overlayPainter() == overlayPainter)
+ return i;
+ }
+ return WTF::kNotFound;
+}
+
size_t PageOverlayList::findGraphicsLayer(GraphicsLayer* layer)
{
for (size_t i = 0; i < m_pageOverlays.size(); ++i) {
@@ -136,4 +136,55 @@ size_t PageOverlayList::findGraphicsLayer(GraphicsLayer* layer)
return WTF::kNotFound;
}
+GraphicsLayer* PageOverlayList::graphicsLayerForTesting() const
+{
+ return m_pageOverlays.isEmpty() ? nullptr : m_pageOverlays[0]->graphicsLayer();
+}
+
+template <typename T>
+size_t PageOverlayList::findOrAdd(T* client, bool& added)
+{
+ size_t index = find(client);
+ if (index != WTF::kNotFound) {
+ added = false;
+ return index;
+ }
+ m_pageOverlays.append(PageOverlay::create(m_viewImpl, client));
+ added = true;
+ return m_pageOverlays.size() - 1;
+}
+
+void PageOverlayList::updateForZOrder(size_t indexOfChangedOverlay)
+{
+ // Adjust page overlay list order based on their z-order numbers. We first
+ // check if we need to move the overlay up and do so if needed. Otherwise,
+ // check if we need to move it down.
+ bool zOrderChanged = false;
+ for (size_t i = indexOfChangedOverlay; i + 1 < m_pageOverlays.size(); ++i) {
+ if (m_pageOverlays[i]->zOrder() >= m_pageOverlays[i + 1]->zOrder()) {
+ m_pageOverlays[i].swap(m_pageOverlays[i + 1]);
+ zOrderChanged = true;
+ }
+ }
+
+ if (!zOrderChanged) {
+ for (size_t i = indexOfChangedOverlay; i >= 1; --i) {
+ if (m_pageOverlays[i]->zOrder() < m_pageOverlays[i - 1]->zOrder()) {
+ m_pageOverlays[i].swap(m_pageOverlays[i - 1]);
+ zOrderChanged = true;
+ }
+ }
+ }
+
+ // If we did move the overlay, that means z-order is changed and we need to
+ // update overlay layers' z-order. Otherwise, just update current overlay.
+ if (zOrderChanged) {
+ for (size_t i = 0; i < m_pageOverlays.size(); ++i)
+ m_pageOverlays[i]->clear();
+ update();
+ } else {
+ m_pageOverlays[indexOfChangedOverlay]->update();
+ }
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698