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

Side by Side Diff: Source/platform/graphics/paint/DisplayItem.h

Issue 1192443003: [Slimming Paint] Blink-side contiguous allocation of display items. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: need a constructor with WTF_MAKE_NONCOPYABLE Created 5 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 | Annotate | Revision Log
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 DisplayItem_h 5 #ifndef DisplayItem_h
6 #define DisplayItem_h 6 #define DisplayItem_h
7 7
8 #include "platform/PlatformExport.h" 8 #include "platform/PlatformExport.h"
9 #include "platform/graphics/paint/DisplayItemClient.h" 9 #include "platform/graphics/paint/DisplayItemClient.h"
10 #include "wtf/Assertions.h" 10 #include "wtf/Assertions.h"
11 #include "wtf/PassOwnPtr.h" 11 #include "wtf/PassOwnPtr.h"
12 12
13 #ifndef NDEBUG 13 #ifndef NDEBUG
14 #include "wtf/text/StringBuilder.h" 14 #include "wtf/text/StringBuilder.h"
15 #include "wtf/text/WTFString.h" 15 #include "wtf/text/WTFString.h"
16 #endif 16 #endif
17 17
18 18
19 namespace blink { 19 namespace blink {
20 20
21 class DisplayItems;
21 class GraphicsContext; 22 class GraphicsContext;
22 class WebDisplayItemList; 23 class WebDisplayItemList;
23 24
24 class PLATFORM_EXPORT DisplayItem { 25 class PLATFORM_EXPORT DisplayItem {
25 public: 26 public:
26 enum { 27 enum {
27 // Must be kept in sync with core/layout/PaintPhase.h. 28 // Must be kept in sync with core/layout/PaintPhase.h.
28 PaintPhaseMax = 12, 29 PaintPhaseMax = 12,
29 }; 30 };
30 31
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 { 227 {
227 m_scopeId = scopeId; 228 m_scopeId = scopeId;
228 m_scopeContainer = scopeContainer; 229 m_scopeContainer = scopeContainer;
229 } 230 }
230 231
231 // For DisplayItemList only. Painters should use DisplayItemCacheSkipper ins tead. 232 // For DisplayItemList only. Painters should use DisplayItemCacheSkipper ins tead.
232 void setSkippedCache() { m_skippedCache = true; } 233 void setSkippedCache() { m_skippedCache = true; }
233 bool skippedCache() const { return m_skippedCache; } 234 bool skippedCache() const { return m_skippedCache; }
234 235
235 virtual void appendToWebDisplayItemList(WebDisplayItemList*) const { } 236 virtual void appendToWebDisplayItemList(WebDisplayItemList*) const { }
237 virtual void appendByMoving(DisplayItems&) = 0;
236 238
237 // See comments of enum Type for usage of the following macros. 239 // See comments of enum Type for usage of the following macros.
238 #define DEFINE_CATEGORY_METHODS(Category) \ 240 #define DEFINE_CATEGORY_METHODS(Category) \
239 static bool is##Category##Type(Type type) { return type >= Category##First & & type <= Category##Last; } \ 241 static bool is##Category##Type(Type type) { return type >= Category##First & & type <= Category##Last; } \
240 bool is##Category() const { return is##Category##Type(type()); } 242 bool is##Category() const { return is##Category##Type(type()); }
241 243
242 #define DEFINE_CONVERSION_METHODS(Category1, category1, Category2, category2) \ 244 #define DEFINE_CONVERSION_METHODS(Category1, category1, Category2, category2) \
243 static Type category1##TypeTo##Category2##Type(Type type) \ 245 static Type category1##TypeTo##Category2##Type(Type type) \
244 { \ 246 { \
245 static_assert(Category1##Last - Category1##First == Category2##Last - Ca tegory2##First, \ 247 static_assert(Category1##Last - Category1##First == Category2##Last - Ca tegory2##First, \
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 const DisplayItemClient m_client; 328 const DisplayItemClient m_client;
327 DisplayItemClient m_scopeContainer; 329 DisplayItemClient m_scopeContainer;
328 int m_scopeId; 330 int m_scopeId;
329 static_assert(TypeLast < (1 << 16), "DisplayItem::Type should fit in 16 bits "); 331 static_assert(TypeLast < (1 << 16), "DisplayItem::Type should fit in 16 bits ");
330 const Type m_type : 16; 332 const Type m_type : 16;
331 unsigned m_skippedCache : 1; 333 unsigned m_skippedCache : 1;
332 334
333 #ifndef NDEBUG 335 #ifndef NDEBUG
334 WTF::String m_clientDebugString; 336 WTF::String m_clientDebugString;
335 #endif 337 #endif
338
339 // TODO(jbroman): Copying this data in appendByMoving would be better than
340 // friendship, but this is just hacked up.
341 friend class DisplayItems;
336 }; 342 };
337 343
338 class PLATFORM_EXPORT PairedBeginDisplayItem : public DisplayItem { 344 class PLATFORM_EXPORT PairedBeginDisplayItem : public DisplayItem {
339 protected: 345 protected:
340 PairedBeginDisplayItem(const DisplayItemClientWrapper& client, Type type) : DisplayItem(client, type) { } 346 PairedBeginDisplayItem(const DisplayItemClientWrapper& client, Type type) : DisplayItem(client, type) { }
341 347
342 private: 348 private:
343 virtual bool isBegin() const override final { return true; } 349 virtual bool isBegin() const override final { return true; }
344 }; 350 };
345 351
346 class PLATFORM_EXPORT PairedEndDisplayItem : public DisplayItem { 352 class PLATFORM_EXPORT PairedEndDisplayItem : public DisplayItem {
347 protected: 353 protected:
348 PairedEndDisplayItem(const DisplayItemClientWrapper& client, Type type) : Di splayItem(client, type) { } 354 PairedEndDisplayItem(const DisplayItemClientWrapper& client, Type type) : Di splayItem(client, type) { }
349 355
350 #if ENABLE(ASSERT) 356 #if ENABLE(ASSERT)
351 virtual bool isEndAndPairedWith(DisplayItem::Type otherType) const override = 0; 357 virtual bool isEndAndPairedWith(DisplayItem::Type otherType) const override = 0;
352 #endif 358 #endif
353 359
354 private: 360 private:
355 virtual bool isEnd() const override final { return true; } 361 virtual bool isEnd() const override final { return true; }
356 }; 362 };
357 363
364 // Allows a DisplayItemClientWrapper to be constructed from a DisplayItem, in
365 // order to facilitate copying it.
366 // TODO(jbroman): This is a bad class name.
367 class DisplayItemClientWrapperHelper {
368 DISALLOW_ALLOCATION();
369 public:
370 DisplayItemClientWrapperHelper(const DisplayItem& wrapped) : m_wrapped(wrapp ed) { }
371 DisplayItemClient displayItemClient() const { return m_wrapped.client(); }
372 String debugName() const
373 {
374 #ifndef NDEBUG
375 return m_wrapped.clientDebugString();
376 #else
377 return String();
378 #endif
379 }
380 private:
381 const DisplayItem& m_wrapped;
382 };
383
384
358 } // namespace blink 385 } // namespace blink
359 386
360 #endif // DisplayItem_h 387 #endif // DisplayItem_h
OLDNEW
« no previous file with comments | « Source/platform/graphics/paint/CompositingDisplayItem.cpp ('k') | Source/platform/graphics/paint/DisplayItemList.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698