| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/test/test_simple_task_runner.h" | 5 #include "base/test/test_simple_task_runner.h" |
| 6 #include "cc/output/output_surface.h" | 6 #include "cc/output/output_surface.h" |
| 7 #include "cc/output/output_surface_client.h" | 7 #include "cc/output/output_surface_client.h" |
| 8 #include "cc/output/software_output_device.h" | 8 #include "cc/output/software_output_device.h" |
| 9 #include "cc/test/scheduler_test_common.h" | 9 #include "cc/test/scheduler_test_common.h" |
| 10 #include "cc/test/test_web_graphics_context_3d.h" | 10 #include "cc/test/test_web_graphics_context_3d.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 | 35 |
| 36 bool HasClientForTesting() { | 36 bool HasClientForTesting() { |
| 37 return HasClient(); | 37 return HasClient(); |
| 38 } | 38 } |
| 39 | 39 |
| 40 void OnVSyncParametersChangedForTesting(base::TimeTicks timebase, | 40 void OnVSyncParametersChangedForTesting(base::TimeTicks timebase, |
| 41 base::TimeDelta interval) { | 41 base::TimeDelta interval) { |
| 42 OnVSyncParametersChanged(timebase, interval); | 42 OnVSyncParametersChanged(timebase, interval); |
| 43 } | 43 } |
| 44 | 44 |
| 45 void BeginFrameForTesting(base::TimeTicks frame_time) { | 45 void BeginFrameForTesting() { |
| 46 BeginFrame(frame_time); | 46 BeginFrame(BeginFrameArgs::CreateForTesting()); |
| 47 } | 47 } |
| 48 | 48 |
| 49 void DidSwapBuffersForTesting() { | 49 void DidSwapBuffersForTesting() { |
| 50 DidSwapBuffers(); | 50 DidSwapBuffers(); |
| 51 } | 51 } |
| 52 | 52 |
| 53 int pending_swap_buffers() { | 53 int pending_swap_buffers() { |
| 54 return pending_swap_buffers_; | 54 return pending_swap_buffers_; |
| 55 } | 55 } |
| 56 | 56 |
| 57 void OnSwapBuffersCompleteForTesting() { | 57 void OnSwapBuffersCompleteForTesting() { |
| 58 OnSwapBuffersComplete(NULL); | 58 OnSwapBuffersComplete(NULL); |
| 59 } | 59 } |
| 60 }; | 60 }; |
| 61 | 61 |
| 62 class FakeOutputSurfaceClient : public OutputSurfaceClient { | 62 class FakeOutputSurfaceClient : public OutputSurfaceClient { |
| 63 public: | 63 public: |
| 64 FakeOutputSurfaceClient() | 64 FakeOutputSurfaceClient() |
| 65 : begin_frame_count_(0), | 65 : begin_frame_count_(0), |
| 66 deferred_initialize_result_(true), | 66 deferred_initialize_result_(true), |
| 67 deferred_initialize_called_(false), | 67 deferred_initialize_called_(false), |
| 68 did_lose_output_surface_called_(false) {} | 68 did_lose_output_surface_called_(false) {} |
| 69 | 69 |
| 70 virtual bool DeferredInitialize( | 70 virtual bool DeferredInitialize( |
| 71 scoped_refptr<ContextProvider> offscreen_context_provider) OVERRIDE { | 71 scoped_refptr<ContextProvider> offscreen_context_provider) OVERRIDE { |
| 72 deferred_initialize_called_ = true; | 72 deferred_initialize_called_ = true; |
| 73 return deferred_initialize_result_; | 73 return deferred_initialize_result_; |
| 74 } | 74 } |
| 75 virtual void SetNeedsRedrawRect(gfx::Rect damage_rect) OVERRIDE {} | 75 virtual void SetNeedsRedrawRect(gfx::Rect damage_rect) OVERRIDE {} |
| 76 virtual void BeginFrame(base::TimeTicks frame_time) OVERRIDE { | 76 virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE { |
| 77 begin_frame_count_++; | 77 begin_frame_count_++; |
| 78 } | 78 } |
| 79 virtual void OnSwapBuffersComplete(const CompositorFrameAck* ack) OVERRIDE {} | 79 virtual void OnSwapBuffersComplete(const CompositorFrameAck* ack) OVERRIDE {} |
| 80 virtual void DidLoseOutputSurface() OVERRIDE { | 80 virtual void DidLoseOutputSurface() OVERRIDE { |
| 81 did_lose_output_surface_called_ = true; | 81 did_lose_output_surface_called_ = true; |
| 82 } | 82 } |
| 83 virtual void SetExternalDrawConstraints(const gfx::Transform& transform, | 83 virtual void SetExternalDrawConstraints(const gfx::Transform& transform, |
| 84 gfx::Rect viewport) OVERRIDE {} | 84 gfx::Rect viewport) OVERRIDE {} |
| 85 | 85 |
| 86 int begin_frame_count() { | 86 int begin_frame_count() { |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 FakeOutputSurfaceClient client; | 206 FakeOutputSurfaceClient client; |
| 207 EXPECT_TRUE(output_surface.BindToClient(&client)); | 207 EXPECT_TRUE(output_surface.BindToClient(&client)); |
| 208 EXPECT_TRUE(output_surface.HasClientForTesting()); | 208 EXPECT_TRUE(output_surface.HasClientForTesting()); |
| 209 EXPECT_FALSE(client.deferred_initialize_called()); | 209 EXPECT_FALSE(client.deferred_initialize_called()); |
| 210 | 210 |
| 211 // Initialize BeginFrame emulation | 211 // Initialize BeginFrame emulation |
| 212 scoped_refptr<base::TestSimpleTaskRunner> task_runner = | 212 scoped_refptr<base::TestSimpleTaskRunner> task_runner = |
| 213 new base::TestSimpleTaskRunner; | 213 new base::TestSimpleTaskRunner; |
| 214 bool throttle_frame_production = true; | 214 bool throttle_frame_production = true; |
| 215 const base::TimeDelta display_refresh_interval = | 215 const base::TimeDelta display_refresh_interval = |
| 216 base::TimeDelta::FromMicroseconds(16666); | 216 BeginFrameArgs::DefaultInterval(); |
| 217 | 217 |
| 218 output_surface.InitializeBeginFrameEmulation( | 218 output_surface.InitializeBeginFrameEmulation( |
| 219 task_runner.get(), | 219 task_runner.get(), |
| 220 throttle_frame_production, | 220 throttle_frame_production, |
| 221 display_refresh_interval); | 221 display_refresh_interval); |
| 222 | 222 |
| 223 output_surface.SetMaxFramesPending(2); | 223 output_surface.SetMaxFramesPending(2); |
| 224 | 224 |
| 225 // We should start off with 0 BeginFrames | 225 // We should start off with 0 BeginFrames |
| 226 EXPECT_EQ(client.begin_frame_count(), 0); | 226 EXPECT_EQ(client.begin_frame_count(), 0); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 | 274 |
| 275 // Disabling SetNeedsBeginFrame should prevent further BeginFrames. | 275 // Disabling SetNeedsBeginFrame should prevent further BeginFrames. |
| 276 output_surface.SetNeedsBeginFrame(false); | 276 output_surface.SetNeedsBeginFrame(false); |
| 277 task_runner->RunPendingTasks(); | 277 task_runner->RunPendingTasks(); |
| 278 EXPECT_FALSE(task_runner->HasPendingTask()); | 278 EXPECT_FALSE(task_runner->HasPendingTask()); |
| 279 EXPECT_EQ(client.begin_frame_count(), 4); | 279 EXPECT_EQ(client.begin_frame_count(), 4); |
| 280 EXPECT_EQ(output_surface.pending_swap_buffers(), 1); | 280 EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
| 281 | 281 |
| 282 // Optimistically injected BeginFrames without a SetNeedsBeginFrame should be | 282 // Optimistically injected BeginFrames without a SetNeedsBeginFrame should be |
| 283 // allowed. | 283 // allowed. |
| 284 output_surface.BeginFrameForTesting(base::TimeTicks::Now()); | 284 output_surface.BeginFrameForTesting(); |
| 285 EXPECT_EQ(client.begin_frame_count(), 5); | 285 EXPECT_EQ(client.begin_frame_count(), 5); |
| 286 EXPECT_EQ(output_surface.pending_swap_buffers(), 1); | 286 EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
| 287 | 287 |
| 288 // Optimistically injected BeginFrames without a SetNeedsBeginFrame should | 288 // Optimistically injected BeginFrames without a SetNeedsBeginFrame should |
| 289 // still be throttled by pending begin frames however. | 289 // still be throttled by pending begin frames however. |
| 290 output_surface.BeginFrameForTesting(base::TimeTicks::Now()); | 290 output_surface.BeginFrameForTesting(); |
| 291 EXPECT_EQ(client.begin_frame_count(), 5); | 291 EXPECT_EQ(client.begin_frame_count(), 5); |
| 292 EXPECT_EQ(output_surface.pending_swap_buffers(), 1); | 292 EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
| 293 | 293 |
| 294 // Optimistically injected BeginFrames without a SetNeedsBeginFrame should | 294 // Optimistically injected BeginFrames without a SetNeedsBeginFrame should |
| 295 // also be throttled by pending swap buffers. | 295 // also be throttled by pending swap buffers. |
| 296 output_surface.DidSwapBuffersForTesting(); | 296 output_surface.DidSwapBuffersForTesting(); |
| 297 EXPECT_EQ(client.begin_frame_count(), 5); | 297 EXPECT_EQ(client.begin_frame_count(), 5); |
| 298 EXPECT_EQ(output_surface.pending_swap_buffers(), 2); | 298 EXPECT_EQ(output_surface.pending_swap_buffers(), 2); |
| 299 output_surface.BeginFrameForTesting(base::TimeTicks::Now()); | 299 output_surface.BeginFrameForTesting(); |
| 300 EXPECT_EQ(client.begin_frame_count(), 5); | 300 EXPECT_EQ(client.begin_frame_count(), 5); |
| 301 EXPECT_EQ(output_surface.pending_swap_buffers(), 2); | 301 EXPECT_EQ(output_surface.pending_swap_buffers(), 2); |
| 302 } | 302 } |
| 303 | 303 |
| 304 } // namespace | 304 } // namespace |
| 305 } // namespace cc | 305 } // namespace cc |
| OLD | NEW |