summaryrefslogtreecommitdiffstats
path: root/cc/thread_proxy.cc
diff options
context:
space:
mode:
authorbacker@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-27 00:44:28 +0000
committerbacker@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-27 00:44:28 +0000
commit6b16679e5700658051a581bb61b37e5b542ef818 (patch)
tree9e9ed110b8a2685391959a77614f9fc18b4afe5f /cc/thread_proxy.cc
parented6635eb5d07d0ad27a2a02ffeacf87c135090fe (diff)
downloadchromium_src-6b16679e5700658051a581bb61b37e5b542ef818.zip
chromium_src-6b16679e5700658051a581bb61b37e5b542ef818.tar.gz
chromium_src-6b16679e5700658051a581bb61b37e5b542ef818.tar.bz2
Aura: Resize locks with --ui-enable-threaded-compositing
We temporarily defer commits while resizing so that the renderer has a chance to catch up with the UI window size. Noteable changes from master: - RWHVs can fast ACK the GPU process (not flip in the browser or TextureImageTransportSurface); useful for allowing the renderer to catch up when it gets too far behind. - RWHVA will insist kicking a renderer frame after the lock times out on resize (wasn't necessary before) - ui::Compositor vends draw locks (which largely just wraps to cc::Proxy) of ui::aura::RootWindow BUG=136366 TEST=None Review URL: https://chromiumcodereview.appspot.com/10690168 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@164460 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/thread_proxy.cc')
-rw-r--r--cc/thread_proxy.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/cc/thread_proxy.cc b/cc/thread_proxy.cc
index 666c03f..e8229ca 100644
--- a/cc/thread_proxy.cc
+++ b/cc/thread_proxy.cc
@@ -53,6 +53,8 @@ ThreadProxy::ThreadProxy(LayerTreeHost* layerTreeHost)
, m_nextFrameIsNewlyCommittedFrameOnImplThread(false)
, m_renderVSyncEnabled(layerTreeHost->settings().renderVSyncEnabled)
, m_totalCommitCount(0)
+ , m_deferCommits(false)
+ , m_deferredCommitPending(false)
{
TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy");
DCHECK(isMainThread());
@@ -70,6 +72,7 @@ bool ThreadProxy::compositeAndReadback(void *pixels, const IntRect& rect)
TRACE_EVENT0("cc", "ThreadPRoxy::compositeAndReadback");
DCHECK(isMainThread());
DCHECK(m_layerTreeHost);
+ DCHECK(!m_deferCommits);
if (!m_layerTreeHost->initializeRendererIfNeeded()) {
TRACE_EVENT0("cc", "compositeAndReadback_EarlyOut_LR_Uninitialized");
@@ -131,6 +134,7 @@ void ThreadProxy::requestStartPageScaleAnimationOnImplThread(IntSize targetPosit
void ThreadProxy::finishAllRendering()
{
DCHECK(Proxy::isMainThread());
+ DCHECK(!m_deferCommits);
// Make sure all GL drawing is finished on the impl thread.
DebugScopedSetMainThreadBlocked mainThreadBlocked;
@@ -386,6 +390,23 @@ void ThreadProxy::setNeedsRedraw()
Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::setNeedsRedrawOnImplThread));
}
+void ThreadProxy::setDeferCommits(bool deferCommits)
+{
+ DCHECK(isMainThread());
+ DCHECK_NE(m_deferCommits, deferCommits);
+ m_deferCommits = deferCommits;
+
+ if (m_deferCommits)
+ TRACE_EVENT_ASYNC_BEGIN0("cc", "ThreadProxy::setDeferCommits", this);
+ else
+ TRACE_EVENT_ASYNC_END0("cc", "ThreadProxy::setDeferCommits", this);
+
+ if (!m_deferCommits && m_deferredCommitPending) {
+ m_deferredCommitPending = false;
+ m_mainThreadProxy->postTask(createThreadTask(this, &ThreadProxy::beginFrame));
+ }
+}
+
bool ThreadProxy::commitRequested() const
{
DCHECK(isMainThread());
@@ -500,6 +521,13 @@ void ThreadProxy::beginFrame()
if (!m_layerTreeHost)
return;
+ if (m_deferCommits) {
+ m_deferredCommitPending = true;
+ m_layerTreeHost->didDeferCommit();
+ TRACE_EVENT0("cc", "EarlyOut_DeferCommits");
+ return;
+ }
+
if (!m_pendingBeginFrameRequest) {
TRACE_EVENT0("cc", "EarlyOut_StaleBeginFrameMessage");
return;