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

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: With a unittest (and minor compile fixes for other platforms). 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 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)
56 { 57 {
57 TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy"); 58 TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy");
58 DCHECK(isMainThread()); 59 DCHECK(isMainThread());
59 } 60 }
60 61
61 ThreadProxy::~ThreadProxy() 62 ThreadProxy::~ThreadProxy()
62 { 63 {
63 TRACE_EVENT0("cc", "ThreadProxy::~ThreadProxy"); 64 TRACE_EVENT0("cc", "ThreadProxy::~ThreadProxy");
64 DCHECK(isMainThread()); 65 DCHECK(isMainThread());
65 DCHECK(!m_started); 66 DCHECK(!m_started);
66 } 67 }
67 68
68 bool ThreadProxy::compositeAndReadback(void *pixels, const IntRect& rect) 69 bool ThreadProxy::compositeAndReadback(void *pixels, const IntRect& rect)
69 { 70 {
70 TRACE_EVENT0("cc", "ThreadPRoxy::compositeAndReadback"); 71 TRACE_EVENT0("cc", "ThreadPRoxy::compositeAndReadback");
71 DCHECK(isMainThread()); 72 DCHECK(isMainThread());
72 DCHECK(m_layerTreeHost); 73 DCHECK(m_layerTreeHost);
74 DCHECK(!m_deferCommits);
73 75
74 if (!m_layerTreeHost->initializeRendererIfNeeded()) { 76 if (!m_layerTreeHost->initializeRendererIfNeeded()) {
75 TRACE_EVENT0("cc", "compositeAndReadback_EarlyOut_LR_Uninitialized"); 77 TRACE_EVENT0("cc", "compositeAndReadback_EarlyOut_LR_Uninitialized");
76 return false; 78 return false;
77 } 79 }
78 80
79 81
80 // Perform a synchronous commit. 82 // Perform a synchronous commit.
81 { 83 {
82 DebugScopedSetMainThreadBlocked mainThreadBlocked; 84 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) 126 void ThreadProxy::requestStartPageScaleAnimationOnImplThread(IntSize targetPosit ion, bool useAnchor, float scale, double duration)
125 { 127 {
126 DCHECK(Proxy::isImplThread()); 128 DCHECK(Proxy::isImplThread());
127 if (m_layerTreeHostImpl.get()) 129 if (m_layerTreeHostImpl.get())
128 m_layerTreeHostImpl->startPageScaleAnimation(targetPosition, useAnchor, scale, monotonicallyIncreasingTime(), duration); 130 m_layerTreeHostImpl->startPageScaleAnimation(targetPosition, useAnchor, scale, monotonicallyIncreasingTime(), duration);
129 } 131 }
130 132
131 void ThreadProxy::finishAllRendering() 133 void ThreadProxy::finishAllRendering()
132 { 134 {
133 DCHECK(Proxy::isMainThread()); 135 DCHECK(Proxy::isMainThread());
136 DCHECK(!m_deferCommits);
134 137
135 // Make sure all GL drawing is finished on the impl thread. 138 // Make sure all GL drawing is finished on the impl thread.
136 DebugScopedSetMainThreadBlocked mainThreadBlocked; 139 DebugScopedSetMainThreadBlocked mainThreadBlocked;
137 CompletionEvent completion; 140 CompletionEvent completion;
138 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::finishAll RenderingOnImplThread, &completion)); 141 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::finishAll RenderingOnImplThread, &completion));
139 completion.wait(); 142 completion.wait();
140 } 143 }
141 144
142 bool ThreadProxy::isStarted() const 145 bool ThreadProxy::isStarted() const
143 { 146 {
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 } 369 }
367 370
368 void ThreadProxy::setNeedsRedraw() 371 void ThreadProxy::setNeedsRedraw()
369 { 372 {
370 DCHECK(isMainThread()); 373 DCHECK(isMainThread());
371 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedraw"); 374 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedraw");
372 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::setFullRo otLayerDamageOnImplThread)); 375 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::setFullRo otLayerDamageOnImplThread));
373 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::setNeedsR edrawOnImplThread)); 376 Proxy::implThread()->postTask(createThreadTask(this, &ThreadProxy::setNeedsR edrawOnImplThread));
374 } 377 }
375 378
379 void ThreadProxy::setDeferCommits(bool deferCommits)
380 {
381 DCHECK(isMainThread());
382 DCHECK_NE(m_deferCommits, deferCommits);
383 m_deferCommits = deferCommits;
384
385 if (m_deferCommits)
386 TRACE_EVENT_ASYNC_BEGIN0("cc", "ThreadProxy::setDeferCommits", this);
387 else
388 TRACE_EVENT_ASYNC_END0("cc", "ThreadProxy::setDeferCommits", this);
389
390 if (!m_deferCommits && m_pendingBeginFrameRequest)
piman 2012/10/25 00:14:08 There is a race condition here. m_pendingBeginFram
jonathan.backer 2012/10/25 15:19:04 Nice catch! That would have been impossible to deb
391 m_mainThreadProxy->postTask(createThreadTask(this, &ThreadProxy::beginFr ame));
392 }
393
376 bool ThreadProxy::commitRequested() const 394 bool ThreadProxy::commitRequested() const
377 { 395 {
378 DCHECK(isMainThread()); 396 DCHECK(isMainThread());
379 return m_commitRequested; 397 return m_commitRequested;
380 } 398 }
381 399
382 void ThreadProxy::setNeedsRedrawOnImplThread() 400 void ThreadProxy::setNeedsRedrawOnImplThread()
383 { 401 {
384 DCHECK(isImplThread()); 402 DCHECK(isImplThread());
385 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedrawOnImplThread"); 403 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedrawOnImplThread");
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 } 498 }
481 } 499 }
482 500
483 void ThreadProxy::beginFrame() 501 void ThreadProxy::beginFrame()
484 { 502 {
485 TRACE_EVENT0("cc", "ThreadProxy::beginFrame"); 503 TRACE_EVENT0("cc", "ThreadProxy::beginFrame");
486 DCHECK(isMainThread()); 504 DCHECK(isMainThread());
487 if (!m_layerTreeHost) 505 if (!m_layerTreeHost)
488 return; 506 return;
489 507
508 if (m_deferCommits) {
509 TRACE_EVENT0("cc", "EarlyOut_DeferCommits");
510 m_layerTreeHost->didDeferCommit();
511 return;
512 }
513
490 if (!m_pendingBeginFrameRequest) { 514 if (!m_pendingBeginFrameRequest) {
491 TRACE_EVENT0("cc", "EarlyOut_StaleBeginFrameMessage"); 515 TRACE_EVENT0("cc", "EarlyOut_StaleBeginFrameMessage");
492 return; 516 return;
493 } 517 }
494 518
495 if (m_layerTreeHost->needsSharedContext() && !WebSharedGraphicsContext3D::ha veCompositorThreadContext()) 519 if (m_layerTreeHost->needsSharedContext() && !WebSharedGraphicsContext3D::ha veCompositorThreadContext())
496 WebSharedGraphicsContext3D::createCompositorThreadContext(); 520 WebSharedGraphicsContext3D::createCompositorThreadContext();
497 521
498 scoped_ptr<BeginFrameAndCommitState> request(m_pendingBeginFrameRequest.Pass ()); 522 scoped_ptr<BeginFrameAndCommitState> request(m_pendingBeginFrameRequest.Pass ());
499 523
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 ThreadProxy::BeginFrameAndCommitState::BeginFrameAndCommitState() 972 ThreadProxy::BeginFrameAndCommitState::BeginFrameAndCommitState()
949 : monotonicFrameBeginTime(0) 973 : monotonicFrameBeginTime(0)
950 { 974 {
951 } 975 }
952 976
953 ThreadProxy::BeginFrameAndCommitState::~BeginFrameAndCommitState() 977 ThreadProxy::BeginFrameAndCommitState::~BeginFrameAndCommitState()
954 { 978 {
955 } 979 }
956 980
957 } // namespace cc 981 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698