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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp

Issue 2066603005: Check DisplayItemCient aliveness in cached subsequences (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Check DisplayItemCient aliveness in cached subsequences Created 4 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 unified diff | Download patch
OLDNEW
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
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 displayItem.client().beginShouldKeepAlive(this);
72 if (!m_subsequenceClients.isEmpty())
73 displayItem.client().beginShouldKeepAlive(m_subsequenceClients.l ast());
chrishtr 2016/06/18 08:49:57 What does this do exactly? beginShouldKeepAlive fo
Xianzhu 2016/06/18 17:41:30 Yes, this is to mark the new display item shouldKe
74 }
75
76 if (displayItem.getType() == DisplayItem::Subsequence) {
77 m_subsequenceClients.append(&displayItem.client());
78 } else if (displayItem.getType() == DisplayItem::EndSubsequence) {
79 CHECK(m_subsequenceClients.last() == &displayItem.client());
80 m_subsequenceClients.removeLast();
81 }
82 }
71 #endif 83 #endif
72 84
73 if (displayItem.isCached()) 85 if (displayItem.isCached())
74 ++m_numCachedNewItems; 86 ++m_numCachedNewItems;
75 87
76 #if DCHECK_IS_ON() 88 #if DCHECK_IS_ON()
77 // Verify noop begin/end pairs have been removed. 89 // Verify noop begin/end pairs have been removed.
78 if (m_newDisplayItemList.size() >= 2 && displayItem.isEnd()) { 90 if (m_newDisplayItemList.size() >= 2 && displayItem.isEnd()) {
79 const auto& beginDisplayItem = m_newDisplayItemList[m_newDisplayItemList .size() - 2]; 91 const auto& beginDisplayItem = m_newDisplayItemList[m_newDisplayItemList .size() - 2];
80 if (beginDisplayItem.isBegin() && beginDisplayItem.getType() != DisplayI tem::Subsequence && !beginDisplayItem.drawsContent()) 92 if (beginDisplayItem.isBegin() && beginDisplayItem.getType() != DisplayI tem::Subsequence && !beginDisplayItem.drawsContent())
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 408
397 void PaintController::updateCacheGeneration() 409 void PaintController::updateCacheGeneration()
398 { 410 {
399 m_currentCacheGeneration = DisplayItemCacheGeneration::next(); 411 m_currentCacheGeneration = DisplayItemCacheGeneration::next();
400 for (const DisplayItem& displayItem : m_currentPaintArtifact.getDisplayItemL ist()) { 412 for (const DisplayItem& displayItem : m_currentPaintArtifact.getDisplayItemL ist()) {
401 if (!displayItem.isCacheable()) 413 if (!displayItem.isCacheable())
402 continue; 414 continue;
403 displayItem.client().setDisplayItemsCached(m_currentCacheGeneration); 415 displayItem.client().setDisplayItemsCached(m_currentCacheGeneration);
404 } 416 }
405 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS 417 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS
418 CHECK(m_subsequenceClients.isEmpty());
406 DisplayItemClient::endShouldKeepAliveAllClients(this); 419 DisplayItemClient::endShouldKeepAliveAllClients(this);
407 #endif 420 #endif
408 } 421 }
409 422
410 void PaintController::appendDebugDrawingAfterCommit(const DisplayItemClient& dis playItemClient, PassRefPtr<SkPicture> picture, const LayoutSize& offsetFromLayou tObject) 423 void PaintController::appendDebugDrawingAfterCommit(const DisplayItemClient& dis playItemClient, PassRefPtr<SkPicture> picture, const LayoutSize& offsetFromLayou tObject)
411 { 424 {
412 DCHECK(m_newDisplayItemList.isEmpty()); 425 DCHECK(m_newDisplayItemList.isEmpty());
413 DrawingDisplayItem& displayItem = m_currentPaintArtifact.getDisplayItemList( ).allocateAndConstruct<DrawingDisplayItem>(displayItemClient, DisplayItem::Debug Drawing, picture); 426 DrawingDisplayItem& displayItem = m_currentPaintArtifact.getDisplayItemList( ).allocateAndConstruct<DrawingDisplayItem>(displayItemClient, DisplayItem::Debug Drawing, picture);
414 displayItem.setSkippedCache(); 427 displayItem.setSkippedCache();
415 m_currentPaintArtifact.getDisplayItemList().appendVisualRect(visualRectForDi splayItem(displayItem, offsetFromLayoutObject)); 428 m_currentPaintArtifact.getDisplayItemList().appendVisualRect(visualRectForDi splayItem(displayItem, offsetFromLayoutObject));
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 540
528 void PaintController::showDebugData() const 541 void PaintController::showDebugData() const
529 { 542 {
530 WTFLogAlways("current display item list: [%s]\n", displayItemListAsDebugStri ng(m_currentPaintArtifact.getDisplayItemList()).utf8().data()); 543 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()); 544 WTFLogAlways("new display item list: [%s]\n", displayItemListAsDebugString(m _newDisplayItemList).utf8().data());
532 } 545 }
533 546
534 #endif // ifndef NDEBUG 547 #endif // ifndef NDEBUG
535 548
536 } // namespace blink 549 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698