| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 CC_PAINT_PAINT_OP_BUFFER_H_ | 5 #ifndef CC_PAINT_PAINT_OP_BUFFER_H_ |
| 6 #define CC_PAINT_PAINT_OP_BUFFER_H_ | 6 #define CC_PAINT_PAINT_OP_BUFFER_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 using LargestPaintOp = DrawDRRectOp; | 765 using LargestPaintOp = DrawDRRectOp; |
| 766 | 766 |
| 767 class CC_PAINT_EXPORT PaintOpBuffer : public SkRefCnt { | 767 class CC_PAINT_EXPORT PaintOpBuffer : public SkRefCnt { |
| 768 public: | 768 public: |
| 769 enum { kInitialBufferSize = 4096 }; | 769 enum { kInitialBufferSize = 4096 }; |
| 770 // It's not necessarily the case that the op with the maximum alignment | 770 // It's not necessarily the case that the op with the maximum alignment |
| 771 // requirements is also the biggest op, but for now that's true. | 771 // requirements is also the biggest op, but for now that's true. |
| 772 static constexpr size_t PaintOpAlign = ALIGNOF(DrawDRRectOp); | 772 static constexpr size_t PaintOpAlign = ALIGNOF(DrawDRRectOp); |
| 773 | 773 |
| 774 PaintOpBuffer(); | 774 PaintOpBuffer(); |
| 775 explicit PaintOpBuffer(const SkRect& cull_rect); | |
| 776 ~PaintOpBuffer() override; | 775 ~PaintOpBuffer() override; |
| 777 | 776 |
| 778 void Reset(); | 777 void Reset(); |
| 779 | 778 |
| 780 void playback(SkCanvas* canvas) const; | 779 void playback(SkCanvas* canvas) const; |
| 781 void playback(SkCanvas* canvas, SkPicture::AbortCallback* callback) const; | 780 void playback(SkCanvas* canvas, SkPicture::AbortCallback* callback) const; |
| 782 | 781 |
| 783 // Returns the size of the paint op buffer. That is, the number of ops | 782 // Returns the size of the paint op buffer. That is, the number of ops |
| 784 // contained in it. | 783 // contained in it. |
| 785 size_t size() const { return op_count_; } | 784 size_t size() const { return op_count_; } |
| 786 // Returns the number of bytes used by the paint op buffer. | 785 // Returns the number of bytes used by the paint op buffer. |
| 787 size_t bytes_used() const { | 786 size_t bytes_used() const { |
| 788 return sizeof(*this) + reserved_ + subrecord_bytes_used_; | 787 return sizeof(*this) + reserved_ + subrecord_bytes_used_; |
| 789 } | 788 } |
| 790 int numSlowPaths() const { return num_slow_paths_; } | 789 int numSlowPaths() const { return num_slow_paths_; } |
| 791 bool HasDiscardableImages() const { return has_discardable_images_; } | 790 bool HasDiscardableImages() const { return has_discardable_images_; } |
| 792 | 791 |
| 793 // Resize the PaintOpBuffer to exactly fit the current amount of used space. | 792 // Resize the PaintOpBuffer to exactly fit the current amount of used space. |
| 794 void ShrinkToFit(); | 793 void ShrinkToFit(); |
| 795 | 794 |
| 796 const SkRect& cullRect() const { return cull_rect_; } | |
| 797 | |
| 798 PaintOp* GetFirstOp() const { | 795 PaintOp* GetFirstOp() const { |
| 799 return const_cast<PaintOp*>(first_op_.data_as<PaintOp>()); | 796 return const_cast<PaintOp*>(first_op_.data_as<PaintOp>()); |
| 800 } | 797 } |
| 801 | 798 |
| 802 template <typename T, typename... Args> | 799 template <typename T, typename... Args> |
| 803 void push(Args&&... args) { | 800 void push(Args&&... args) { |
| 804 static_assert(std::is_convertible<T, PaintOp>::value, "T not a PaintOp."); | 801 static_assert(std::is_convertible<T, PaintOp>::value, "T not a PaintOp."); |
| 805 static_assert(!std::is_convertible<T, PaintOpWithData>::value, | 802 static_assert(!std::is_convertible<T, PaintOpWithData>::value, |
| 806 "Type needs to use push_with_data"); | 803 "Type needs to use push_with_data"); |
| 807 push_internal<T>(0, std::forward<Args>(args)...); | 804 push_internal<T>(0, std::forward<Args>(args)...); |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 std::unique_ptr<char, base::AlignedFreeDeleter> data_; | 939 std::unique_ptr<char, base::AlignedFreeDeleter> data_; |
| 943 size_t used_ = 0; | 940 size_t used_ = 0; |
| 944 size_t reserved_ = 0; | 941 size_t reserved_ = 0; |
| 945 size_t op_count_ = 0; | 942 size_t op_count_ = 0; |
| 946 | 943 |
| 947 // Record paths for veto-to-msaa for gpu raster. | 944 // Record paths for veto-to-msaa for gpu raster. |
| 948 int num_slow_paths_ = 0; | 945 int num_slow_paths_ = 0; |
| 949 // Record additional bytes used by referenced sub-records and display lists. | 946 // Record additional bytes used by referenced sub-records and display lists. |
| 950 size_t subrecord_bytes_used_ = 0; | 947 size_t subrecord_bytes_used_ = 0; |
| 951 bool has_discardable_images_ = false; | 948 bool has_discardable_images_ = false; |
| 952 SkRect cull_rect_; | |
| 953 | 949 |
| 954 DISALLOW_COPY_AND_ASSIGN(PaintOpBuffer); | 950 DISALLOW_COPY_AND_ASSIGN(PaintOpBuffer); |
| 955 }; | 951 }; |
| 956 | 952 |
| 957 } // namespace cc | 953 } // namespace cc |
| 958 | 954 |
| 959 #endif // CC_PAINT_PAINT_OP_BUFFER_H_ | 955 #endif // CC_PAINT_PAINT_OP_BUFFER_H_ |
| OLD | NEW |