summaryrefslogtreecommitdiffstats
path: root/cc/output
diff options
context:
space:
mode:
authorccameron@chromium.org <ccameron@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-24 22:01:50 +0000
committerccameron@chromium.org <ccameron@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-24 22:01:50 +0000
commit94c40e629c13f38e8eff6f8435ea490b7d40dbb9 (patch)
tree38578f86de47e92040742c8dd5e84a5910c2e5a7 /cc/output
parentf66375e4d724f5da1a406d553259685451cdf55d (diff)
downloadchromium_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.cc3
-rw-r--r--cc/output/gl_renderer_unittest.cc54
-rw-r--r--cc/output/output_surface.cc4
-rw-r--r--cc/output/output_surface.h2
-rw-r--r--cc/output/renderer.h3
-rw-r--r--cc/output/software_renderer_unittest.cc3
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_;
}