[chromium] vsync ticks are needed in invisible tabs when we are still updating resources
authornduca@chromium.org <nduca@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 13 Mar 2012 22:50:18 +0000 (22:50 +0000)
committernduca@chromium.org <nduca@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 13 Mar 2012 22:50:18 +0000 (22:50 +0000)
https://bugs.webkit.org/show_bug.cgi?id=80910

Reviewed by James Robinson.

Source/WebCore:

* platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
(WebCore::CCSchedulerStateMachine::vsyncCallbackNeeded):

Source/WebKit/chromium:

* tests/CCSchedulerStateMachineTest.cpp:
(WebCore::TEST):
(WebCore):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@110627 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/tests/CCSchedulerStateMachineTest.cpp

index bf74435..31bfc84 100644 (file)
@@ -1,3 +1,13 @@
+2012-03-13  Nat Duca  <nduca@chromium.org>
+
+        [chromium] vsync ticks are needed in invisible tabs when we are still updating resources
+        https://bugs.webkit.org/show_bug.cgi?id=80910
+
+        Reviewed by James Robinson.
+
+        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
+        (WebCore::CCSchedulerStateMachine::vsyncCallbackNeeded):
+
 2012-03-13  Dave Tharp  <dtharp@codeaurora.org>
 
         Alternate stylesheets (without title attribute) are loaded on refresh
index 85d949c..f37f0b4 100644 (file)
@@ -164,13 +164,13 @@ void CCSchedulerStateMachine::updateState(Action action)
 bool CCSchedulerStateMachine::vsyncCallbackNeeded() const
 {
     if (!m_visible || m_contextState != CONTEXT_ACTIVE) {
-        if (m_needsForcedRedraw)
+        if (m_needsForcedRedraw || m_commitState == COMMIT_STATE_UPDATING_RESOURCES)
             return true;
 
         return false;
     }
 
-    return m_needsRedraw || m_needsForcedRedraw || m_updateMoreResourcesPending;
+    return m_needsRedraw || m_needsForcedRedraw || m_commitState == COMMIT_STATE_UPDATING_RESOURCES;
 }
 
 void CCSchedulerStateMachine::didEnterVSync()
index 4e3903e..b49b3ec 100644 (file)
@@ -1,3 +1,14 @@
+2012-03-13  Nat Duca  <nduca@chromium.org>
+
+        [chromium] vsync ticks are needed in invisible tabs when we are still updating resources
+        https://bugs.webkit.org/show_bug.cgi?id=80910
+
+        Reviewed by James Robinson.
+
+        * tests/CCSchedulerStateMachineTest.cpp:
+        (WebCore::TEST):
+        (WebCore):
+
 2012-03-13  Dana Jansens  <danakj@chromium.org>
 
         Region::contains(IntPoint) is slow
index 8b980d5..ea6b927 100644 (file)
@@ -159,30 +159,12 @@ TEST(CCSchedulerStateMachineTest, TestNextActionDrawsOnVSync)
             } else
                 state.setVisible(true);
 
-            // Case 1: needsCommit=false updateMoreResourcesPending=false.
+            // Case 1: needsCommit=false
             state.setNeedsCommit(false);
-            state.setUpdateMoreResourcesPending(false);
-            EXPECT_FALSE(state.vsyncCallbackNeeded());
-            EXPECT_NE(CCSchedulerStateMachine::ACTION_DRAW, state.nextAction());
-
-            // Case 2: needsCommit=false updateMoreResourcesPending=true.
-            state.setNeedsCommit(false);
-            state.setUpdateMoreResourcesPending(true);
-            if (visible)
-                EXPECT_TRUE(state.vsyncCallbackNeeded());
             EXPECT_NE(CCSchedulerStateMachine::ACTION_DRAW, state.nextAction());
 
-            // Case 3: needsCommit=true updateMoreResourcesPending=false.
-            state.setNeedsCommit(true);
-            state.setUpdateMoreResourcesPending(false);
-            EXPECT_FALSE(state.vsyncCallbackNeeded());
-            EXPECT_NE(CCSchedulerStateMachine::ACTION_DRAW, state.nextAction());
-
-            // Case 4: needsCommit=true updateMoreResourcesPending=true.
+            // Case 2: needsCommit=true
             state.setNeedsCommit(true);
-            state.setUpdateMoreResourcesPending(true);
-            if (visible)
-                EXPECT_TRUE(state.vsyncCallbackNeeded());
             EXPECT_NE(CCSchedulerStateMachine::ACTION_DRAW, state.nextAction());
         }
     }
@@ -371,6 +353,20 @@ TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_TwoRoundsOfUpdates)
     EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction());
 }
 
+
+TEST(CCSchedulerStateMachineTest, TestVSyncNeededWhenUpdatesPendingButInvisible)
+{
+    StateMachine state;
+    state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCES);
+    state.setNeedsRedraw(false);
+    state.setVisible(false);
+    state.setUpdateMoreResourcesPending(true);
+    EXPECT_TRUE(state.vsyncCallbackNeeded());
+
+    state.setUpdateMoreResourcesPending(false);
+    EXPECT_TRUE(state.vsyncCallbackNeeded());
+}
+
 TEST(CCSchedulerStateMachineTest, TestUpdates_WithRedraw_OneRoundOfUpdates)
 {
     StateMachine state;