OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "platform/graphics/paint/PaintController.h" | 5 #include "platform/graphics/paint/PaintController.h" |
6 | 6 |
7 #include "platform/TraceEvent.h" | 7 #include "platform/TraceEvent.h" |
8 #include "platform/graphics/GraphicsLayer.h" | 8 #include "platform/graphics/GraphicsLayer.h" |
9 #include "platform/graphics/paint/DrawingDisplayItem.h" | 9 #include "platform/graphics/paint/DrawingDisplayItem.h" |
10 #include "third_party/skia/include/core/SkPictureAnalyzer.h" | 10 #include "third_party/skia/include/core/SkPictureAnalyzer.h" |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) | 59 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) |
60 m_newPaintChunks.decrementDisplayItemIndex(); | 60 m_newPaintChunks.decrementDisplayItemIndex(); |
61 } | 61 } |
62 | 62 |
63 void PaintController::processNewItem(DisplayItem& displayItem) | 63 void PaintController::processNewItem(DisplayItem& displayItem) |
64 { | 64 { |
65 DCHECK(!m_constructionDisabled); | 65 DCHECK(!m_constructionDisabled); |
66 DCHECK(!skippingCache() || !displayItem.isCached()); | 66 DCHECK(!skippingCache() || !displayItem.isCached()); |
67 | 67 |
68 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS | 68 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS |
69 if (!skippingCache() && (displayItem.isCacheable() || displayItem.isCached()
)) | 69 if (!skippingCache()) { |
70 displayItem.client().beginShouldKeepAlive(this); | 70 if (displayItem.isCacheable() || displayItem.isCached()) { |
| 71 // Mark the client shouldKeepAlive under this PaintController. |
| 72 // The status will end after the new display items are committed. |
| 73 displayItem.client().beginShouldKeepAlive(this); |
| 74 |
| 75 if (!m_currentSubsequenceClients.isEmpty()) { |
| 76 // Mark the client shouldKeepAlive under the current subsequence
. |
| 77 // The status will end when the subsequence owner is invalidated
or deleted. |
| 78 displayItem.client().beginShouldKeepAlive(m_currentSubsequenceCl
ients.last()); |
| 79 } |
| 80 } |
| 81 |
| 82 if (displayItem.getType() == DisplayItem::Subsequence) { |
| 83 m_currentSubsequenceClients.append(&displayItem.client()); |
| 84 } else if (displayItem.getType() == DisplayItem::EndSubsequence) { |
| 85 CHECK(m_currentSubsequenceClients.last() == &displayItem.client()); |
| 86 m_currentSubsequenceClients.removeLast(); |
| 87 } |
| 88 } |
71 #endif | 89 #endif |
72 | 90 |
73 if (displayItem.isCached()) | 91 if (displayItem.isCached()) |
74 ++m_numCachedNewItems; | 92 ++m_numCachedNewItems; |
75 | 93 |
76 #if DCHECK_IS_ON() | 94 #if DCHECK_IS_ON() |
77 // Verify noop begin/end pairs have been removed. | 95 // Verify noop begin/end pairs have been removed. |
78 if (m_newDisplayItemList.size() >= 2 && displayItem.isEnd()) { | 96 if (m_newDisplayItemList.size() >= 2 && displayItem.isEnd()) { |
79 const auto& beginDisplayItem = m_newDisplayItemList[m_newDisplayItemList
.size() - 2]; | 97 const auto& beginDisplayItem = m_newDisplayItemList[m_newDisplayItemList
.size() - 2]; |
80 if (beginDisplayItem.isBegin() && beginDisplayItem.getType() != DisplayI
tem::Subsequence && !beginDisplayItem.drawsContent()) | 98 if (beginDisplayItem.isBegin() && beginDisplayItem.getType() != DisplayI
tem::Subsequence && !beginDisplayItem.drawsContent()) |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 | 414 |
397 void PaintController::updateCacheGeneration() | 415 void PaintController::updateCacheGeneration() |
398 { | 416 { |
399 m_currentCacheGeneration = DisplayItemCacheGeneration::next(); | 417 m_currentCacheGeneration = DisplayItemCacheGeneration::next(); |
400 for (const DisplayItem& displayItem : m_currentPaintArtifact.getDisplayItemL
ist()) { | 418 for (const DisplayItem& displayItem : m_currentPaintArtifact.getDisplayItemL
ist()) { |
401 if (!displayItem.isCacheable()) | 419 if (!displayItem.isCacheable()) |
402 continue; | 420 continue; |
403 displayItem.client().setDisplayItemsCached(m_currentCacheGeneration); | 421 displayItem.client().setDisplayItemsCached(m_currentCacheGeneration); |
404 } | 422 } |
405 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS | 423 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS |
| 424 CHECK(m_currentSubsequenceClients.isEmpty()); |
406 DisplayItemClient::endShouldKeepAliveAllClients(this); | 425 DisplayItemClient::endShouldKeepAliveAllClients(this); |
407 #endif | 426 #endif |
408 } | 427 } |
409 | 428 |
410 void PaintController::appendDebugDrawingAfterCommit(const DisplayItemClient& dis
playItemClient, PassRefPtr<SkPicture> picture, const LayoutSize& offsetFromLayou
tObject) | 429 void PaintController::appendDebugDrawingAfterCommit(const DisplayItemClient& dis
playItemClient, PassRefPtr<SkPicture> picture, const LayoutSize& offsetFromLayou
tObject) |
411 { | 430 { |
412 DCHECK(m_newDisplayItemList.isEmpty()); | 431 DCHECK(m_newDisplayItemList.isEmpty()); |
413 DrawingDisplayItem& displayItem = m_currentPaintArtifact.getDisplayItemList(
).allocateAndConstruct<DrawingDisplayItem>(displayItemClient, DisplayItem::Debug
Drawing, picture); | 432 DrawingDisplayItem& displayItem = m_currentPaintArtifact.getDisplayItemList(
).allocateAndConstruct<DrawingDisplayItem>(displayItemClient, DisplayItem::Debug
Drawing, picture); |
414 displayItem.setSkippedCache(); | 433 displayItem.setSkippedCache(); |
415 m_currentPaintArtifact.getDisplayItemList().appendVisualRect(visualRectForDi
splayItem(displayItem, offsetFromLayoutObject)); | 434 m_currentPaintArtifact.getDisplayItemList().appendVisualRect(visualRectForDi
splayItem(displayItem, offsetFromLayoutObject)); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 | 546 |
528 void PaintController::showDebugData() const | 547 void PaintController::showDebugData() const |
529 { | 548 { |
530 WTFLogAlways("current display item list: [%s]\n", displayItemListAsDebugStri
ng(m_currentPaintArtifact.getDisplayItemList()).utf8().data()); | 549 WTFLogAlways("current display item list: [%s]\n", displayItemListAsDebugStri
ng(m_currentPaintArtifact.getDisplayItemList()).utf8().data()); |
531 WTFLogAlways("new display item list: [%s]\n", displayItemListAsDebugString(m
_newDisplayItemList).utf8().data()); | 550 WTFLogAlways("new display item list: [%s]\n", displayItemListAsDebugString(m
_newDisplayItemList).utf8().data()); |
532 } | 551 } |
533 | 552 |
534 #endif // ifndef NDEBUG | 553 #endif // ifndef NDEBUG |
535 | 554 |
536 } // namespace blink | 555 } // namespace blink |
OLD | NEW |