Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(597)

Unified Diff: cc/CCSchedulerTest.cpp

Issue 11108020: [cc] Change cc_tests.gyp filenames to Chromium style (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/CCSchedulerStateMachineTest.cpp ('k') | cc/CCScopedTextureTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/CCSchedulerTest.cpp
diff --git a/cc/CCSchedulerTest.cpp b/cc/CCSchedulerTest.cpp
deleted file mode 100644
index dc218b9fcc81bf1cce1a2286684115a23c0bf19c..0000000000000000000000000000000000000000
--- a/cc/CCSchedulerTest.cpp
+++ /dev/null
@@ -1,471 +0,0 @@
-// Copyright 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "config.h"
-
-#include "CCScheduler.h"
-
-#include "CCSchedulerTestCommon.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include <wtf/OwnPtr.h>
-
-using namespace cc;
-using namespace WebKitTests;
-using namespace WTF;
-
-namespace {
-
-class FakeCCSchedulerClient : public CCSchedulerClient {
-public:
- FakeCCSchedulerClient() { reset(); }
- void reset()
- {
- m_actions.clear();
- m_drawWillHappen = true;
- m_swapWillHappenIfDrawHappens = true;
- m_numDraws = 0;
- }
-
- int numDraws() const { return m_numDraws; }
- int numActions() const { return static_cast<int>(m_actions.size()); }
- const char* action(int i) const { return m_actions[i]; }
-
- bool hasAction(const char* action) const
- {
- for (size_t i = 0; i < m_actions.size(); i++)
- if (!strcmp(m_actions[i], action))
- return true;
- return false;
- }
-
- virtual void scheduledActionBeginFrame() OVERRIDE { m_actions.push_back("scheduledActionBeginFrame"); }
- virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible() OVERRIDE
- {
- m_actions.push_back("scheduledActionDrawAndSwapIfPossible");
- m_numDraws++;
- return CCScheduledActionDrawAndSwapResult(m_drawWillHappen, m_drawWillHappen && m_swapWillHappenIfDrawHappens);
- }
-
- virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapForced() OVERRIDE
- {
- m_actions.push_back("scheduledActionDrawAndSwapForced");
- return CCScheduledActionDrawAndSwapResult(true, m_swapWillHappenIfDrawHappens);
- }
-
- virtual void scheduledActionCommit() OVERRIDE { m_actions.push_back("scheduledActionCommit"); }
- virtual void scheduledActionBeginContextRecreation() OVERRIDE { m_actions.push_back("scheduledActionBeginContextRecreation"); }
- virtual void scheduledActionAcquireLayerTexturesForMainThread() OVERRIDE { m_actions.push_back("scheduledActionAcquireLayerTexturesForMainThread"); }
- virtual void didAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE { }
-
- void setDrawWillHappen(bool drawWillHappen) { m_drawWillHappen = drawWillHappen; }
- void setSwapWillHappenIfDrawHappens(bool swapWillHappenIfDrawHappens) { m_swapWillHappenIfDrawHappens = swapWillHappenIfDrawHappens; }
-
-protected:
- bool m_drawWillHappen;
- bool m_swapWillHappenIfDrawHappens;
- int m_numDraws;
- std::vector<const char*> m_actions;
-};
-
-TEST(CCSchedulerTest, RequestCommit)
-{
- FakeCCSchedulerClient client;
- RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
- OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, make_scoped_ptr(new CCFrameRateController(timeSource)));
- scheduler->setCanBeginFrame(true);
- scheduler->setVisible(true);
- scheduler->setCanDraw(true);
-
- // SetNeedsCommit should begin the frame.
- scheduler->setNeedsCommit();
- EXPECT_EQ(1, client.numActions());
- EXPECT_STREQ("scheduledActionBeginFrame", client.action(0));
- EXPECT_FALSE(timeSource->active());
- client.reset();
-
- // beginFrameComplete should commit
- scheduler->beginFrameComplete();
- EXPECT_EQ(1, client.numActions());
- EXPECT_STREQ("scheduledActionCommit", client.action(0));
- EXPECT_TRUE(timeSource->active());
- client.reset();
-
- // Tick should draw.
- timeSource->tick();
- EXPECT_EQ(1, client.numActions());
- EXPECT_STREQ("scheduledActionDrawAndSwapIfPossible", client.action(0));
- EXPECT_FALSE(timeSource->active());
- client.reset();
-
- // Timer should be off.
- EXPECT_FALSE(timeSource->active());
-}
-
-TEST(CCSchedulerTest, RequestCommitAfterBeginFrame)
-{
- FakeCCSchedulerClient client;
- RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
- OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, make_scoped_ptr(new CCFrameRateController(timeSource)));
- scheduler->setCanBeginFrame(true);
- scheduler->setVisible(true);
- scheduler->setCanDraw(true);
-
- // SetNedsCommit should begin the frame.
- scheduler->setNeedsCommit();
- EXPECT_EQ(1, client.numActions());
- EXPECT_STREQ("scheduledActionBeginFrame", client.action(0));
- client.reset();
-
- // Now setNeedsCommit again. Calling here means we need a second frame.
- scheduler->setNeedsCommit();
-
- // Since, another commit is needed, beginFrameComplete should commit,
- // then begin another frame.
- scheduler->beginFrameComplete();
- EXPECT_EQ(1, client.numActions());
- EXPECT_STREQ("scheduledActionCommit", client.action(0));
- client.reset();
-
- // Tick should draw but then begin another frame.
- timeSource->tick();
- EXPECT_FALSE(timeSource->active());
- EXPECT_EQ(2, client.numActions());
- EXPECT_STREQ("scheduledActionDrawAndSwapIfPossible", client.action(0));
- EXPECT_STREQ("scheduledActionBeginFrame", client.action(1));
- client.reset();
-}
-
-TEST(CCSchedulerTest, TextureAcquisitionCollision)
-{
- FakeCCSchedulerClient client;
- RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
- OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, make_scoped_ptr(new CCFrameRateController(timeSource)));
- scheduler->setCanBeginFrame(true);
- scheduler->setVisible(true);
- scheduler->setCanDraw(true);
-
- scheduler->setNeedsCommit();
- scheduler->setMainThreadNeedsLayerTextures();
- EXPECT_EQ(2, client.numActions());
- EXPECT_STREQ("scheduledActionBeginFrame", client.action(0));
- EXPECT_STREQ("scheduledActionAcquireLayerTexturesForMainThread", client.action(1));
- client.reset();
-
- // Compositor not scheduled to draw because textures are locked by main thread
- EXPECT_FALSE(timeSource->active());
-
- // Trigger the commit
- scheduler->beginFrameComplete();
- EXPECT_TRUE(timeSource->active());
- client.reset();
-
- // Between commit and draw, texture acquisition for main thread delayed,
- // and main thread blocks.
- scheduler->setMainThreadNeedsLayerTextures();
- EXPECT_EQ(0, client.numActions());
- client.reset();
-
- // Once compositor draw complete, the delayed texture acquisition fires.
- timeSource->tick();
- EXPECT_EQ(3, client.numActions());
- EXPECT_STREQ("scheduledActionDrawAndSwapIfPossible", client.action(0));
- EXPECT_STREQ("scheduledActionAcquireLayerTexturesForMainThread", client.action(1));
- EXPECT_STREQ("scheduledActionBeginFrame", client.action(2));
- client.reset();
-}
-
-TEST(CCSchedulerTest, VisibilitySwitchWithTextureAcquisition)
-{
- FakeCCSchedulerClient client;
- RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
- OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, make_scoped_ptr(new CCFrameRateController(timeSource)));
- scheduler->setCanBeginFrame(true);
- scheduler->setVisible(true);
- scheduler->setCanDraw(true);
-
- scheduler->setNeedsCommit();
- scheduler->beginFrameComplete();
- scheduler->setMainThreadNeedsLayerTextures();
- client.reset();
- // Verify that pending texture acquisition fires when visibility
- // is lost in order to avoid a deadlock.
- scheduler->setVisible(false);
- EXPECT_EQ(1, client.numActions());
- EXPECT_STREQ("scheduledActionAcquireLayerTexturesForMainThread", client.action(0));
- client.reset();
-
- // Regaining visibility with textures acquired by main thread while
- // compositor is waiting for first draw should result in a request
- // for a new frame in order to escape a deadlock.
- scheduler->setVisible(true);
- EXPECT_EQ(1, client.numActions());
- EXPECT_STREQ("scheduledActionBeginFrame", client.action(0));
- client.reset();
-}
-
-class SchedulerClientThatSetNeedsDrawInsideDraw : public FakeCCSchedulerClient {
-public:
- SchedulerClientThatSetNeedsDrawInsideDraw()
- : m_scheduler(0) { }
-
- void setScheduler(CCScheduler* scheduler) { m_scheduler = scheduler; }
-
- virtual void scheduledActionBeginFrame() OVERRIDE { }
- virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible() OVERRIDE
- {
- // Only setNeedsRedraw the first time this is called
- if (!m_numDraws)
- m_scheduler->setNeedsRedraw();
- return FakeCCSchedulerClient::scheduledActionDrawAndSwapIfPossible();
- }
-
- virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapForced() OVERRIDE
- {
- ASSERT_NOT_REACHED();
- return CCScheduledActionDrawAndSwapResult(true, true);
- }
-
- virtual void scheduledActionCommit() OVERRIDE { }
- virtual void scheduledActionBeginContextRecreation() OVERRIDE { }
- virtual void didAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE { }
-
-protected:
- CCScheduler* m_scheduler;
-};
-
-// Tests for two different situations:
-// 1. the scheduler dropping setNeedsRedraw requests that happen inside
-// a scheduledActionDrawAndSwap
-// 2. the scheduler drawing twice inside a single tick
-TEST(CCSchedulerTest, RequestRedrawInsideDraw)
-{
- SchedulerClientThatSetNeedsDrawInsideDraw client;
- RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
- OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, make_scoped_ptr(new CCFrameRateController(timeSource)));
- client.setScheduler(scheduler.get());
- scheduler->setCanBeginFrame(true);
- scheduler->setVisible(true);
- scheduler->setCanDraw(true);
-
- scheduler->setNeedsRedraw();
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_TRUE(timeSource->active());
- EXPECT_EQ(0, client.numDraws());
-
- timeSource->tick();
- EXPECT_EQ(1, client.numDraws());
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_TRUE(timeSource->active());
-
- timeSource->tick();
- EXPECT_EQ(2, client.numDraws());
- EXPECT_FALSE(scheduler->redrawPending());
- EXPECT_FALSE(timeSource->active());
-}
-
-// Test that requesting redraw inside a failed draw doesn't lose the request.
-TEST(CCSchedulerTest, RequestRedrawInsideFailedDraw)
-{
- SchedulerClientThatSetNeedsDrawInsideDraw client;
- RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
- OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, make_scoped_ptr(new CCFrameRateController(timeSource)));
- client.setScheduler(scheduler.get());
- scheduler->setCanBeginFrame(true);
- scheduler->setVisible(true);
- scheduler->setCanDraw(true);
- client.setDrawWillHappen(false);
-
- scheduler->setNeedsRedraw();
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_TRUE(timeSource->active());
- EXPECT_EQ(0, client.numDraws());
-
- // Fail the draw.
- timeSource->tick();
- EXPECT_EQ(1, client.numDraws());
-
- // We have a commit pending and the draw failed, and we didn't lose the redraw request.
- EXPECT_TRUE(scheduler->commitPending());
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_TRUE(timeSource->active());
-
- // Fail the draw again.
- timeSource->tick();
- EXPECT_EQ(2, client.numDraws());
- EXPECT_TRUE(scheduler->commitPending());
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_TRUE(timeSource->active());
-
- // Draw successfully.
- client.setDrawWillHappen(true);
- timeSource->tick();
- EXPECT_EQ(3, client.numDraws());
- EXPECT_TRUE(scheduler->commitPending());
- EXPECT_FALSE(scheduler->redrawPending());
- EXPECT_FALSE(timeSource->active());
-}
-
-class SchedulerClientThatSetNeedsCommitInsideDraw : public FakeCCSchedulerClient {
-public:
- SchedulerClientThatSetNeedsCommitInsideDraw()
- : m_scheduler(0) { }
-
- void setScheduler(CCScheduler* scheduler) { m_scheduler = scheduler; }
-
- virtual void scheduledActionBeginFrame() OVERRIDE { }
- virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible() OVERRIDE
- {
- // Only setNeedsCommit the first time this is called
- if (!m_numDraws)
- m_scheduler->setNeedsCommit();
- return FakeCCSchedulerClient::scheduledActionDrawAndSwapIfPossible();
- }
-
- virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapForced() OVERRIDE
- {
- ASSERT_NOT_REACHED();
- return CCScheduledActionDrawAndSwapResult(true, true);
- }
-
- virtual void scheduledActionCommit() OVERRIDE { }
- virtual void scheduledActionBeginContextRecreation() OVERRIDE { }
- virtual void didAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE { }
-
-protected:
- CCScheduler* m_scheduler;
-};
-
-// Tests for the scheduler infinite-looping on setNeedsCommit requests that
-// happen inside a scheduledActionDrawAndSwap
-TEST(CCSchedulerTest, RequestCommitInsideDraw)
-{
- SchedulerClientThatSetNeedsCommitInsideDraw client;
- RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
- OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, make_scoped_ptr(new CCFrameRateController(timeSource)));
- client.setScheduler(scheduler.get());
- scheduler->setCanBeginFrame(true);
- scheduler->setVisible(true);
- scheduler->setCanDraw(true);
-
- scheduler->setNeedsRedraw();
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_EQ(0, client.numDraws());
- EXPECT_TRUE(timeSource->active());
-
- timeSource->tick();
- EXPECT_FALSE(timeSource->active());
- EXPECT_EQ(1, client.numDraws());
- EXPECT_TRUE(scheduler->commitPending());
- scheduler->beginFrameComplete();
-
- timeSource->tick();
- EXPECT_EQ(2, client.numDraws());
- EXPECT_FALSE(timeSource->active());
- EXPECT_FALSE(scheduler->redrawPending());
-}
-
-// Tests that when a draw fails then the pending commit should not be dropped.
-TEST(CCSchedulerTest, RequestCommitInsideFailedDraw)
-{
- SchedulerClientThatSetNeedsDrawInsideDraw client;
- RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
- OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, make_scoped_ptr(new CCFrameRateController(timeSource)));
- client.setScheduler(scheduler.get());
- scheduler->setCanBeginFrame(true);
- scheduler->setVisible(true);
- scheduler->setCanDraw(true);
- client.setDrawWillHappen(false);
-
- scheduler->setNeedsRedraw();
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_TRUE(timeSource->active());
- EXPECT_EQ(0, client.numDraws());
-
- // Fail the draw.
- timeSource->tick();
- EXPECT_EQ(1, client.numDraws());
-
- // We have a commit pending and the draw failed, and we didn't lose the commit request.
- EXPECT_TRUE(scheduler->commitPending());
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_TRUE(timeSource->active());
-
- // Fail the draw again.
- timeSource->tick();
- EXPECT_EQ(2, client.numDraws());
- EXPECT_TRUE(scheduler->commitPending());
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_TRUE(timeSource->active());
-
- // Draw successfully.
- client.setDrawWillHappen(true);
- timeSource->tick();
- EXPECT_EQ(3, client.numDraws());
- EXPECT_TRUE(scheduler->commitPending());
- EXPECT_FALSE(scheduler->redrawPending());
- EXPECT_FALSE(timeSource->active());
-}
-
-TEST(CCSchedulerTest, NoBeginFrameWhenDrawFails)
-{
- RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
- SchedulerClientThatSetNeedsCommitInsideDraw client;
- scoped_ptr<FakeCCFrameRateController> controller(new FakeCCFrameRateController(timeSource));
- FakeCCFrameRateController* controllerPtr = controller.get();
- OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, controller.PassAs<CCFrameRateController>());
- client.setScheduler(scheduler.get());
- scheduler->setCanBeginFrame(true);
- scheduler->setVisible(true);
- scheduler->setCanDraw(true);
-
- EXPECT_EQ(0, controllerPtr->numFramesPending());
-
- scheduler->setNeedsRedraw();
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_TRUE(timeSource->active());
- EXPECT_EQ(0, client.numDraws());
-
- // Draw successfully, this starts a new frame.
- timeSource->tick();
- EXPECT_EQ(1, client.numDraws());
- EXPECT_EQ(1, controllerPtr->numFramesPending());
- scheduler->didSwapBuffersComplete();
- EXPECT_EQ(0, controllerPtr->numFramesPending());
-
- scheduler->setNeedsRedraw();
- EXPECT_TRUE(scheduler->redrawPending());
- EXPECT_TRUE(timeSource->active());
-
- // Fail to draw, this should not start a frame.
- client.setDrawWillHappen(false);
- timeSource->tick();
- EXPECT_EQ(2, client.numDraws());
- EXPECT_EQ(0, controllerPtr->numFramesPending());
-}
-
-TEST(CCSchedulerTest, NoBeginFrameWhenSwapFailsDuringForcedCommit)
-{
- RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
- FakeCCSchedulerClient client;
- scoped_ptr<FakeCCFrameRateController> controller(new FakeCCFrameRateController(timeSource));
- FakeCCFrameRateController* controllerPtr = controller.get();
- OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, controller.PassAs<CCFrameRateController>());
-
- EXPECT_EQ(0, controllerPtr->numFramesPending());
-
- // Tell the client that it will fail to swap.
- client.setDrawWillHappen(true);
- client.setSwapWillHappenIfDrawHappens(false);
-
- // Get the compositor to do a scheduledActionDrawAndSwapForced.
- scheduler->setNeedsRedraw();
- scheduler->setNeedsForcedRedraw();
- EXPECT_TRUE(client.hasAction("scheduledActionDrawAndSwapForced"));
-
- // We should not have told the frame rate controller that we began a frame.
- EXPECT_EQ(0, controllerPtr->numFramesPending());
-}
-
-}
« no previous file with comments | « cc/CCSchedulerStateMachineTest.cpp ('k') | cc/CCScopedTextureTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698