diff options
Diffstat (limited to 'Source/WebKit/chromium/tests/CCFrameRateControllerTest.cpp')
-rw-r--r-- | Source/WebKit/chromium/tests/CCFrameRateControllerTest.cpp | 189 |
1 files changed, 0 insertions, 189 deletions
diff --git a/Source/WebKit/chromium/tests/CCFrameRateControllerTest.cpp b/Source/WebKit/chromium/tests/CCFrameRateControllerTest.cpp deleted file mode 100644 index 3cf646a74..000000000 --- a/Source/WebKit/chromium/tests/CCFrameRateControllerTest.cpp +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (C) 2011 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" - -#include "CCFrameRateController.h" - -#include "CCSchedulerTestCommon.h" -#include <gtest/gtest.h> - -using namespace WTF; -using namespace WebCore; -using namespace WebKitTests; - -namespace { - -class FakeCCFrameRateControllerClient : public WebCore::CCFrameRateControllerClient { -public: - FakeCCFrameRateControllerClient() { reset(); } - - void reset() { m_vsyncTicked = false; } - bool vsyncTicked() const { return m_vsyncTicked; } - - virtual void vsyncTick() { m_vsyncTicked = true; } - -protected: - bool m_vsyncTicked; -}; - - -TEST(CCFrameRateControllerTest, TestFrameThrottling_ImmediateAck) -{ - FakeCCThread thread; - FakeCCFrameRateControllerClient client; - RefPtr<FakeCCDelayBasedTimeSource> timeSource = FakeCCDelayBasedTimeSource::create(1.0 / 60.0, &thread); - CCFrameRateController controller(timeSource); - - controller.setClient(&client); - controller.setActive(true); - - double elapsed = 0; // Muck around with time a bit - - // Trigger one frame, make sure the vsync callback is called - elapsed += thread.pendingDelayMs() / 1000.0; - timeSource->setMonotonicTimeNow(elapsed); - thread.runPendingTask(); - EXPECT_TRUE(client.vsyncTicked()); - client.reset(); - - // Tell the controller we drew - controller.didBeginFrame(); - - // Tell the controller the frame ended 5ms later - timeSource->setMonotonicTimeNow(timeSource->monotonicTimeNow() + 0.005); - controller.didFinishFrame(); - - // Trigger another frame, make sure vsync runs again - elapsed += thread.pendingDelayMs() / 1000.0; - EXPECT_TRUE(elapsed >= timeSource->monotonicTimeNow()); // Sanity check that previous code didn't move time backward. - timeSource->setMonotonicTimeNow(elapsed); - thread.runPendingTask(); - EXPECT_TRUE(client.vsyncTicked()); -} - -TEST(CCFrameRateControllerTest, TestFrameThrottling_TwoFramesInFlight) -{ - FakeCCThread thread; - FakeCCFrameRateControllerClient client; - RefPtr<FakeCCDelayBasedTimeSource> timeSource = FakeCCDelayBasedTimeSource::create(1.0 / 60.0, &thread); - CCFrameRateController controller(timeSource); - - controller.setClient(&client); - controller.setActive(true); - controller.setMaxFramesPending(2); - - double elapsed = 0; // Muck around with time a bit - - // Trigger one frame, make sure the vsync callback is called - elapsed += thread.pendingDelayMs() / 1000.0; - timeSource->setMonotonicTimeNow(elapsed); - thread.runPendingTask(); - EXPECT_TRUE(client.vsyncTicked()); - client.reset(); - - // Tell the controller we drew - controller.didBeginFrame(); - - // Trigger another frame, make sure vsync callback runs again - elapsed += thread.pendingDelayMs() / 1000.0; - EXPECT_TRUE(elapsed >= timeSource->monotonicTimeNow()); // Sanity check that previous code didn't move time backward. - timeSource->setMonotonicTimeNow(elapsed); - thread.runPendingTask(); - EXPECT_TRUE(client.vsyncTicked()); - client.reset(); - - // Tell the controller we drew, again. - controller.didBeginFrame(); - - // Trigger another frame. Since two frames are pending, we should not draw. - elapsed += thread.pendingDelayMs() / 1000.0; - EXPECT_TRUE(elapsed >= timeSource->monotonicTimeNow()); // Sanity check that previous code didn't move time backward. - timeSource->setMonotonicTimeNow(elapsed); - thread.runPendingTask(); - EXPECT_FALSE(client.vsyncTicked()); - - // Tell the controller the first frame ended 5ms later - timeSource->setMonotonicTimeNow(timeSource->monotonicTimeNow() + 0.005); - controller.didFinishFrame(); - - // Tick should not have been called - EXPECT_FALSE(client.vsyncTicked()); - - // Trigger yet another frame. Since one frames is pending, another vsync callback should run. - elapsed += thread.pendingDelayMs() / 1000.0; - EXPECT_TRUE(elapsed >= timeSource->monotonicTimeNow()); // Sanity check that previous code didn't move time backward. - timeSource->setMonotonicTimeNow(elapsed); - thread.runPendingTask(); - EXPECT_TRUE(client.vsyncTicked()); -} - -TEST(CCFrameRateControllerTest, TestFrameThrottling_Unthrottled) -{ - FakeCCThread thread; - FakeCCFrameRateControllerClient client; - CCFrameRateController controller(&thread); - - controller.setClient(&client); - controller.setMaxFramesPending(2); - - // setActive triggers 1st frame, make sure the vsync callback is called - controller.setActive(true); - thread.runPendingTask(); - EXPECT_TRUE(client.vsyncTicked()); - client.reset(); - - // Even if we don't call didBeginFrame, CCFrameRateController should - // still attempt to vsync tick multiple times until it does result in - // a didBeginFrame. - thread.runPendingTask(); - EXPECT_TRUE(client.vsyncTicked()); - client.reset(); - - thread.runPendingTask(); - EXPECT_TRUE(client.vsyncTicked()); - client.reset(); - - // didBeginFrame triggers 2nd frame, make sure the vsync callback is called - controller.didBeginFrame(); - thread.runPendingTask(); - EXPECT_TRUE(client.vsyncTicked()); - client.reset(); - - // didBeginFrame triggers 3rd frame (> maxFramesPending), make sure the vsync callback is NOT called - controller.didBeginFrame(); - thread.runPendingTask(); - EXPECT_FALSE(client.vsyncTicked()); - client.reset(); - - // Make sure there is no pending task since we can't do anything until we receive a didFinishFrame anyway. - EXPECT_FALSE(thread.hasPendingTask()); - - // didFinishFrame triggers a frame, make sure the vsync callback is called - controller.didFinishFrame(); - thread.runPendingTask(); - EXPECT_TRUE(client.vsyncTicked()); -} - -} |