Index: trunk/src/cc/output/output_surface_unittest.cc |
=================================================================== |
--- trunk/src/cc/output/output_surface_unittest.cc (revision 206654) |
+++ trunk/src/cc/output/output_surface_unittest.cc (working copy) |
@@ -5,7 +5,6 @@ |
#include "cc/output/output_surface.h" |
#include "cc/output/output_surface_client.h" |
#include "cc/output/software_output_device.h" |
-#include "cc/test/scheduler_test_common.h" |
#include "cc/test/test_web_graphics_context_3d.h" |
#include "gpu/GLES2/gl2extchromium.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -26,43 +25,19 @@ |
scoped_ptr<cc::SoftwareOutputDevice> software_device) |
: OutputSurface(context3d.Pass(), software_device.Pass()) {} |
+ OutputSurfaceClient* client() { return client_; } |
+ |
bool InitializeNewContext3D( |
scoped_ptr<WebKit::WebGraphicsContext3D> new_context3d) { |
return InitializeAndSetContext3D(new_context3d.Pass(), |
scoped_refptr<ContextProvider>()); |
} |
- |
- bool HasClientForTesting() { |
- return HasClient(); |
- } |
- |
- void OnVSyncParametersChangedForTesting(base::TimeTicks timebase, |
- base::TimeDelta interval) { |
- OnVSyncParametersChanged(timebase, interval); |
- } |
- |
- void BeginFrameForTesting(base::TimeTicks frame_time) { |
- BeginFrame(frame_time); |
- } |
- |
- void DidSwapBuffersForTesting() { |
- DidSwapBuffers(); |
- } |
- |
- int pending_swap_buffers() { |
- return pending_swap_buffers_; |
- } |
- |
- void OnSwapBuffersCompleteForTesting() { |
- OnSwapBuffersComplete(NULL); |
- } |
}; |
class FakeOutputSurfaceClient : public OutputSurfaceClient { |
public: |
FakeOutputSurfaceClient() |
- : begin_frame_count_(0), |
- deferred_initialize_result_(true), |
+ : deferred_initialize_result_(true), |
deferred_initialize_called_(false), |
did_lose_output_surface_called_(false) {} |
@@ -72,9 +47,9 @@ |
return deferred_initialize_result_; |
} |
virtual void SetNeedsRedrawRect(gfx::Rect damage_rect) OVERRIDE {} |
- virtual void BeginFrame(base::TimeTicks frame_time) OVERRIDE { |
- begin_frame_count_++; |
- } |
+ virtual void OnVSyncParametersChanged(base::TimeTicks timebase, |
+ base::TimeDelta interval) OVERRIDE {} |
+ virtual void BeginFrame(base::TimeTicks frame_time) OVERRIDE {} |
virtual void OnSwapBuffersComplete(const CompositorFrameAck* ack) OVERRIDE {} |
virtual void DidLoseOutputSurface() OVERRIDE { |
did_lose_output_surface_called_ = true; |
@@ -82,10 +57,6 @@ |
virtual void SetExternalDrawConstraints(const gfx::Transform& transform, |
gfx::Rect viewport) OVERRIDE {} |
- int begin_frame_count() { |
- return begin_frame_count_; |
- } |
- |
void set_deferred_initialize_result(bool result) { |
deferred_initialize_result_ = result; |
} |
@@ -99,7 +70,6 @@ |
} |
private: |
- int begin_frame_count_; |
bool deferred_initialize_result_; |
bool deferred_initialize_called_; |
bool did_lose_output_surface_called_; |
@@ -111,11 +81,11 @@ |
TestOutputSurface output_surface( |
context3d.PassAs<WebKit::WebGraphicsContext3D>()); |
- EXPECT_FALSE(output_surface.HasClientForTesting()); |
+ EXPECT_EQ(NULL, output_surface.client()); |
FakeOutputSurfaceClient client; |
EXPECT_TRUE(output_surface.BindToClient(&client)); |
- EXPECT_TRUE(output_surface.HasClientForTesting()); |
+ EXPECT_EQ(&client, output_surface.client()); |
EXPECT_FALSE(client.deferred_initialize_called()); |
// Verify DidLoseOutputSurface callback is hooked up correctly. |
@@ -134,11 +104,11 @@ |
TestOutputSurface output_surface( |
context3d.PassAs<WebKit::WebGraphicsContext3D>()); |
- EXPECT_FALSE(output_surface.HasClientForTesting()); |
+ EXPECT_EQ(NULL, output_surface.client()); |
FakeOutputSurfaceClient client; |
EXPECT_FALSE(output_surface.BindToClient(&client)); |
- EXPECT_FALSE(output_surface.HasClientForTesting()); |
+ EXPECT_EQ(NULL, output_surface.client()); |
} |
class InitializeNewContext3D : public ::testing::Test { |
@@ -151,13 +121,13 @@ |
protected: |
void BindOutputSurface() { |
EXPECT_TRUE(output_surface_.BindToClient(&client_)); |
- EXPECT_TRUE(output_surface_.HasClientForTesting()); |
+ EXPECT_EQ(&client_, output_surface_.client()); |
} |
void InitializeNewContextExpectFail() { |
EXPECT_FALSE(output_surface_.InitializeNewContext3D( |
context3d_.PassAs<WebKit::WebGraphicsContext3D>())); |
- EXPECT_TRUE(output_surface_.HasClientForTesting()); |
+ EXPECT_EQ(&client_, output_surface_.client()); |
EXPECT_FALSE(output_surface_.context3d()); |
EXPECT_TRUE(output_surface_.software_device()); |
@@ -194,110 +164,5 @@ |
InitializeNewContextExpectFail(); |
} |
-TEST(OutputSurfaceTest, BeginFrameEmulation) { |
- scoped_ptr<TestWebGraphicsContext3D> context3d = |
- TestWebGraphicsContext3D::Create(); |
- |
- TestOutputSurface output_surface( |
- context3d.PassAs<WebKit::WebGraphicsContext3D>()); |
- EXPECT_FALSE(output_surface.HasClientForTesting()); |
- |
- FakeOutputSurfaceClient client; |
- EXPECT_TRUE(output_surface.BindToClient(&client)); |
- EXPECT_TRUE(output_surface.HasClientForTesting()); |
- EXPECT_FALSE(client.deferred_initialize_called()); |
- |
- // Initialize BeginFrame emulation |
- FakeThread impl_thread; |
- bool throttle_frame_production = true; |
- const base::TimeDelta display_refresh_interval = |
- base::TimeDelta::FromMicroseconds(16666); |
- |
- output_surface.InitializeBeginFrameEmulation( |
- &impl_thread, |
- throttle_frame_production, |
- display_refresh_interval); |
- |
- output_surface.SetMaxFramesPending(2); |
- |
- // We should start off with 0 BeginFrames |
- EXPECT_EQ(client.begin_frame_count(), 0); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 0); |
- |
- // We should not have a pending task until a BeginFrame has been requested. |
- EXPECT_FALSE(impl_thread.HasPendingTask()); |
- output_surface.SetNeedsBeginFrame(true); |
- EXPECT_TRUE(impl_thread.HasPendingTask()); |
- |
- // BeginFrame should be called on the first tick. |
- impl_thread.RunPendingTask(); |
- EXPECT_EQ(client.begin_frame_count(), 1); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 0); |
- |
- // BeginFrame should not be called when there is a pending BeginFrame. |
- impl_thread.RunPendingTask(); |
- EXPECT_EQ(client.begin_frame_count(), 1); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 0); |
- |
- // DidSwapBuffers should clear the pending BeginFrame. |
- output_surface.DidSwapBuffersForTesting(); |
- EXPECT_EQ(client.begin_frame_count(), 1); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
- impl_thread.RunPendingTask(); |
- EXPECT_EQ(client.begin_frame_count(), 2); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
- |
- // BeginFrame should be throttled by pending swap buffers. |
- output_surface.DidSwapBuffersForTesting(); |
- EXPECT_EQ(client.begin_frame_count(), 2); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 2); |
- impl_thread.RunPendingTask(); |
- EXPECT_EQ(client.begin_frame_count(), 2); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 2); |
- |
- // SwapAck should decrement pending swap buffers and unblock BeginFrame again. |
- output_surface.OnSwapBuffersCompleteForTesting(); |
- EXPECT_EQ(client.begin_frame_count(), 2); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
- impl_thread.RunPendingTask(); |
- EXPECT_EQ(client.begin_frame_count(), 3); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
- |
- // Calling SetNeedsBeginFrame again indicates a swap did not occur but |
- // the client still wants another BeginFrame. |
- output_surface.SetNeedsBeginFrame(true); |
- impl_thread.RunPendingTask(); |
- EXPECT_EQ(client.begin_frame_count(), 4); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
- |
- // Disabling SetNeedsBeginFrame should prevent further BeginFrames. |
- output_surface.SetNeedsBeginFrame(false); |
- impl_thread.RunPendingTask(); |
- EXPECT_FALSE(impl_thread.HasPendingTask()); |
- EXPECT_EQ(client.begin_frame_count(), 4); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
- |
- // Optimistically injected BeginFrames without a SetNeedsBeginFrame should be |
- // allowed. |
- output_surface.BeginFrameForTesting(base::TimeTicks::Now()); |
- EXPECT_EQ(client.begin_frame_count(), 5); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
- |
- // Optimistically injected BeginFrames without a SetNeedsBeginFrame should |
- // still be throttled by pending begin frames however. |
- output_surface.BeginFrameForTesting(base::TimeTicks::Now()); |
- EXPECT_EQ(client.begin_frame_count(), 5); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
- |
- // Optimistically injected BeginFrames without a SetNeedsBeginFrame should |
- // also be throttled by pending swap buffers. |
- output_surface.DidSwapBuffersForTesting(); |
- EXPECT_EQ(client.begin_frame_count(), 5); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 2); |
- output_surface.BeginFrameForTesting(base::TimeTicks::Now()); |
- EXPECT_EQ(client.begin_frame_count(), 5); |
- EXPECT_EQ(output_surface.pending_swap_buffers(), 2); |
-} |
- |
} // namespace |
} // namespace cc |