Chromium Code Reviews| Index: third_party/WebKit/Source/platform/graphics/paint/ScopedPaintChunkProperties.h |
| diff --git a/third_party/WebKit/Source/platform/graphics/paint/ScopedPaintChunkProperties.h b/third_party/WebKit/Source/platform/graphics/paint/ScopedPaintChunkProperties.h |
| index ec105314abfd10f60cde85aa1b90a83bfd0986cc..3c4386ab9f56c2c82500c097e4e41247180f7095 100644 |
| --- a/third_party/WebKit/Source/platform/graphics/paint/ScopedPaintChunkProperties.h |
| +++ b/third_party/WebKit/Source/platform/graphics/paint/ScopedPaintChunkProperties.h |
| @@ -5,6 +5,7 @@ |
| #ifndef ScopedPaintChunkProperties_h |
| #define ScopedPaintChunkProperties_h |
| +#include "platform/graphics/paint/DisplayItem.h" |
| #include "platform/graphics/paint/PaintChunkProperties.h" |
| #include "platform/graphics/paint/PaintController.h" |
| #include "wtf/Allocator.h" |
| @@ -16,16 +17,27 @@ class ScopedPaintChunkProperties { |
| DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
| WTF_MAKE_NONCOPYABLE(ScopedPaintChunkProperties); |
| public: |
| - ScopedPaintChunkProperties(PaintController& paintController, const PaintChunkProperties& properties) |
| + ScopedPaintChunkProperties(PaintController& paintController, const DisplayItemClient& client, DisplayItem::Type type, const PaintChunkProperties& properties) |
| : m_paintController(paintController) |
| , m_previousProperties(paintController.currentPaintChunkProperties()) |
| { |
| - m_paintController.updateCurrentPaintChunkProperties(properties); |
| + DisplayItem::Id id(client, type); |
| + m_paintController.updateCurrentPaintChunkProperties(&id, properties); |
| } |
| + // Omits the type parameter, in case that the client creates only one PaintChunkProperties node during each painting. |
| + ScopedPaintChunkProperties(PaintController& paintController, const DisplayItemClient& client, const PaintChunkProperties& properties) |
| + : ScopedPaintChunkProperties(paintController, client, DisplayItem::UninitializedType, properties) |
| + { } |
| + |
| ~ScopedPaintChunkProperties() |
| { |
| - m_paintController.updateCurrentPaintChunkProperties(m_previousProperties); |
| + // We should not return to the previous id, because that may cause a new chunk to use |
| + // the same id as that of the previous chunk before this ScopedPaintChunkProperties. |
|
pdr.
2016/07/14 22:22:06
Can this happen when we are not skipping the cache
Xianzhu
2016/07/14 23:03:24
Skipping cache will cause chunk with null id, caus
|
| + // The painter should create another scope of paint properties with new id, or the |
| + // new chunk will have no id and will not match any old chunk and will be treated as |
| + // fully invalidated for rasterization. |
| + m_paintController.updateCurrentPaintChunkProperties(nullptr, m_previousProperties); |
| } |
| private: |