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

Side by Side Diff: Source/platform/graphics/paint/DisplayItemList.cpp

Issue 1018053003: Remove blink::RuntimeEnabledFeatures::slimmingPaintDisplayItemCache (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase Created 5 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « Source/platform/RuntimeEnabledFeatures.in ('k') | Source/web/WebRuntimeFeatures.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "config.h" 5 #include "config.h"
6 #include "platform/graphics/paint/DisplayItemList.h" 6 #include "platform/graphics/paint/DisplayItemList.h"
7 7
8 #include "platform/NotImplemented.h" 8 #include "platform/NotImplemented.h"
9 #include "platform/RuntimeEnabledFeatures.h" 9 #include "platform/RuntimeEnabledFeatures.h"
10 #include "platform/graphics/paint/DrawingDisplayItem.h" 10 #include "platform/graphics/paint/DrawingDisplayItem.h"
(...skipping 18 matching lines...) Expand all
29 { 29 {
30 ASSERT(RuntimeEnabledFeatures::slimmingPaintEnabled()); 30 ASSERT(RuntimeEnabledFeatures::slimmingPaintEnabled());
31 31
32 if (displayItem->isEnd()) { 32 if (displayItem->isEnd()) {
33 ASSERT(!m_newPaints.isEmpty()); 33 ASSERT(!m_newPaints.isEmpty());
34 if (m_newPaints.last()->isBegin() && !m_newPaints.last()->drawsContent() ) { 34 if (m_newPaints.last()->isBegin() && !m_newPaints.last()->drawsContent() ) {
35 ASSERT(displayItem->isEndAndPairedWith(*m_newPaints.last())); 35 ASSERT(displayItem->isEndAndPairedWith(*m_newPaints.last()));
36 // Remove the beginning display item of this empty pair. 36 // Remove the beginning display item of this empty pair.
37 m_newPaints.removeLast(); 37 m_newPaints.removeLast();
38 #if ENABLE(ASSERT) 38 #if ENABLE(ASSERT)
39 if (RuntimeEnabledFeatures::slimmingPaintDisplayItemCacheEnabled()) { 39 // Also remove the index pointing to the removed display item.
40 // Also remove the index pointing to the removed display item. 40 Vector<size_t>& indices = m_newDisplayItemIndicesByClient.find(displ ayItem->client())->value;
41 Vector<size_t>& indices = m_newDisplayItemIndicesByClient.find(d isplayItem->client())->value; 41 if (!indices.isEmpty() && indices.last() == m_newPaints.size())
42 if (!indices.isEmpty() && indices.last() == m_newPaints.size()) 42 indices.removeLast();
43 indices.removeLast();
44 }
45 #endif 43 #endif
46 return; 44 return;
47 } 45 }
48 } 46 }
49 47
50 if (!m_scopeStack.isEmpty()) 48 if (!m_scopeStack.isEmpty())
51 displayItem->setScope(m_scopeStack.last().client, m_scopeStack.last().id ); 49 displayItem->setScope(m_scopeStack.last().client, m_scopeStack.last().id );
52 50
53 #if ENABLE(ASSERT) 51 #if ENABLE(ASSERT)
54 if (RuntimeEnabledFeatures::slimmingPaintDisplayItemCacheEnabled()) { 52 // This will check for duplicated display item ids.
55 // This will check for duplicated display item ids. 53 appendDisplayItem(m_newPaints, m_newDisplayItemIndicesByClient, displayItem) ;
56 appendDisplayItem(m_newPaints, m_newDisplayItemIndicesByClient, displayI tem); 54 #else
57 return; 55 m_newPaints.append(displayItem);
58 }
59 #endif 56 #endif
60 m_newPaints.append(displayItem);
61 } 57 }
62 58
63 void DisplayItemList::beginScope(DisplayItemClient client) 59 void DisplayItemList::beginScope(DisplayItemClient client)
64 { 60 {
65 ClientScopeIdMap::iterator it = m_clientScopeIdMap.find(client); 61 ClientScopeIdMap::iterator it = m_clientScopeIdMap.find(client);
66 int scopeId; 62 int scopeId;
67 if (it == m_clientScopeIdMap.end()) { 63 if (it == m_clientScopeIdMap.end()) {
68 m_clientScopeIdMap.add(client, 0); 64 m_clientScopeIdMap.add(client, 0);
69 scopeId = 0; 65 scopeId = 0;
70 } else { 66 } else {
(...skipping 21 matching lines...) Expand all
92 { 88 {
93 ASSERT(RuntimeEnabledFeatures::slimmingPaintEnabled()); 89 ASSERT(RuntimeEnabledFeatures::slimmingPaintEnabled());
94 // Can only be called during layout/paintInvalidation, not during painting. 90 // Can only be called during layout/paintInvalidation, not during painting.
95 ASSERT(m_newPaints.isEmpty()); 91 ASSERT(m_newPaints.isEmpty());
96 m_paintList.clear(); 92 m_paintList.clear();
97 m_cachedDisplayItemIndicesByClient.clear(); 93 m_cachedDisplayItemIndicesByClient.clear();
98 } 94 }
99 95
100 bool DisplayItemList::clientCacheIsValid(DisplayItemClient client) const 96 bool DisplayItemList::clientCacheIsValid(DisplayItemClient client) const
101 { 97 {
102 return RuntimeEnabledFeatures::slimmingPaintDisplayItemCacheEnabled() 98 return m_cachedDisplayItemIndicesByClient.contains(client)
103 && m_cachedDisplayItemIndicesByClient.contains(client)
104 // If the scope is invalid, the client is treated invalid even if it's n ot invalidated explicitly. 99 // If the scope is invalid, the client is treated invalid even if it's n ot invalidated explicitly.
105 && (m_scopeStack.isEmpty() || m_scopeStack.last().cacheIsValid); 100 && (m_scopeStack.isEmpty() || m_scopeStack.last().cacheIsValid);
106 } 101 }
107 102
108 size_t DisplayItemList::findMatchingItem(const DisplayItem& displayItem, Display Item::Type matchingType, const DisplayItemIndicesByClientMap& displayItemIndices ByClient, const PaintList& list) 103 size_t DisplayItemList::findMatchingItem(const DisplayItem& displayItem, Display Item::Type matchingType, const DisplayItemIndicesByClientMap& displayItemIndices ByClient, const PaintList& list)
109 { 104 {
110 DisplayItemIndicesByClientMap::const_iterator it = displayItemIndicesByClien t.find(displayItem.client()); 105 DisplayItemIndicesByClientMap::const_iterator it = displayItemIndicesByClien t.find(displayItem.client());
111 if (it == displayItemIndicesByClient.end()) 106 if (it == displayItemIndicesByClient.end())
112 return kNotFound; 107 return kNotFound;
113 108
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 void DisplayItemList::updatePaintList() 175 void DisplayItemList::updatePaintList()
181 { 176 {
182 // These data structures are used during painting only. 177 // These data structures are used during painting only.
183 #if ENABLE(ASSERT) 178 #if ENABLE(ASSERT)
184 m_newDisplayItemIndicesByClient.clear(); 179 m_newDisplayItemIndicesByClient.clear();
185 #endif 180 #endif
186 m_clientScopeIdMap.clear(); 181 m_clientScopeIdMap.clear();
187 ASSERT(m_scopeStack.isEmpty()); 182 ASSERT(m_scopeStack.isEmpty());
188 m_scopeStack.clear(); 183 m_scopeStack.clear();
189 184
190 if (!RuntimeEnabledFeatures::slimmingPaintDisplayItemCacheEnabled()) {
191 m_paintList.clear();
192 m_paintList.swap(m_newPaints);
193 m_cachedDisplayItemIndicesByClient.clear();
194 return;
195 }
196
197 PaintList updatedList; 185 PaintList updatedList;
198 DisplayItemIndicesByClientMap newCachedDisplayItemIndicesByClient; 186 DisplayItemIndicesByClientMap newCachedDisplayItemIndicesByClient;
199 187
200 for (OwnPtr<DisplayItem>& newDisplayItem : m_newPaints) { 188 for (OwnPtr<DisplayItem>& newDisplayItem : m_newPaints) {
201 if (newDisplayItem->isCached() || newDisplayItem->isSubtreeCached()) { 189 if (newDisplayItem->isCached() || newDisplayItem->isSubtreeCached()) {
202 copyCachedItems(*newDisplayItem, updatedList, newCachedDisplayItemIn dicesByClient); 190 copyCachedItems(*newDisplayItem, updatedList, newCachedDisplayItemIn dicesByClient);
203 } else { 191 } else {
204 if (RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEn abled()) 192 if (RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEn abled())
205 checkCachedDisplayItemIsUnchangedFromPreviousPaintList(*newDispl ayItem); 193 checkCachedDisplayItemIsUnchangedFromPreviousPaintList(*newDispl ayItem);
206 // FIXME: Enable this assert after we resolve the scope invalidation issue. 194 // FIXME: Enable this assert after we resolve the scope invalidation issue.
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 #endif // ifndef NDEBUG 296 #endif // ifndef NDEBUG
309 297
310 void DisplayItemList::replay(GraphicsContext* context) 298 void DisplayItemList::replay(GraphicsContext* context)
311 { 299 {
312 updatePaintList(); 300 updatePaintList();
313 for (auto& displayItem : m_paintList) 301 for (auto& displayItem : m_paintList)
314 displayItem->replay(context); 302 displayItem->replay(context);
315 } 303 }
316 304
317 } // namespace blink 305 } // namespace blink
OLDNEW
« no previous file with comments | « Source/platform/RuntimeEnabledFeatures.in ('k') | Source/web/WebRuntimeFeatures.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698