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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/paint/DisplayItemList.h

Issue 1387923002: LayoutObject::invalidatePaintIfNeededForSynchronizedPainting() and plumbing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 #ifndef DisplayItemList_h 5 #ifndef DisplayItemList_h
6 #define DisplayItemList_h 6 #define DisplayItemList_h
7 7
8 #include "platform/PlatformExport.h" 8 #include "platform/PlatformExport.h"
9 #include "platform/RuntimeEnabledFeatures.h" 9 #include "platform/RuntimeEnabledFeatures.h"
10 #include "platform/geometry/IntRect.h" 10 #include "platform/geometry/IntRect.h"
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 { 146 {
147 ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); 147 ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
148 m_trackedPaintInvalidationObjects = nullptr; 148 m_trackedPaintInvalidationObjects = nullptr;
149 } 149 }
150 Vector<String> trackedPaintInvalidationObjects() 150 Vector<String> trackedPaintInvalidationObjects()
151 { 151 {
152 ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); 152 ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
153 return m_trackedPaintInvalidationObjects ? *m_trackedPaintInvalidationOb jects : Vector<String>(); 153 return m_trackedPaintInvalidationObjects ? *m_trackedPaintInvalidationOb jects : Vector<String>();
154 } 154 }
155 155
156 bool clientHasCheckedPaintInvalidation(DisplayItemClient client) const
157 {
158 ASSERT(RuntimeEnabledFeatures::slimmingPaintSynchronizedPaintingEnabled( ));
159 return m_clientsCheckedPaintInvalidation.contains(client);
160 }
161 void setClientHasCheckedPaintInvalidation(DisplayItemClient client)
162 {
163 ASSERT(RuntimeEnabledFeatures::slimmingPaintSynchronizedPaintingEnabled( ));
164 m_clientsCheckedPaintInvalidation.add(client);
165 }
166
156 protected: 167 protected:
157 DisplayItemList() 168 DisplayItemList()
158 : m_currentDisplayItems(0) 169 : m_currentDisplayItems(0)
159 , m_newDisplayItems(kInitialDisplayItemsCapacity * kMaximumDisplayItemSi ze) 170 , m_newDisplayItems(kInitialDisplayItemsCapacity * kMaximumDisplayItemSi ze)
160 , m_validlyCachedClientsDirty(false) 171 , m_validlyCachedClientsDirty(false)
161 , m_constructionDisabled(false) 172 , m_constructionDisabled(false)
162 , m_skippingCacheCount(0) 173 , m_skippingCacheCount(0)
163 , m_numCachedItems(0) 174 , m_numCachedItems(0)
164 , m_nextScope(1) { } 175 , m_nextScope(1) { }
165 176
166 private: 177 private:
167 // Set new item state (scopes, cache skipping, etc) for a new item. 178 // Set new item state (scopes, cache skipping, etc) for a new item.
168 void processNewItem(DisplayItem&); 179 void processNewItem(DisplayItem&);
169 180
170 void updateValidlyCachedClientsIfNeeded() const; 181 void updateValidlyCachedClientsIfNeeded() const;
171 182
183 void invalidateClient(const DisplayItemClientWrapper&);
184
172 #ifndef NDEBUG 185 #ifndef NDEBUG
173 WTF::String displayItemsAsDebugString(const DisplayItems&) const; 186 WTF::String displayItemsAsDebugString(const DisplayItems&) const;
174 #endif 187 #endif
175 188
176 // Indices into PaintList of all DrawingDisplayItems and BeginSubsequenceDis playItems of each client. 189 // Indices into PaintList of all DrawingDisplayItems and BeginSubsequenceDis playItems of each client.
177 // Temporarily used during merge to find out-of-order display items. 190 // Temporarily used during merge to find out-of-order display items.
178 using DisplayItemIndicesByClientMap = HashMap<DisplayItemClient, Vector<size _t>>; 191 using DisplayItemIndicesByClientMap = HashMap<DisplayItemClient, Vector<size _t>>;
179 192
180 static size_t findMatchingItemFromIndex(const DisplayItem::Id&, const Displa yItemIndicesByClientMap&, const DisplayItems&); 193 static size_t findMatchingItemFromIndex(const DisplayItem::Id&, const Displa yItemIndicesByClientMap&, const DisplayItems&);
181 static void addItemToIndexIfNeeded(const DisplayItem&, size_t index, Display ItemIndicesByClientMap&); 194 static void addItemToIndexIfNeeded(const DisplayItem&, size_t index, Display ItemIndicesByClientMap&);
(...skipping 11 matching lines...) Expand all
193 void checkNoRemainingCachedDisplayItems(); 206 void checkNoRemainingCachedDisplayItems();
194 #endif 207 #endif
195 208
196 void replay(GraphicsContext&); 209 void replay(GraphicsContext&);
197 210
198 DisplayItems m_currentDisplayItems; 211 DisplayItems m_currentDisplayItems;
199 DisplayItems m_newDisplayItems; 212 DisplayItems m_newDisplayItems;
200 213
201 // Contains all clients having valid cached paintings if updated. 214 // Contains all clients having valid cached paintings if updated.
202 // It's lazily updated in updateValidlyCachedClientsIfNeeded(). 215 // It's lazily updated in updateValidlyCachedClientsIfNeeded().
203 // FIXME: In the future we can replace this with client-side repaint flags 216 // TODO(wangxianzhu): In the future we can replace this with client-side rep aint flags
204 // to avoid the cost of building and querying the hash table. 217 // to avoid the cost of building and querying the hash table.
205 mutable HashSet<DisplayItemClient> m_validlyCachedClients; 218 mutable HashSet<DisplayItemClient> m_validlyCachedClients;
206 mutable bool m_validlyCachedClientsDirty; 219 mutable bool m_validlyCachedClientsDirty;
207 220
221 // Used during painting. Contains clients that have checked paint invalidati on and
222 // are known to be valid.
223 // TODO(wangxianzhu): Use client side flag to avoid const of hash table.
224 HashSet<DisplayItemClient> m_clientsCheckedPaintInvalidation;
225
208 #if ENABLE(ASSERT) 226 #if ENABLE(ASSERT)
209 // Set of clients which had paint offset changes since the last commit. This is used for 227 // Set of clients which had paint offset changes since the last commit. This is used for
210 // ensuring paint offsets are only updated once and are the same in all phas es. 228 // ensuring paint offsets are only updated once and are the same in all phas es.
211 HashSet<DisplayItemClient> m_clientsWithPaintOffsetInvalidations; 229 HashSet<DisplayItemClient> m_clientsWithPaintOffsetInvalidations;
212 #endif 230 #endif
213 231
214 // Allow display item construction to be disabled to isolate the costs of co nstruction 232 // Allow display item construction to be disabled to isolate the costs of co nstruction
215 // in performance metrics. 233 // in performance metrics.
216 bool m_constructionDisabled; 234 bool m_constructionDisabled;
217 235
(...skipping 17 matching lines...) Expand all
235 // the duplicated ids are from. 253 // the duplicated ids are from.
236 DisplayItemIndicesByClientMap m_newDisplayItemIndicesByClient; 254 DisplayItemIndicesByClientMap m_newDisplayItemIndicesByClient;
237 #endif 255 #endif
238 256
239 OwnPtr<Vector<String>> m_trackedPaintInvalidationObjects; 257 OwnPtr<Vector<String>> m_trackedPaintInvalidationObjects;
240 }; 258 };
241 259
242 } // namespace blink 260 } // namespace blink
243 261
244 #endif // DisplayItemList_h 262 #endif // DisplayItemList_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698