Chromium Code Reviews| 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()), | |
|
Xianzhu
2017/05/19 00:27:42
For now save visual rect for all display items bec
| |
| 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 const LayoutRect& VisualRect() const { return visual_rect_; } | |
| 239 | |
| 236 Type GetType() const { return type_; } | 240 Type GetType() const { return type_; } |
| 237 | 241 |
| 238 // Size of this object in memory, used to move it with memcpy. | 242 // 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 | 243 // 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 | 244 // the derived class (i.e. runtime type). Derived classes are expected to |
| 241 // supply this to the DisplayItem constructor. | 245 // supply this to the DisplayItem constructor. |
| 242 size_t DerivedSize() const { return derived_size_; } | 246 size_t DerivedSize() const { return derived_size_; } |
| 243 | 247 |
| 244 // For PaintController only. Painters should use DisplayItemCacheSkipper | 248 // For PaintController only. Painters should use DisplayItemCacheSkipper |
| 245 // instead. | 249 // instead. |
| 246 void SetSkippedCache() { skipped_cache_ = true; } | 250 void SetSkippedCache() { skipped_cache_ = true; } |
| 247 bool SkippedCache() const { return skipped_cache_; } | 251 bool SkippedCache() const { return skipped_cache_; } |
| 248 | 252 |
| 249 // TODO(wkorman): Only DrawingDisplayItem needs the visual rect argument. | 253 virtual void AppendToWebDisplayItemList(const LayoutSize&, |
| 250 // Consider refactoring class hierarchy to make this more explicit. | |
| 251 virtual void AppendToWebDisplayItemList(const IntRect&, | |
| 252 WebDisplayItemList*) const {} | 254 WebDisplayItemList*) const {} |
| 253 | 255 |
| 254 // See comments of enum Type for usage of the following macros. | 256 // See comments of enum Type for usage of the following macros. |
| 255 #define DEFINE_CATEGORY_METHODS(Category) \ | 257 #define DEFINE_CATEGORY_METHODS(Category) \ |
| 256 static bool Is##Category##Type(Type type) { \ | 258 static bool Is##Category##Type(Type type) { \ |
| 257 return type >= k##Category##First && type <= k##Category##Last; \ | 259 return type >= k##Category##First && type <= k##Category##Last; \ |
| 258 } \ | 260 } \ |
| 259 bool Is##Category() const { return Is##Category##Type(GetType()); } | 261 bool Is##Category() const { return Is##Category##Type(GetType()); } |
| 260 | 262 |
| 261 #define DEFINE_CONVERSION_METHODS(Category1, category1, Category2, category2) \ | 263 #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; | 346 WTF::String AsDebugString() const; |
| 345 virtual void DumpPropertiesAsDebugString(WTF::StringBuilder&) const; | 347 virtual void DumpPropertiesAsDebugString(WTF::StringBuilder&) const; |
| 346 #endif | 348 #endif |
| 347 | 349 |
| 348 private: | 350 private: |
| 349 // The default DisplayItem constructor is only used by | 351 // The default DisplayItem constructor is only used by |
| 350 // ContiguousContainer::appendByMoving where an invalid DisplaItem is | 352 // ContiguousContainer::appendByMoving where an invalid DisplaItem is |
| 351 // constructed at the source location. | 353 // constructed at the source location. |
| 352 template <typename T, unsigned alignment> | 354 template <typename T, unsigned alignment> |
| 353 friend class ContiguousContainer; | 355 friend class ContiguousContainer; |
| 356 friend class DisplayItemList; | |
| 354 | 357 |
| 355 DisplayItem() | 358 DisplayItem() |
| 356 : client_(nullptr), | 359 : client_(nullptr), |
| 357 type_(kUninitializedType), | 360 type_(kUninitializedType), |
| 358 derived_size_(sizeof(*this)), | 361 derived_size_(sizeof(*this)), |
| 359 skipped_cache_(false) {} | 362 skipped_cache_(false) {} |
| 360 | 363 |
| 361 const DisplayItemClient* client_; | 364 const DisplayItemClient* client_; |
| 365 LayoutRect visual_rect_; | |
| 366 | |
| 362 static_assert(kTypeLast < (1 << 16), | 367 static_assert(kTypeLast < (1 << 16), |
| 363 "DisplayItem::Type should fit in 16 bits"); | 368 "DisplayItem::Type should fit in 16 bits"); |
| 364 const Type type_ : 16; | 369 const Type type_ : 16; |
| 365 const unsigned derived_size_ : 8; // size of the actual derived class | 370 const unsigned derived_size_ : 8; // size of the actual derived class |
| 366 unsigned skipped_cache_ : 1; | 371 unsigned skipped_cache_ : 1; |
| 367 | 372 |
| 368 #ifndef NDEBUG | 373 #ifndef NDEBUG |
| 369 WTF::String client_debug_string_; | 374 WTF::String client_debug_string_; |
| 370 #endif | 375 #endif |
| 371 }; | 376 }; |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 400 bool IsEndAndPairedWith(DisplayItem::Type other_type) const override = 0; | 405 bool IsEndAndPairedWith(DisplayItem::Type other_type) const override = 0; |
| 401 #endif | 406 #endif |
| 402 | 407 |
| 403 private: | 408 private: |
| 404 bool IsEnd() const final { return true; } | 409 bool IsEnd() const final { return true; } |
| 405 }; | 410 }; |
| 406 | 411 |
| 407 } // namespace blink | 412 } // namespace blink |
| 408 | 413 |
| 409 #endif // DisplayItem_h | 414 #endif // DisplayItem_h |
| OLD | NEW |