| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/scheduler/scheduler.h" | 5 #include "cc/scheduler/scheduler.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 base::TimeDelta CommitToActivateDurationEstimate() override { | 154 base::TimeDelta CommitToActivateDurationEstimate() override { |
| 155 return base::TimeDelta(); | 155 return base::TimeDelta(); |
| 156 } | 156 } |
| 157 | 157 |
| 158 void DidBeginImplFrameDeadline() override {} | 158 void DidBeginImplFrameDeadline() override {} |
| 159 | 159 |
| 160 void SendBeginFramesToChildren(const BeginFrameArgs& args) override { | 160 void SendBeginFramesToChildren(const BeginFrameArgs& args) override { |
| 161 begin_frame_is_sent_to_children_ = true; | 161 begin_frame_is_sent_to_children_ = true; |
| 162 } | 162 } |
| 163 | 163 |
| 164 void SendBeginMainFrameNotExpectedSoon() override { | |
| 165 PushAction("SendBeginMainFrameNotExpectedSoon"); | |
| 166 } | |
| 167 | |
| 168 base::Callback<bool(void)> ImplFrameDeadlinePending(bool state) { | 164 base::Callback<bool(void)> ImplFrameDeadlinePending(bool state) { |
| 169 return base::Bind(&FakeSchedulerClient::ImplFrameDeadlinePendingCallback, | 165 return base::Bind(&FakeSchedulerClient::ImplFrameDeadlinePendingCallback, |
| 170 base::Unretained(this), | 166 base::Unretained(this), |
| 171 state); | 167 state); |
| 172 } | 168 } |
| 173 | 169 |
| 174 bool begin_frame_is_sent_to_children() const { | 170 bool begin_frame_is_sent_to_children() const { |
| 175 return begin_frame_is_sent_to_children_; | 171 return begin_frame_is_sent_to_children_; |
| 176 } | 172 } |
| 177 | 173 |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 client_->Reset(); | 510 client_->Reset(); |
| 515 | 511 |
| 516 // The following BeginImplFrame deadline should SetNeedsBeginFrame(false) | 512 // The following BeginImplFrame deadline should SetNeedsBeginFrame(false) |
| 517 // to avoid excessive toggles. | 513 // to avoid excessive toggles. |
| 518 EXPECT_SCOPED(AdvanceFrame()); | 514 EXPECT_SCOPED(AdvanceFrame()); |
| 519 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_); | 515 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_); |
| 520 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 516 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 521 client_->Reset(); | 517 client_->Reset(); |
| 522 | 518 |
| 523 task_runner().RunPendingTasks(); // Run posted deadline. | 519 task_runner().RunPendingTasks(); // Run posted deadline. |
| 524 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 0, 2); | 520 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_); |
| 525 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2); | |
| 526 client_->Reset(); | 521 client_->Reset(); |
| 527 } | 522 } |
| 528 | 523 |
| 529 TEST_F(SchedulerTest, RequestCommitAfterSetDeferCommit) { | 524 TEST_F(SchedulerTest, RequestCommitAfterSetDeferCommit) { |
| 530 scheduler_settings_.use_external_begin_frame_source = true; | 525 scheduler_settings_.use_external_begin_frame_source = true; |
| 531 SetUpScheduler(true); | 526 SetUpScheduler(true); |
| 532 | 527 |
| 533 scheduler_->SetCanStart(); | 528 scheduler_->SetCanStart(); |
| 534 scheduler_->SetVisible(true); | 529 scheduler_->SetVisible(true); |
| 535 scheduler_->SetCanDraw(true); | 530 scheduler_->SetCanDraw(true); |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 999 EXPECT_FALSE(scheduler_->PrepareTilesPending()); | 994 EXPECT_FALSE(scheduler_->PrepareTilesPending()); |
| 1000 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); | 995 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); |
| 1001 | 996 |
| 1002 // We need a BeginImplFrame where we don't swap to go idle. | 997 // We need a BeginImplFrame where we don't swap to go idle. |
| 1003 client->Reset(); | 998 client->Reset(); |
| 1004 EXPECT_SCOPED(AdvanceFrame()); | 999 EXPECT_SCOPED(AdvanceFrame()); |
| 1005 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); | 1000 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); |
| 1006 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 1001 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 1007 client->Reset(); | 1002 client->Reset(); |
| 1008 task_runner().RunPendingTasks(); // Run posted deadline. | 1003 task_runner().RunPendingTasks(); // Run posted deadline. |
| 1009 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 0, 2); | 1004 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); |
| 1010 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2); | |
| 1011 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); | 1005 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); |
| 1012 EXPECT_EQ(0, client->num_draws()); | 1006 EXPECT_EQ(0, client->num_draws()); |
| 1013 | 1007 |
| 1014 // Now trigger a PrepareTiles outside of a draw. We will then need | 1008 // Now trigger a PrepareTiles outside of a draw. We will then need |
| 1015 // a begin-frame for the PrepareTiles, but we don't need a draw. | 1009 // a begin-frame for the PrepareTiles, but we don't need a draw. |
| 1016 client->Reset(); | 1010 client->Reset(); |
| 1017 EXPECT_FALSE(client->needs_begin_frames()); | 1011 EXPECT_FALSE(client->needs_begin_frames()); |
| 1018 scheduler_->SetNeedsPrepareTiles(); | 1012 scheduler_->SetNeedsPrepareTiles(); |
| 1019 EXPECT_TRUE(client->needs_begin_frames()); | 1013 EXPECT_TRUE(client->needs_begin_frames()); |
| 1020 EXPECT_TRUE(scheduler_->PrepareTilesPending()); | 1014 EXPECT_TRUE(scheduler_->PrepareTilesPending()); |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1375 client_->Reset(); | 1369 client_->Reset(); |
| 1376 | 1370 |
| 1377 // The following BeginImplFrame deadline should SetNeedsBeginFrame(false) | 1371 // The following BeginImplFrame deadline should SetNeedsBeginFrame(false) |
| 1378 // to avoid excessive toggles. | 1372 // to avoid excessive toggles. |
| 1379 task_runner().RunPendingTasks(); // Run posted BeginRetroFrame. | 1373 task_runner().RunPendingTasks(); // Run posted BeginRetroFrame. |
| 1380 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_); | 1374 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_); |
| 1381 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 1375 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 1382 client_->Reset(); | 1376 client_->Reset(); |
| 1383 | 1377 |
| 1384 task_runner().RunPendingTasks(); // Run posted deadline. | 1378 task_runner().RunPendingTasks(); // Run posted deadline. |
| 1385 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 0, 2); | 1379 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_); |
| 1386 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2); | |
| 1387 client_->Reset(); | 1380 client_->Reset(); |
| 1388 } | 1381 } |
| 1389 | 1382 |
| 1390 TEST_F(SchedulerTest, BeginRetroFrame_SwapThrottled) { | 1383 TEST_F(SchedulerTest, BeginRetroFrame_SwapThrottled) { |
| 1391 scheduler_settings_.use_external_begin_frame_source = true; | 1384 scheduler_settings_.use_external_begin_frame_source = true; |
| 1392 SetUpScheduler(true); | 1385 SetUpScheduler(true); |
| 1393 | 1386 |
| 1394 scheduler_->SetEstimatedParentDrawTime(base::TimeDelta::FromMicroseconds(1)); | 1387 scheduler_->SetEstimatedParentDrawTime(base::TimeDelta::FromMicroseconds(1)); |
| 1395 | 1388 |
| 1396 // To test swap ack throttling, this test disables automatic swap acks. | 1389 // To test swap ack throttling, this test disables automatic swap acks. |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1627 // The following BeginImplFrame deadline should SetNeedsBeginFrame(false) | 1620 // The following BeginImplFrame deadline should SetNeedsBeginFrame(false) |
| 1628 // to avoid excessive toggles. | 1621 // to avoid excessive toggles. |
| 1629 task_runner().RunPendingTasks(); // Run posted BeginFrame. | 1622 task_runner().RunPendingTasks(); // Run posted BeginFrame. |
| 1630 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_); | 1623 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_); |
| 1631 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 1624 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 1632 client_->Reset(); | 1625 client_->Reset(); |
| 1633 | 1626 |
| 1634 // Make sure SetNeedsBeginFrame isn't called on the client | 1627 // Make sure SetNeedsBeginFrame isn't called on the client |
| 1635 // when the BeginFrame is no longer needed. | 1628 // when the BeginFrame is no longer needed. |
| 1636 task_runner().RunPendingTasks(); // Run posted deadline. | 1629 task_runner().RunPendingTasks(); // Run posted deadline. |
| 1637 EXPECT_SINGLE_ACTION("SendBeginMainFrameNotExpectedSoon", client_); | 1630 EXPECT_NO_ACTION(client_); |
| 1638 client_->Reset(); | 1631 client_->Reset(); |
| 1639 } | 1632 } |
| 1640 | 1633 |
| 1641 TEST_F(SchedulerTest, SyntheticBeginFrames) { | 1634 TEST_F(SchedulerTest, SyntheticBeginFrames) { |
| 1642 bool use_external_begin_frame_source = false; | 1635 bool use_external_begin_frame_source = false; |
| 1643 bool throttle_frame_production = true; | 1636 bool throttle_frame_production = true; |
| 1644 BeginFramesNotFromClient(use_external_begin_frame_source, | 1637 BeginFramesNotFromClient(use_external_begin_frame_source, |
| 1645 throttle_frame_production); | 1638 throttle_frame_production); |
| 1646 } | 1639 } |
| 1647 | 1640 |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1783 | 1776 |
| 1784 client_->Reset(); | 1777 client_->Reset(); |
| 1785 EXPECT_SCOPED(AdvanceFrame()); | 1778 EXPECT_SCOPED(AdvanceFrame()); |
| 1786 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); | 1779 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); |
| 1787 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2); | 1780 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2); |
| 1788 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 1781 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 1789 | 1782 |
| 1790 client_->Reset(); | 1783 client_->Reset(); |
| 1791 scheduler_->DidLoseOutputSurface(); | 1784 scheduler_->DidLoseOutputSurface(); |
| 1792 // Do nothing when impl frame is in deadine pending state. | 1785 // Do nothing when impl frame is in deadine pending state. |
| 1793 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 0, 2); | 1786 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_); |
| 1794 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2); | |
| 1795 | 1787 |
| 1796 client_->Reset(); | 1788 client_->Reset(); |
| 1797 scheduler_->NotifyBeginMainFrameStarted(); | 1789 scheduler_->NotifyBeginMainFrameStarted(); |
| 1798 scheduler_->NotifyReadyToCommit(); | 1790 scheduler_->NotifyReadyToCommit(); |
| 1799 EXPECT_ACTION("ScheduledActionCommit", client_, 0, 1); | 1791 EXPECT_ACTION("ScheduledActionCommit", client_, 0, 1); |
| 1800 | 1792 |
| 1801 client_->Reset(); | 1793 client_->Reset(); |
| 1802 task_runner().RunPendingTasks(); // Run posted deadline. | 1794 task_runner().RunPendingTasks(); // Run posted deadline. |
| 1803 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_); | 1795 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_); |
| 1804 } | 1796 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1815 | 1807 |
| 1816 client_->Reset(); | 1808 client_->Reset(); |
| 1817 EXPECT_SCOPED(AdvanceFrame()); | 1809 EXPECT_SCOPED(AdvanceFrame()); |
| 1818 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); | 1810 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); |
| 1819 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2); | 1811 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2); |
| 1820 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 1812 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 1821 | 1813 |
| 1822 client_->Reset(); | 1814 client_->Reset(); |
| 1823 scheduler_->DidLoseOutputSurface(); | 1815 scheduler_->DidLoseOutputSurface(); |
| 1824 // Do nothing when impl frame is in deadine pending state. | 1816 // Do nothing when impl frame is in deadine pending state. |
| 1825 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 0, 2); | 1817 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_); |
| 1826 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2); | |
| 1827 | 1818 |
| 1828 client_->Reset(); | 1819 client_->Reset(); |
| 1829 // Run posted deadline. | 1820 // Run posted deadline. |
| 1830 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 1821 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 1831 task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true)); | 1822 task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true)); |
| 1832 // OnBeginImplFrameDeadline didn't schedule any actions because main frame is | 1823 // OnBeginImplFrameDeadline didn't schedule any actions because main frame is |
| 1833 // not yet completed. | 1824 // not yet completed. |
| 1834 EXPECT_NO_ACTION(client_); | 1825 EXPECT_NO_ACTION(client_); |
| 1835 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); | 1826 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); |
| 1836 | 1827 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1883 | 1874 |
| 1884 client_->Reset(); | 1875 client_->Reset(); |
| 1885 scheduler_->NotifyBeginMainFrameStarted(); | 1876 scheduler_->NotifyBeginMainFrameStarted(); |
| 1886 scheduler_->NotifyReadyToCommit(); | 1877 scheduler_->NotifyReadyToCommit(); |
| 1887 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_); | 1878 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_); |
| 1888 | 1879 |
| 1889 client_->Reset(); | 1880 client_->Reset(); |
| 1890 scheduler_->DidLoseOutputSurface(); | 1881 scheduler_->DidLoseOutputSurface(); |
| 1891 if (impl_side_painting) { | 1882 if (impl_side_painting) { |
| 1892 // Sync tree should be forced to activate. | 1883 // Sync tree should be forced to activate. |
| 1893 EXPECT_ACTION("ScheduledActionActivateSyncTree", client_, 0, 3); | 1884 EXPECT_ACTION("ScheduledActionActivateSyncTree", client_, 0, 2); |
| 1894 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 3); | 1885 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 2); |
| 1895 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 2, 3); | |
| 1896 } else { | 1886 } else { |
| 1897 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 0, 2); | 1887 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_); |
| 1898 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2); | |
| 1899 } | 1888 } |
| 1900 | 1889 |
| 1901 client_->Reset(); | 1890 client_->Reset(); |
| 1902 task_runner().RunPendingTasks(); // Run posted deadline. | 1891 task_runner().RunPendingTasks(); // Run posted deadline. |
| 1903 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_); | 1892 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_); |
| 1904 } | 1893 } |
| 1905 | 1894 |
| 1906 TEST_F(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommit) { | 1895 TEST_F(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommit) { |
| 1907 DidLoseOutputSurfaceAfterReadyToCommit(false); | 1896 DidLoseOutputSurfaceAfterReadyToCommit(false); |
| 1908 } | 1897 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1920 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_); | 1909 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_); |
| 1921 | 1910 |
| 1922 client_->Reset(); | 1911 client_->Reset(); |
| 1923 EXPECT_SCOPED(AdvanceFrame()); | 1912 EXPECT_SCOPED(AdvanceFrame()); |
| 1924 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); | 1913 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); |
| 1925 EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2); | 1914 EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2); |
| 1926 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 1915 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 1927 | 1916 |
| 1928 client_->Reset(); | 1917 client_->Reset(); |
| 1929 scheduler_->DidLoseOutputSurface(); | 1918 scheduler_->DidLoseOutputSurface(); |
| 1930 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 0, 2); | 1919 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_); |
| 1931 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2); | |
| 1932 | 1920 |
| 1933 client_->Reset(); | 1921 client_->Reset(); |
| 1934 task_runner().RunPendingTasks(); // Run posted deadline. | 1922 task_runner().RunPendingTasks(); // Run posted deadline. |
| 1935 EXPECT_ACTION("ScheduledActionPrepareTiles", client_, 0, 2); | 1923 EXPECT_ACTION("ScheduledActionPrepareTiles", client_, 0, 2); |
| 1936 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_, 1, 2); | 1924 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_, 1, 2); |
| 1937 } | 1925 } |
| 1938 | 1926 |
| 1939 TEST_F(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) { | 1927 TEST_F(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) { |
| 1940 scheduler_settings_.use_external_begin_frame_source = true; | 1928 scheduler_settings_.use_external_begin_frame_source = true; |
| 1941 SetUpScheduler(true); | 1929 SetUpScheduler(true); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1972 // NotifyReadyToCommit should trigger the commit. | 1960 // NotifyReadyToCommit should trigger the commit. |
| 1973 client_->Reset(); | 1961 client_->Reset(); |
| 1974 scheduler_->NotifyBeginMainFrameStarted(); | 1962 scheduler_->NotifyBeginMainFrameStarted(); |
| 1975 scheduler_->NotifyReadyToCommit(); | 1963 scheduler_->NotifyReadyToCommit(); |
| 1976 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_); | 1964 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_); |
| 1977 EXPECT_TRUE(client_->needs_begin_frames()); | 1965 EXPECT_TRUE(client_->needs_begin_frames()); |
| 1978 | 1966 |
| 1979 client_->Reset(); | 1967 client_->Reset(); |
| 1980 EXPECT_FALSE(scheduler_->IsBeginRetroFrameArgsEmpty()); | 1968 EXPECT_FALSE(scheduler_->IsBeginRetroFrameArgsEmpty()); |
| 1981 scheduler_->DidLoseOutputSurface(); | 1969 scheduler_->DidLoseOutputSurface(); |
| 1982 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_, 0, 3); | 1970 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_, 0, 2); |
| 1983 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 3); | 1971 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 2); |
| 1984 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 2, 3); | |
| 1985 EXPECT_TRUE(scheduler_->IsBeginRetroFrameArgsEmpty()); | 1972 EXPECT_TRUE(scheduler_->IsBeginRetroFrameArgsEmpty()); |
| 1986 | 1973 |
| 1987 // Posted BeginRetroFrame is aborted. | 1974 // Posted BeginRetroFrame is aborted. |
| 1988 client_->Reset(); | 1975 client_->Reset(); |
| 1989 task_runner().RunPendingTasks(); | 1976 task_runner().RunPendingTasks(); |
| 1990 EXPECT_NO_ACTION(client_); | 1977 EXPECT_NO_ACTION(client_); |
| 1991 } | 1978 } |
| 1992 | 1979 |
| 1993 TEST_F(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) { | 1980 TEST_F(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) { |
| 1994 scheduler_settings_.use_external_begin_frame_source = true; | 1981 scheduler_settings_.use_external_begin_frame_source = true; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2034 client_->Reset(); | 2021 client_->Reset(); |
| 2035 task_runner().RunPendingTasks(); // Run posted BeginRetroFrame. | 2022 task_runner().RunPendingTasks(); // Run posted BeginRetroFrame. |
| 2036 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); | 2023 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); |
| 2037 EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2); | 2024 EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2); |
| 2038 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 2025 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 2039 EXPECT_TRUE(client_->needs_begin_frames()); | 2026 EXPECT_TRUE(client_->needs_begin_frames()); |
| 2040 | 2027 |
| 2041 client_->Reset(); | 2028 client_->Reset(); |
| 2042 EXPECT_FALSE(scheduler_->IsBeginRetroFrameArgsEmpty()); | 2029 EXPECT_FALSE(scheduler_->IsBeginRetroFrameArgsEmpty()); |
| 2043 scheduler_->DidLoseOutputSurface(); | 2030 scheduler_->DidLoseOutputSurface(); |
| 2044 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 0, 2); | 2031 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_); |
| 2045 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2); | |
| 2046 EXPECT_TRUE(scheduler_->IsBeginRetroFrameArgsEmpty()); | 2032 EXPECT_TRUE(scheduler_->IsBeginRetroFrameArgsEmpty()); |
| 2047 | 2033 |
| 2048 // BeginImplFrame deadline should abort drawing. | 2034 // BeginImplFrame deadline should abort drawing. |
| 2049 client_->Reset(); | 2035 client_->Reset(); |
| 2050 task_runner().RunPendingTasks(); // Run posted deadline. | 2036 task_runner().RunPendingTasks(); // Run posted deadline. |
| 2051 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_); | 2037 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_); |
| 2052 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); | 2038 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); |
| 2053 EXPECT_FALSE(client_->needs_begin_frames()); | 2039 EXPECT_FALSE(client_->needs_begin_frames()); |
| 2054 | 2040 |
| 2055 // No more BeginRetroFrame because BeginRetroFrame queue is cleared. | 2041 // No more BeginRetroFrame because BeginRetroFrame queue is cleared. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2076 | 2062 |
| 2077 // NotifyReadyToCommit should trigger the commit. | 2063 // NotifyReadyToCommit should trigger the commit. |
| 2078 client_->Reset(); | 2064 client_->Reset(); |
| 2079 scheduler_->NotifyBeginMainFrameStarted(); | 2065 scheduler_->NotifyBeginMainFrameStarted(); |
| 2080 scheduler_->NotifyReadyToCommit(); | 2066 scheduler_->NotifyReadyToCommit(); |
| 2081 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_); | 2067 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_); |
| 2082 EXPECT_TRUE(scheduler_->frame_source().NeedsBeginFrames()); | 2068 EXPECT_TRUE(scheduler_->frame_source().NeedsBeginFrames()); |
| 2083 | 2069 |
| 2084 client_->Reset(); | 2070 client_->Reset(); |
| 2085 scheduler_->DidLoseOutputSurface(); | 2071 scheduler_->DidLoseOutputSurface(); |
| 2086 EXPECT_SINGLE_ACTION("SendBeginMainFrameNotExpectedSoon", client_); | 2072 EXPECT_NO_ACTION(client_); |
| 2087 EXPECT_FALSE(scheduler_->frame_source().NeedsBeginFrames()); | 2073 EXPECT_FALSE(scheduler_->frame_source().NeedsBeginFrames()); |
| 2088 | 2074 |
| 2089 client_->Reset(); | 2075 client_->Reset(); |
| 2090 task_runner().RunPendingTasks(); // Run posted deadline. | 2076 task_runner().RunPendingTasks(); // Run posted deadline. |
| 2091 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_); | 2077 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_); |
| 2092 EXPECT_FALSE(scheduler_->frame_source().NeedsBeginFrames()); | 2078 EXPECT_FALSE(scheduler_->frame_source().NeedsBeginFrames()); |
| 2093 } | 2079 } |
| 2094 | 2080 |
| 2095 TEST_F(SchedulerTest, ScheduledActionActivateAfterBecomingInvisible) { | 2081 TEST_F(SchedulerTest, ScheduledActionActivateAfterBecomingInvisible) { |
| 2096 scheduler_settings_.impl_side_painting = true; | 2082 scheduler_settings_.impl_side_painting = true; |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2354 EXPECT_SCOPED(AdvanceFrame()); | 2340 EXPECT_SCOPED(AdvanceFrame()); |
| 2355 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); | 2341 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); |
| 2356 EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2); | 2342 EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2); |
| 2357 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 2343 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 2358 EXPECT_TRUE(client_->needs_begin_frames()); | 2344 EXPECT_TRUE(client_->needs_begin_frames()); |
| 2359 client_->Reset(); | 2345 client_->Reset(); |
| 2360 task_runner().RunPendingTasks(); // Run posted deadline. | 2346 task_runner().RunPendingTasks(); // Run posted deadline. |
| 2361 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1); | 2347 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1); |
| 2362 } | 2348 } |
| 2363 | 2349 |
| 2364 // Tests to ensure that we send a BeginMainFrameNotExpectedSoon when expected. | |
| 2365 TEST_F(SchedulerTest, SendBeginMainFrameNotExpectedSoon) { | |
| 2366 scheduler_settings_.use_external_begin_frame_source = true; | |
| 2367 SetUpScheduler(true); | |
| 2368 | |
| 2369 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | |
| 2370 scheduler_->SetNeedsCommit(); | |
| 2371 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_); | |
| 2372 client_->Reset(); | |
| 2373 | |
| 2374 // Trigger a frame draw. | |
| 2375 EXPECT_SCOPED(AdvanceFrame()); | |
| 2376 scheduler_->NotifyBeginMainFrameStarted(); | |
| 2377 scheduler_->NotifyReadyToCommit(); | |
| 2378 task_runner().RunPendingTasks(); | |
| 2379 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 5); | |
| 2380 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 5); | |
| 2381 EXPECT_ACTION("ScheduledActionCommit", client_, 2, 5); | |
| 2382 EXPECT_ACTION("ScheduledActionAnimate", client_, 3, 5); | |
| 2383 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 4, 5); | |
| 2384 client_->Reset(); | |
| 2385 | |
| 2386 // The following BeginImplFrame deadline should SetNeedsBeginFrame(false) | |
| 2387 // and send a SendBeginMainFrameNotExpectedSoon. | |
| 2388 EXPECT_SCOPED(AdvanceFrame()); | |
| 2389 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_); | |
| 2390 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | |
| 2391 client_->Reset(); | |
| 2392 | |
| 2393 task_runner().RunPendingTasks(); // Run posted deadline. | |
| 2394 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 0, 2); | |
| 2395 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2); | |
| 2396 client_->Reset(); | |
| 2397 } | |
| 2398 | |
| 2399 } // namespace | 2350 } // namespace |
| 2400 } // namespace cc | 2351 } // namespace cc |
| OLD | NEW |