diff options
author | ccameron@chromium.org <ccameron@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-24 22:01:50 +0000 |
---|---|---|
committer | ccameron@chromium.org <ccameron@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-24 22:01:50 +0000 |
commit | 94c40e629c13f38e8eff6f8435ea490b7d40dbb9 (patch) | |
tree | 38578f86de47e92040742c8dd5e84a5910c2e5a7 /cc/output | |
parent | f66375e4d724f5da1a406d553259685451cdf55d (diff) | |
download | chromium_src-94c40e629c13f38e8eff6f8435ea490b7d40dbb9.zip chromium_src-94c40e629c13f38e8eff6f8435ea490b7d40dbb9.tar.gz chromium_src-94c40e629c13f38e8eff6f8435ea490b7d40dbb9.tar.bz2 |
Part 1/3 (compositor) of adding with device scale factor to transport surfaces
Add a DeviceScaleFactor method to RendererClient (and all
its instances) to get the scale factor from the layer tree to the
output surface.
Add a scale factor argument to OutputSurface::Reshape
Replace OutputSurface::Reshape's use of WebGraphicsContext3D's
reshape with reshapeWithScaleFactor.
Implement reshapeWithScaleFactor for command buffer
based WebGraphicsContext3Ds, but stop propagating the
scale factor argument there.
BUG=132714
Review URL: https://chromiumcodereview.appspot.com/15688002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@202189 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/output')
-rw-r--r-- | cc/output/gl_renderer.cc | 3 | ||||
-rw-r--r-- | cc/output/gl_renderer_unittest.cc | 54 | ||||
-rw-r--r-- | cc/output/output_surface.cc | 4 | ||||
-rw-r--r-- | cc/output/output_surface.h | 2 | ||||
-rw-r--r-- | cc/output/renderer.h | 3 | ||||
-rw-r--r-- | cc/output/software_renderer_unittest.cc | 3 |
6 files changed, 61 insertions, 8 deletions
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc index 47a7cc0..da2f4f6 100644 --- a/cc/output/gl_renderer.cc +++ b/cc/output/gl_renderer.cc @@ -321,7 +321,8 @@ void GLRenderer::BeginDrawingFrame(DrawingFrame* frame) { // can leave the window at the wrong size if we never draw and the proper // viewport size is never set. is_viewport_changed_ = false; - output_surface_->Reshape(gfx::Size(ViewportWidth(), ViewportHeight())); + output_surface_->Reshape(gfx::Size(ViewportWidth(), ViewportHeight()), + DeviceScaleFactor()); } MakeContextCurrent(); diff --git a/cc/output/gl_renderer_unittest.cc b/cc/output/gl_renderer_unittest.cc index 2ee3a63..7e1a438 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 { diff --git a/cc/output/output_surface.cc b/cc/output/output_surface.cc index 7a7bdb0..b471a08 100644 --- a/cc/output/output_surface.cc +++ b/cc/output/output_surface.cc @@ -112,9 +112,9 @@ void OutputSurface::DiscardBackbuffer() { context3d_->discardBackbufferCHROMIUM(); } -void OutputSurface::Reshape(gfx::Size size) { +void OutputSurface::Reshape(gfx::Size size, float scale_factor) { DCHECK(context3d_); - context3d_->reshape(size.width(), size.height()); + context3d_->reshapeWithScaleFactor(size.width(), size.height(), scale_factor); } void OutputSurface::BindFramebuffer() { diff --git a/cc/output/output_surface.h b/cc/output/output_surface.h index 22ce6af..fb6f0b9 100644 --- a/cc/output/output_surface.h +++ b/cc/output/output_surface.h @@ -87,7 +87,7 @@ class CC_EXPORT OutputSurface { virtual void EnsureBackbuffer(); virtual void DiscardBackbuffer(); - virtual void Reshape(gfx::Size size); + virtual void Reshape(gfx::Size size, float scale_factor); virtual void BindFramebuffer(); diff --git a/cc/output/renderer.h b/cc/output/renderer.h index b1b9f48..5592090 100644 --- a/cc/output/renderer.h +++ b/cc/output/renderer.h @@ -21,6 +21,7 @@ class ScopedResource; class CC_EXPORT RendererClient { public: virtual gfx::Size DeviceViewportSize() const = 0; + virtual float DeviceScaleFactor() const = 0; virtual const LayerTreeSettings& Settings() const = 0; virtual void SetFullRootLayerDamage() = 0; virtual void SetManagedMemoryPolicy(const ManagedMemoryPolicy& policy) = 0; @@ -47,6 +48,8 @@ class CC_EXPORT Renderer { int ViewportWidth() const { return ViewportSize().width(); } int ViewportHeight() const { return ViewportSize().height(); } + float DeviceScaleFactor() const { return client_->DeviceScaleFactor(); } + virtual void ViewportChanged() {} virtual void ReceiveCompositorFrameAck(const CompositorFrameAck& ack) {} diff --git a/cc/output/software_renderer_unittest.cc b/cc/output/software_renderer_unittest.cc index 4f2d605..af4d7d1 100644 --- a/cc/output/software_renderer_unittest.cc +++ b/cc/output/software_renderer_unittest.cc @@ -52,6 +52,9 @@ class SoftwareRendererTest : public testing::Test, public RendererClient { virtual gfx::Size DeviceViewportSize() const OVERRIDE { return viewport_size_; } + virtual float DeviceScaleFactor() const OVERRIDE { + return 1.f; + } virtual const LayerTreeSettings& Settings() const OVERRIDE { return settings_; } |