Index: cc/output/gl_renderer_unittest.cc |
diff --git a/cc/output/gl_renderer_unittest.cc b/cc/output/gl_renderer_unittest.cc |
index 2ee3a6370308c64115bc7c1f618276bff5ed5283..7e1a4384fcab50c829f8db50ef4efb62ae1a7408 100644 |
--- a/cc/output/gl_renderer_unittest.cc |
+++ b/cc/output/gl_renderer_unittest.cc |
@@ -151,7 +151,10 @@ class FakeRendererClient : public RendererClient { |
last_call_was_set_visibility_(0), |
root_layer_(LayerImpl::Create(host_impl_.active_tree(), 1)), |
memory_allocation_limit_bytes_( |
- PrioritizedResourceManager::DefaultMemoryAllocationLimit()) { |
+ PrioritizedResourceManager::DefaultMemoryAllocationLimit()), |
+ viewport_size_(gfx::Size(1, 1)), |
+ scale_factor_(1.f), |
+ is_viewport_changed_(true) { |
root_layer_->CreateRenderSurface(); |
RenderPass::Id render_pass_id = |
root_layer_->render_surface()->RenderPassId(); |
@@ -166,6 +169,9 @@ class FakeRendererClient : public RendererClient { |
static gfx::Size fake_size(1, 1); |
return fake_size; |
} |
+ virtual float DeviceScaleFactor() const OVERRIDE { |
+ return scale_factor_; |
+ } |
virtual const LayerTreeSettings& Settings() const OVERRIDE { |
static LayerTreeSettings fake_settings; |
return fake_settings; |
@@ -199,6 +205,14 @@ class FakeRendererClient : public RendererClient { |
bool* last_call_was_set_visibility) { |
last_call_was_set_visibility_ = last_call_was_set_visibility; |
} |
+ void set_viewport_and_scale( |
+ gfx::Size viewport_size, float scale_factor) { |
+ viewport_size_ = viewport_size; |
+ scale_factor_ = scale_factor; |
+ is_viewport_changed_ = true; |
+ } |
+ bool is_viewport_changed() const { return is_viewport_changed_; } |
+ void clear_viewport_changed() { is_viewport_changed_ = false; } |
RenderPass* root_render_pass() { return render_passes_in_draw_order_.back(); } |
RenderPassList* render_passes_in_draw_order() { |
@@ -217,6 +231,9 @@ class FakeRendererClient : public RendererClient { |
scoped_ptr<LayerImpl> root_layer_; |
RenderPassList render_passes_in_draw_order_; |
size_t memory_allocation_limit_bytes_; |
+ gfx::Size viewport_size_; |
+ float scale_factor_; |
+ bool is_viewport_changed_; |
}; |
class FakeRendererGL : public GLRenderer { |
@@ -1437,7 +1454,8 @@ class OutputSurfaceMockContext : public TestWebGraphicsContext3D { |
MOCK_METHOD0(discardBackbufferCHROMIUM, void()); |
MOCK_METHOD2(bindFramebuffer, void(WGC3Denum target, WebGLId framebuffer)); |
MOCK_METHOD0(prepareTexture, void()); |
- MOCK_METHOD2(reshape, void(int width, int height)); |
+ MOCK_METHOD3(reshapeWithScaleFactor, |
+ void(int width, int height, float scale_factor)); |
MOCK_METHOD4(drawElements, |
void(WGC3Denum mode, |
WGC3Dsizei count, |
@@ -1462,7 +1480,7 @@ class MockOutputSurface : public OutputSurface { |
MOCK_METHOD1(SendFrameToParentCompositor, void(CompositorFrame* frame)); |
MOCK_METHOD0(EnsureBackbuffer, void()); |
MOCK_METHOD0(DiscardBackbuffer, void()); |
- MOCK_METHOD1(Reshape, void(gfx::Size size)); |
+ MOCK_METHOD2(Reshape, void(gfx::Size size, float scale_factor)); |
MOCK_METHOD0(BindFramebuffer, void()); |
MOCK_METHOD2(PostSubBuffer, void(gfx::Rect rect, const LatencyInfo&)); |
MOCK_METHOD1(SwapBuffers, void(const LatencyInfo&)); |
@@ -1490,7 +1508,11 @@ class MockOutputSurfaceTest : public testing::Test, public FakeRendererClient { |
EXPECT_CALL(output_surface_, EnsureBackbuffer()).WillRepeatedly(Return()); |
- EXPECT_CALL(output_surface_, Reshape(_)).Times(1); |
+ if (is_viewport_changed()) { |
+ EXPECT_CALL(output_surface_, |
+ Reshape(DeviceViewportSize(), DeviceScaleFactor())).Times(1); |
+ clear_viewport_changed(); |
+ } |
EXPECT_CALL(output_surface_, BindFramebuffer()).Times(1); |
@@ -1517,6 +1539,30 @@ TEST_F(MockOutputSurfaceTest, DrawFrameAndSwap) { |
renderer_.SwapBuffers(LatencyInfo()); |
} |
+TEST_F(MockOutputSurfaceTest, DrawFrameAndResizeAndSwap) { |
+ DrawFrame(); |
+ EXPECT_CALL(output_surface_, SwapBuffers(_)).Times(1); |
+ renderer_.SwapBuffers(LatencyInfo()); |
+ |
+ set_viewport_and_scale(gfx::Size(2, 2), 2.f); |
+ renderer_.ViewportChanged(); |
+ |
+ DrawFrame(); |
+ EXPECT_CALL(output_surface_, SwapBuffers(_)).Times(1); |
+ renderer_.SwapBuffers(LatencyInfo()); |
+ |
+ DrawFrame(); |
+ EXPECT_CALL(output_surface_, SwapBuffers(_)).Times(1); |
+ renderer_.SwapBuffers(LatencyInfo()); |
+ |
+ set_viewport_and_scale(gfx::Size(1, 1), 1.f); |
+ renderer_.ViewportChanged(); |
+ |
+ DrawFrame(); |
+ EXPECT_CALL(output_surface_, SwapBuffers(_)).Times(1); |
+ renderer_.SwapBuffers(LatencyInfo()); |
+} |
+ |
class MockOutputSurfaceTestWithPartialSwap : public MockOutputSurfaceTest { |
public: |
virtual const LayerTreeSettings& Settings() const OVERRIDE { |