| Index: cc/output/software_renderer_unittest.cc
|
| diff --git a/cc/output/software_renderer_unittest.cc b/cc/output/software_renderer_unittest.cc
|
| index b6867fe7247dc44248096634386730e562482218..19a68ca63402e4ca6756a8c9f301ddfe3b2ff98c 100644
|
| --- a/cc/output/software_renderer_unittest.cc
|
| +++ b/cc/output/software_renderer_unittest.cc
|
| @@ -27,6 +27,7 @@
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "third_party/skia/include/core/SkCanvas.h"
|
| +#include "third_party/skia/include/utils/SkNWayCanvas.h"
|
| #include "ui/gfx/skia_util.h"
|
|
|
| namespace cc {
|
| @@ -378,26 +379,45 @@ TEST_F(SoftwareRendererTest, RenderPassVisibleRect) {
|
| interior_visible_rect.bottom() - 1));
|
| }
|
|
|
| +class ClipTrackingCanvas : public SkNWayCanvas {
|
| + public:
|
| + ClipTrackingCanvas(int width, int height) : SkNWayCanvas(width, height) {}
|
| + void onClipRect(const SkRect& rect,
|
| + SkClipOp op,
|
| + ClipEdgeStyle style) override {
|
| + last_clip_rect_ = rect;
|
| + SkNWayCanvas::onClipRect(rect, op, style);
|
| + }
|
| +
|
| + SkRect last_clip_rect() const { return last_clip_rect_; }
|
| +
|
| + private:
|
| + SkRect last_clip_rect_;
|
| +};
|
| +
|
| class PartialSwapSoftwareOutputDevice : public SoftwareOutputDevice {
|
| public:
|
| // SoftwareOutputDevice overrides.
|
| SkCanvas* BeginPaint(const gfx::Rect& damage_rect) override {
|
| damage_rect_at_start_ = damage_rect;
|
| - canvas_ = SoftwareOutputDevice::BeginPaint(damage_rect);
|
| - return canvas_;
|
| + canvas_.reset(new ClipTrackingCanvas(viewport_pixel_size_.width(),
|
| + viewport_pixel_size_.height()));
|
| + canvas_->addCanvas(SoftwareOutputDevice::BeginPaint(damage_rect));
|
| + return canvas_.get();
|
| }
|
| +
|
| void EndPaint() override {
|
| - clip_rect_at_end_ = gfx::SkIRectToRect(canvas_->getDeviceClipBounds());
|
| + clip_rect_at_end_ = gfx::SkRectToRectF(canvas_->last_clip_rect());
|
| SoftwareOutputDevice::EndPaint();
|
| }
|
|
|
| gfx::Rect damage_rect_at_start() const { return damage_rect_at_start_; }
|
| - gfx::Rect clip_rect_at_end() const { return clip_rect_at_end_; }
|
| + gfx::RectF clip_rect_at_end() const { return clip_rect_at_end_; }
|
|
|
| private:
|
| - SkCanvas* canvas_ = nullptr;
|
| + std::unique_ptr<ClipTrackingCanvas> canvas_;
|
| gfx::Rect damage_rect_at_start_;
|
| - gfx::Rect clip_rect_at_end_;
|
| + gfx::RectF clip_rect_at_end_;
|
| };
|
|
|
| TEST_F(SoftwareRendererTest, PartialSwap) {
|
| @@ -428,7 +448,7 @@ TEST_F(SoftwareRendererTest, PartialSwap) {
|
| // The damage rect should be reported to the SoftwareOutputDevice.
|
| EXPECT_EQ(gfx::Rect(2, 2, 3, 3), device->damage_rect_at_start());
|
| // The SkCanvas should be clipped to the damage rect.
|
| - EXPECT_EQ(gfx::Rect(2, 2, 3, 3), device->clip_rect_at_end());
|
| + EXPECT_EQ(gfx::RectF(2, 2, 3, 3), device->clip_rect_at_end());
|
| }
|
|
|
| } // namespace
|
|
|