// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_OBJECT_PAINT_PROPERTIES_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_OBJECT_PAINT_PROPERTIES_H_ #include <array> #include <memory> #include <utility> #include <variant> #include "base/dcheck_is_on.h" #include "base/memory/ptr_util.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.h" #include "third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h" #include "third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h" #include "third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h" #include "third_party/blink/renderer/platform/sparse_vector.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/member.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" namespace blink { // This class is for storing the paint property nodes created by a // LayoutObject. The object owns each of the property nodes directly and RefPtrs // are only used to harden against use-after-free bugs. These paint properties // are built/updated by PaintPropertyTreeBuilder during the PrePaint lifecycle // step. // // [update & clear implementation note] This class has Update[property](...) and // Clear[property]() helper functions for efficiently creating and updating // properties. The update functions returns a 3-state result to indicate whether // the value or the existence of the node has changed. They use a create-or- // update pattern of re-using existing properties for efficiency: // 1. It avoids extra allocations. // 2. It preserves existing child->parent pointers. // The clear functions return true if an existing node is removed. Property // nodes store parent pointers but not child pointers and these return values // are important for catching property tree structure changes which require // updating descendant's parent pointers. class CORE_EXPORT ObjectPaintProperties : public GarbageCollected<ObjectPaintProperties> { … } … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_OBJECT_PAINT_PROPERTIES_H_