| 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 #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/ContiguousContainer.h" | 9 #include "platform/graphics/ContiguousContainer.h" |
| 10 #include "platform/graphics/paint/DisplayItemClient.h" | 10 #include "platform/graphics/paint/DisplayItemClient.h" |
| 11 #include "platform/wtf/Allocator.h" | 11 #include "platform/wtf/Allocator.h" |
| 12 #include "platform/wtf/Assertions.h" | 12 #include "platform/wtf/Assertions.h" |
| 13 #include "platform/wtf/Noncopyable.h" | 13 #include "platform/wtf/Noncopyable.h" |
| 14 | 14 |
| 15 #ifndef NDEBUG | 15 #ifndef NDEBUG |
| 16 #include "platform/wtf/text/StringBuilder.h" | 16 #include "platform/wtf/text/StringBuilder.h" |
| 17 #include "platform/wtf/text/WTFString.h" | 17 #include "platform/wtf/text/WTFString.h" |
| 18 #endif | 18 #endif |
| 19 | 19 |
| 20 namespace blink { | 20 namespace blink { |
| 21 | 21 |
| 22 class GraphicsContext; | 22 class GraphicsContext; |
| 23 class IntRect; | 23 class LayoutSize; |
| 24 class WebDisplayItemList; | 24 class WebDisplayItemList; |
| 25 | 25 |
| 26 class PLATFORM_EXPORT DisplayItem { | 26 class PLATFORM_EXPORT DisplayItem { |
| 27 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); | 27 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
| 28 | 28 |
| 29 public: | 29 public: |
| 30 enum { | 30 enum { |
| 31 // Must be kept in sync with core/paint/PaintPhase.h. | 31 // Must be kept in sync with core/paint/PaintPhase.h. |
| 32 kPaintPhaseMax = 11, | 32 kPaintPhaseMax = 11, |
| 33 }; | 33 }; |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 // border type. | 192 // border type. |
| 193 enum TableCollapsedBorderSides { | 193 enum TableCollapsedBorderSides { |
| 194 kTableCollapsedBorderTop = 1 << 0, | 194 kTableCollapsedBorderTop = 1 << 0, |
| 195 kTableCollapsedBorderRight = 1 << 1, | 195 kTableCollapsedBorderRight = 1 << 1, |
| 196 kTableCollapsedBorderBottom = 1 << 2, | 196 kTableCollapsedBorderBottom = 1 << 2, |
| 197 kTableCollapsedBorderLeft = 1 << 3, | 197 kTableCollapsedBorderLeft = 1 << 3, |
| 198 }; | 198 }; |
| 199 | 199 |
| 200 DisplayItem(const DisplayItemClient& client, Type type, size_t derived_size) | 200 DisplayItem(const DisplayItemClient& client, Type type, size_t derived_size) |
| 201 : client_(&client), | 201 : client_(&client), |
| 202 visual_rect_(client.VisualRect()), |
| 202 type_(type), | 203 type_(type), |
| 203 derived_size_(derived_size), | 204 derived_size_(derived_size), |
| 204 skipped_cache_(false) | 205 skipped_cache_(false) |
| 205 #ifndef NDEBUG | 206 #ifndef NDEBUG |
| 206 , | 207 , |
| 207 client_debug_string_(client.DebugName()) | 208 client_debug_string_(client.DebugName()) |
| 208 #endif | 209 #endif |
| 209 { | 210 { |
| 210 // derivedSize must fit in m_derivedSize. | 211 // derivedSize must fit in m_derivedSize. |
| 211 // If it doesn't, enlarge m_derivedSize and fix this assert. | 212 // If it doesn't, enlarge m_derivedSize and fix this assert. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 226 }; | 227 }; |
| 227 | 228 |
| 228 Id GetId() const { return Id(*client_, type_); } | 229 Id GetId() const { return Id(*client_, type_); } |
| 229 | 230 |
| 230 virtual void Replay(GraphicsContext&) const {} | 231 virtual void Replay(GraphicsContext&) const {} |
| 231 | 232 |
| 232 const DisplayItemClient& Client() const { | 233 const DisplayItemClient& Client() const { |
| 233 DCHECK(client_); | 234 DCHECK(client_); |
| 234 return *client_; | 235 return *client_; |
| 235 } | 236 } |
| 237 |
| 238 // This equals to Client().VisualRect() as long as the client is alive and is |
| 239 // not invalidated. Otherwise it saves the previous visual rect of the client. |
| 240 // See DisplayItemClient::VisualRect() about its coordinate space. |
| 241 const LayoutRect& VisualRect() const { return visual_rect_; } |
| 242 |
| 236 Type GetType() const { return type_; } | 243 Type GetType() const { return type_; } |
| 237 | 244 |
| 238 // Size of this object in memory, used to move it with memcpy. | 245 // Size of this object in memory, used to move it with memcpy. |
| 239 // This is not sizeof(*this), because it needs to account for the size of | 246 // This is not sizeof(*this), because it needs to account for the size of |
| 240 // the derived class (i.e. runtime type). Derived classes are expected to | 247 // the derived class (i.e. runtime type). Derived classes are expected to |
| 241 // supply this to the DisplayItem constructor. | 248 // supply this to the DisplayItem constructor. |
| 242 size_t DerivedSize() const { return derived_size_; } | 249 size_t DerivedSize() const { return derived_size_; } |
| 243 | 250 |
| 244 // For PaintController only. Painters should use DisplayItemCacheSkipper | 251 // For PaintController only. Painters should use DisplayItemCacheSkipper |
| 245 // instead. | 252 // instead. |
| 246 void SetSkippedCache() { skipped_cache_ = true; } | 253 void SetSkippedCache() { skipped_cache_ = true; } |
| 247 bool SkippedCache() const { return skipped_cache_; } | 254 bool SkippedCache() const { return skipped_cache_; } |
| 248 | 255 |
| 249 // TODO(wkorman): Only DrawingDisplayItem needs the visual rect argument. | 256 // Appends this display item to the WebDisplayItemList, if applicable. |
| 250 // Consider refactoring class hierarchy to make this more explicit. | 257 // |visual_rect_offset| is the offset between the space of the GraphicsLayer |
| 251 virtual void AppendToWebDisplayItemList(const IntRect&, | 258 // which owns the display item and the coordinate space of VisualRect(). |
| 259 // TODO(wangxianzhu): Remove the parameter for slimming paint v2. |
| 260 virtual void AppendToWebDisplayItemList(const LayoutSize& visual_rect_offset, |
| 252 WebDisplayItemList*) const {} | 261 WebDisplayItemList*) const {} |
| 253 | 262 |
| 254 // See comments of enum Type for usage of the following macros. | 263 // See comments of enum Type for usage of the following macros. |
| 255 #define DEFINE_CATEGORY_METHODS(Category) \ | 264 #define DEFINE_CATEGORY_METHODS(Category) \ |
| 256 static bool Is##Category##Type(Type type) { \ | 265 static bool Is##Category##Type(Type type) { \ |
| 257 return type >= k##Category##First && type <= k##Category##Last; \ | 266 return type >= k##Category##First && type <= k##Category##Last; \ |
| 258 } \ | 267 } \ |
| 259 bool Is##Category() const { return Is##Category##Type(GetType()); } | 268 bool Is##Category() const { return Is##Category##Type(GetType()); } |
| 260 | 269 |
| 261 #define DEFINE_CONVERSION_METHODS(Category1, category1, Category2, category2) \ | 270 #define DEFINE_CONVERSION_METHODS(Category1, category1, Category2, category2) \ |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 WTF::String AsDebugString() const; | 353 WTF::String AsDebugString() const; |
| 345 virtual void DumpPropertiesAsDebugString(WTF::StringBuilder&) const; | 354 virtual void DumpPropertiesAsDebugString(WTF::StringBuilder&) const; |
| 346 #endif | 355 #endif |
| 347 | 356 |
| 348 private: | 357 private: |
| 349 // The default DisplayItem constructor is only used by | 358 // The default DisplayItem constructor is only used by |
| 350 // ContiguousContainer::appendByMoving where an invalid DisplaItem is | 359 // ContiguousContainer::appendByMoving where an invalid DisplaItem is |
| 351 // constructed at the source location. | 360 // constructed at the source location. |
| 352 template <typename T, unsigned alignment> | 361 template <typename T, unsigned alignment> |
| 353 friend class ContiguousContainer; | 362 friend class ContiguousContainer; |
| 363 friend class DisplayItemList; |
| 354 | 364 |
| 355 DisplayItem() | 365 DisplayItem() |
| 356 : client_(nullptr), | 366 : client_(nullptr), |
| 357 type_(kUninitializedType), | 367 type_(kUninitializedType), |
| 358 derived_size_(sizeof(*this)), | 368 derived_size_(sizeof(*this)), |
| 359 skipped_cache_(false) {} | 369 skipped_cache_(false) {} |
| 360 | 370 |
| 361 const DisplayItemClient* client_; | 371 const DisplayItemClient* client_; |
| 372 LayoutRect visual_rect_; |
| 373 |
| 362 static_assert(kTypeLast < (1 << 16), | 374 static_assert(kTypeLast < (1 << 16), |
| 363 "DisplayItem::Type should fit in 16 bits"); | 375 "DisplayItem::Type should fit in 16 bits"); |
| 364 const Type type_ : 16; | 376 const Type type_ : 16; |
| 365 const unsigned derived_size_ : 8; // size of the actual derived class | 377 const unsigned derived_size_ : 8; // size of the actual derived class |
| 366 unsigned skipped_cache_ : 1; | 378 unsigned skipped_cache_ : 1; |
| 367 | 379 |
| 368 #ifndef NDEBUG | 380 #ifndef NDEBUG |
| 369 WTF::String client_debug_string_; | 381 WTF::String client_debug_string_; |
| 370 #endif | 382 #endif |
| 371 }; | 383 }; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 400 bool IsEndAndPairedWith(DisplayItem::Type other_type) const override = 0; | 412 bool IsEndAndPairedWith(DisplayItem::Type other_type) const override = 0; |
| 401 #endif | 413 #endif |
| 402 | 414 |
| 403 private: | 415 private: |
| 404 bool IsEnd() const final { return true; } | 416 bool IsEnd() const final { return true; } |
| 405 }; | 417 }; |
| 406 | 418 |
| 407 } // namespace blink | 419 } // namespace blink |
| 408 | 420 |
| 409 #endif // DisplayItem_h | 421 #endif // DisplayItem_h |
| OLD | NEW |