Chromium Code Reviews| Index: content/browser/compositor/software_output_device_mac.h |
| diff --git a/content/browser/compositor/software_output_device_mac.h b/content/browser/compositor/software_output_device_mac.h |
| index 77c61fcd7e5ff5bf3e81251a25b4c123d453514c..8548d16d3c6b353d59e06a7b22741b5a8235c883 100644 |
| --- a/content/browser/compositor/software_output_device_mac.h |
| +++ b/content/browser/compositor/software_output_device_mac.h |
| @@ -42,27 +42,35 @@ class SoftwareOutputDeviceMac : |
| const gfx::VSyncProvider::UpdateVSyncCallback& callback) override; |
| private: |
| - bool EnsureBuffersExist(); |
| - |
| - // Copy the pixels from the previous buffer to the new buffer. |
| - void CopyPreviousBufferDamage(const SkRegion& new_damage_rect); |
| - |
| - ui::Compositor* compositor_; |
| + // |
| + struct Buffer { |
| + Buffer(); |
| + ~Buffer(); |
| + base::ScopedCFTypeRef<IOSurfaceRef> io_surface; |
| + // The damage of all BeginPaints since this buffer was the back buffer. |
| + SkRegion accumulated_damage; |
| + }; |
| + |
| + // Copy the pixels from the previous buffer to the new buffer, and union |
| + // |new_damage_rect| into all |buffer_queue_|'s accumulated damages. |
| + void UpdateAndCopyBufferDamage(Buffer* previous_paint_buffer, |
| + const SkRegion& new_damage_rect); |
| + |
| + ui::Compositor* compositor_ = nullptr; |
| gfx::Size pixel_size_; |
| - float scale_factor_; |
| + float scale_factor_ = 1; |
| // This surface is double-buffered. The two buffers are in |io_surfaces_|, |
|
jbauman
2017/05/05 19:19:25
Fix comment.
ccameron
2017/05/05 22:06:08
Done.
|
| // and the index of the current buffer is |current_buffer_|. |
| - base::ScopedCFTypeRef<IOSurfaceRef> io_surfaces_[2]; |
| - int current_index_; |
| + std::list<std::unique_ptr<Buffer>> buffer_queue_; |
| - // The previous frame's damage rectangle. Used to copy unchanged content |
| - // between buffers in CopyPreviousBufferDamage. |
| - SkRegion previous_buffer_damage_region_; |
| + // A pointer to the last element of |buffer_queue_| during paint. It is only |
| + // valid between BeginPaint and EndPaint. |
| + Buffer* current_paint_buffer_ = nullptr; |
| - // The SkCanvas wrapps the mapped current IOSurface. It is valid only between |
| - // BeginPaint and EndPaint. |
| - std::unique_ptr<SkCanvas> canvas_; |
| + // The SkCanvas wraps the mapped |current_paint_buffer_|'s IOSurface. It is |
| + // valid only between BeginPaint and EndPaint. |
| + std::unique_ptr<SkCanvas> current_paint_canvas_ = nullptr; |
| gfx::VSyncProvider::UpdateVSyncCallback update_vsync_callback_; |