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

Side by Side Diff: cc/thread_proxy.cc

Issue 10690168: Aura: Resize locks with --ui-enable-threaded-compositing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address piman@ comments. Created 8 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "config.h" 5 #include "config.h"
6 6
7 #include "cc/thread_proxy.h" 7 #include "cc/thread_proxy.h"
8 8
9 #include "CCDelayBasedTimeSource.h" 9 #include "CCDelayBasedTimeSource.h"
10 #include "CCDrawQuad.h" 10 #include "CCDrawQuad.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 , m_texturesAcquired(true) 46 , m_texturesAcquired(true)
47 , m_inCompositeAndReadback(false) 47 , m_inCompositeAndReadback(false)
48 , m_mainThreadProxy(ScopedThreadProxy::create(Proxy::mainThread())) 48 , m_mainThreadProxy(ScopedThreadProxy::create(Proxy::mainThread()))
49 , m_beginFrameCompletionEventOnImplThread(0) 49 , m_beginFrameCompletionEventOnImplThread(0)
50 , m_readbackRequestOnImplThread(0) 50 , m_readbackRequestOnImplThread(0)
51 , m_commitCompletionEventOnImplThread(0) 51 , m_commitCompletionEventOnImplThread(0)
52 , m_textureAcquisitionCompletionEventOnImplThread(0) 52 , m_textureAcquisitionCompletionEventOnImplThread(0)
53 , m_nextFrameIsNewlyCommittedFrameOnImplThread(false) 53 , m_nextFrameIsNewlyCommittedFrameOnImplThread(false)
54 , m_renderVSyncEnabled(layerTreeHost->settings().renderVSyncEnabled) 54 , m_renderVSyncEnabled(layerTreeHost->settings().renderVSyncEnabled)
55 , m_totalCommitCount(0) 55 , m_totalCommitCount(0)
56 , m_deferCommits(false)
57 , m_deferredCommitPending(false)
56 { 58 {
57 TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy"); 59 TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy");
58 DCHECK(isMainThread()); 60 DCHECK(isMainThread());
59 } 61 }
60 62
61 ThreadProxy::~ThreadProxy() 63 ThreadProxy::~ThreadProxy()
62 { 64 {
63 TRACE_EVENT0("cc", "ThreadProxy::~ThreadProxy"); 65 TRACE_EVENT0("cc", "ThreadProxy::~ThreadProxy");
64 DCHECK(isMainThread()); 66 DCHECK(isMainThread());
65 DCHECK(!m_started); 67 DCHECK(!m_started);
66 } 68 }
67 69
68 bool ThreadProxy::compositeAndReadback(void *pixels, const IntRect& rect) 70 bool ThreadProxy::compositeAndReadback(void *pixels, const IntRect& rect)
69 { 71 {
70 TRACE_EVENT0("cc", "ThreadPRoxy::compositeAndReadback"); 72 TRACE_EVENT0("cc", "ThreadPRoxy::compositeAndReadback");
71 DCHECK(isMainThread()); 73 DCHECK(isMainThread());
72 DCHECK(m_layerTreeHost); 74 DCHECK(m_layerTreeHost);
75 DCHECK(!m_deferCommits);
73 76
74 if (!m_layerTreeHost->initializeRendererIfNeeded()) { 77 if (!m_layerTreeHost->initializeRendererIfNeeded()) {
75 TRACE_EVENT0("cc", "compositeAndReadback_EarlyOut_LR_Uninitialized"); 78 TRACE_EVENT0("cc", "compositeAndReadback_EarlyOut_LR_Uninitialized");
76 return false; 79 return false;
77 } 80 }
78 81
79 82
80 // Perform a synchronous commit. 83 // Perform a synchronous commit.
81 { 84 {
82 DebugScopedSetMainThreadBlocked mainThreadBlocked; 85 DebugScopedSetMainThreadBlocked mainThreadBlocked;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 void ThreadProxy::requestStartPageScaleAnimationOnImplThread(IntSize targetPosit ion, bool useAnchor, float scale, double duration) 127 void ThreadProxy::requestStartPageScaleAnimationOnImplThread(IntSize targetPosit ion, bool useAnchor, float scale, double duration)
125 { 128 {
126 DCHECK(Proxy::isImplThread()); 129 DCHECK(Proxy::isImplThread());
127 if (m_layerTreeHostImpl.get()) 130 if (m_layerTreeHostImpl.get())
128 m_layerTreeHostImpl->startPageScaleAnimation(targetPosition, useAnchor, scale, monotonicallyIncreasingTime(), duration); 131 m_layerTreeHostImpl->startPageScaleAnimation(targetPosition, useAnchor, scale, monotonicallyIncreasingTime(), duration);
129 } 132 }
130 133
131 void ThreadProxy::finishAllRendering() 134 void ThreadProxy::finishAllRendering()
132 { 135 {
133 DCHECK(Proxy::isMainThread()); 136 DCHECK(Proxy::isMainThread());
137 DCHECK(!m_deferCommits);
134 138
135 // Make sure all GL drawing is finished on the impl thread. 139 // Make sure all GL drawing is finished on the impl thread.
136 DebugScopedSetMainThreadBlocked mainThreadBlocked; 140 DebugScopedSetMainThreadBlocked mainThreadBlocked;
137 CompletionEvent completion; 141 CompletionEvent completion;
138 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::finishAll RenderingOnImplThread, &completion)); 142 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::finishAll RenderingOnImplThread, &completion));
139 completion.wait(); 143 completion.wait();
140 } 144 }
141 145
142 bool ThreadProxy::isStarted() const 146 bool ThreadProxy::isStarted() const
143 { 147 {
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 } 370 }
367 371
368 void ThreadProxy::setNeedsRedraw() 372 void ThreadProxy::setNeedsRedraw()
369 { 373 {
370 DCHECK(isMainThread()); 374 DCHECK(isMainThread());
371 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedraw"); 375 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedraw");
372 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::setFullRo otLayerDamageOnImplThread)); 376 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::setFullRo otLayerDamageOnImplThread));
373 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::setNeedsR edrawOnImplThread)); 377 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::setNeedsR edrawOnImplThread));
374 } 378 }
375 379
380 void ThreadProxy::setDeferCommits(bool deferCommits)
381 {
382 DCHECK(isMainThread());
383 DCHECK_NE(m_deferCommits, deferCommits);
384 m_deferCommits = deferCommits;
385
386 if (m_deferCommits)
387 TRACE_EVENT_ASYNC_BEGIN0("cc", "ThreadProxy::setDeferCommits", this);
388 else
389 TRACE_EVENT_ASYNC_END0("cc", "ThreadProxy::setDeferCommits", this);
390
391 if (!m_deferCommits && m_deferredCommitPending)
392 m_mainThreadProxy->postTask(createThreadTask(this, &ThreadProxy::beginFr ame));
393 }
394
376 bool ThreadProxy::commitRequested() const 395 bool ThreadProxy::commitRequested() const
377 { 396 {
378 DCHECK(isMainThread()); 397 DCHECK(isMainThread());
379 return m_commitRequested; 398 return m_commitRequested;
380 } 399 }
381 400
382 void ThreadProxy::setNeedsRedrawOnImplThread() 401 void ThreadProxy::setNeedsRedrawOnImplThread()
383 { 402 {
384 DCHECK(isImplThread()); 403 DCHECK(isImplThread());
385 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedrawOnImplThread"); 404 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedrawOnImplThread");
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 } 499 }
481 } 500 }
482 501
483 void ThreadProxy::beginFrame() 502 void ThreadProxy::beginFrame()
484 { 503 {
485 TRACE_EVENT0("cc", "ThreadProxy::beginFrame"); 504 TRACE_EVENT0("cc", "ThreadProxy::beginFrame");
486 DCHECK(isMainThread()); 505 DCHECK(isMainThread());
487 if (!m_layerTreeHost) 506 if (!m_layerTreeHost)
488 return; 507 return;
489 508
509 if (m_deferCommits) {
510 m_deferredCommitPending = true;
511 m_layerTreeHost->didDeferCommit();
512 TRACE_EVENT0("cc", "EarlyOut_DeferCommits");
513 return;
514 } else
515 m_deferredCommitPending = false;
piman 2012/10/25 16:18:58 I would reset this when posting the task in setDef
jonathan.backer 2012/10/25 16:38:11 Done.
516
490 if (!m_pendingBeginFrameRequest) { 517 if (!m_pendingBeginFrameRequest) {
491 TRACE_EVENT0("cc", "EarlyOut_StaleBeginFrameMessage"); 518 TRACE_EVENT0("cc", "EarlyOut_StaleBeginFrameMessage");
492 return; 519 return;
493 } 520 }
494 521
495 if (m_layerTreeHost->needsSharedContext() && !WebSharedGraphicsContext3D::ha veCompositorThreadContext()) 522 if (m_layerTreeHost->needsSharedContext() && !WebSharedGraphicsContext3D::ha veCompositorThreadContext())
496 WebSharedGraphicsContext3D::createCompositorThreadContext(); 523 WebSharedGraphicsContext3D::createCompositorThreadContext();
497 524
498 scoped_ptr<BeginFrameAndCommitState> request(m_pendingBeginFrameRequest.Pass ()); 525 scoped_ptr<BeginFrameAndCommitState> request(m_pendingBeginFrameRequest.Pass ());
499 526
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 ThreadProxy::BeginFrameAndCommitState::BeginFrameAndCommitState() 975 ThreadProxy::BeginFrameAndCommitState::BeginFrameAndCommitState()
949 : monotonicFrameBeginTime(0) 976 : monotonicFrameBeginTime(0)
950 { 977 {
951 } 978 }
952 979
953 ThreadProxy::BeginFrameAndCommitState::~BeginFrameAndCommitState() 980 ThreadProxy::BeginFrameAndCommitState::~BeginFrameAndCommitState()
954 { 981 {
955 } 982 }
956 983
957 } // namespace cc 984 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698