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

Side by Side Diff: cc/thread_proxy.cc

Issue 11879012: cc: Redraw incomplete frames when new texture uploads finish (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@decouple_draw3b
Patch Set: fix [chromium-style] virtual methods with non-empty bodies shouldn't be declared inline Created 7 years, 11 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
« no previous file with comments | « cc/thread_proxy.h ('k') | cc/tile_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "cc/thread_proxy.h" 5 #include "cc/thread_proxy.h"
6 6
7 #include "base/auto_reset.h"
7 #include "base/bind.h" 8 #include "base/bind.h"
8 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
9 #include "cc/delay_based_time_source.h" 10 #include "cc/delay_based_time_source.h"
10 #include "cc/draw_quad.h" 11 #include "cc/draw_quad.h"
11 #include "cc/frame_rate_controller.h" 12 #include "cc/frame_rate_controller.h"
12 #include "cc/input_handler.h" 13 #include "cc/input_handler.h"
13 #include "cc/layer_tree_host.h" 14 #include "cc/layer_tree_host.h"
14 #include "cc/output_surface.h" 15 #include "cc/output_surface.h"
15 #include "cc/prioritized_resource_manager.h" 16 #include "cc/prioritized_resource_manager.h"
16 #include "cc/scheduler.h" 17 #include "cc/scheduler.h"
(...skipping 29 matching lines...) Expand all
46 , m_manageTilesPending(false) 47 , m_manageTilesPending(false)
47 , m_weakFactoryOnImplThread(ALLOW_THIS_IN_INITIALIZER_LIST(this)) 48 , m_weakFactoryOnImplThread(ALLOW_THIS_IN_INITIALIZER_LIST(this))
48 , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) 49 , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this))
49 , m_beginFrameCompletionEventOnImplThread(0) 50 , m_beginFrameCompletionEventOnImplThread(0)
50 , m_readbackRequestOnImplThread(0) 51 , m_readbackRequestOnImplThread(0)
51 , m_commitCompletionEventOnImplThread(0) 52 , m_commitCompletionEventOnImplThread(0)
52 , m_completionEventForCommitHeldOnTreeActivation(0) 53 , m_completionEventForCommitHeldOnTreeActivation(0)
53 , m_textureAcquisitionCompletionEventOnImplThread(0) 54 , m_textureAcquisitionCompletionEventOnImplThread(0)
54 , m_nextFrameIsNewlyCommittedFrameOnImplThread(false) 55 , m_nextFrameIsNewlyCommittedFrameOnImplThread(false)
55 , m_renderVSyncEnabled(layerTreeHost->settings().renderVSyncEnabled) 56 , m_renderVSyncEnabled(layerTreeHost->settings().renderVSyncEnabled)
57 , m_insideDraw(false)
56 , m_totalCommitCount(0) 58 , m_totalCommitCount(0)
57 , m_deferCommits(false) 59 , m_deferCommits(false)
58 { 60 {
59 TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy"); 61 TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy");
60 DCHECK(isMainThread()); 62 DCHECK(isMainThread());
61 } 63 }
62 64
63 ThreadProxy::~ThreadProxy() 65 ThreadProxy::~ThreadProxy()
64 { 66 {
65 TRACE_EVENT0("cc", "ThreadProxy::~ThreadProxy"); 67 TRACE_EVENT0("cc", "ThreadProxy::~ThreadProxy");
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 // interact with main thread's layer tree. 400 // interact with main thread's layer tree.
399 if (m_layerTreeHost->settings().implSidePainting) 401 if (m_layerTreeHost->settings().implSidePainting)
400 return; 402 return;
401 403
402 m_layerTreeHostImpl->sendManagedMemoryStats( 404 m_layerTreeHostImpl->sendManagedMemoryStats(
403 m_layerTreeHost->contentsTextureManager()->memoryVisibleBytes(), 405 m_layerTreeHost->contentsTextureManager()->memoryVisibleBytes(),
404 m_layerTreeHost->contentsTextureManager()->memoryVisibleAndNearbyBytes() , 406 m_layerTreeHost->contentsTextureManager()->memoryVisibleAndNearbyBytes() ,
405 m_layerTreeHost->contentsTextureManager()->memoryUseBytes()); 407 m_layerTreeHost->contentsTextureManager()->memoryUseBytes());
406 } 408 }
407 409
410 bool ThreadProxy::isInsideDraw()
411 {
412 return m_insideDraw;
413 }
414
408 void ThreadProxy::setNeedsRedraw() 415 void ThreadProxy::setNeedsRedraw()
409 { 416 {
410 DCHECK(isMainThread()); 417 DCHECK(isMainThread());
411 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedraw"); 418 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedraw");
412 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setFullRootLayerDamag eOnImplThread, m_implThreadWeakPtr)); 419 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setFullRootLayerDamag eOnImplThread, m_implThreadWeakPtr));
413 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setNeedsRedrawOnImplT hread, m_implThreadWeakPtr)); 420 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setNeedsRedrawOnImplT hread, m_implThreadWeakPtr));
414 } 421 }
415 422
416 void ThreadProxy::setDeferCommits(bool deferCommits) 423 void ThreadProxy::setDeferCommits(bool deferCommits)
417 { 424 {
(...skipping 16 matching lines...) Expand all
434 return m_commitRequested; 441 return m_commitRequested;
435 } 442 }
436 443
437 void ThreadProxy::setNeedsRedrawOnImplThread() 444 void ThreadProxy::setNeedsRedrawOnImplThread()
438 { 445 {
439 DCHECK(isImplThread()); 446 DCHECK(isImplThread());
440 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedrawOnImplThread"); 447 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedrawOnImplThread");
441 m_schedulerOnImplThread->setNeedsRedraw(); 448 m_schedulerOnImplThread->setNeedsRedraw();
442 } 449 }
443 450
451 void ThreadProxy::didSwapUseIncompleteTextureOnImplThread()
452 {
453 DCHECK(isImplThread());
454 TRACE_EVENT0("cc", "ThreadProxy::didSwapUseIncompleteTextureOnImplThread");
455 m_schedulerOnImplThread->didSwapUseIncompleteTexture();
456 }
457
458 void ThreadProxy::didUploadVisibleHighResolutionTileOnImplTread()
459 {
460 DCHECK(isImplThread());
461 TRACE_EVENT0("cc", "ThreadProxy::didUploadVisibleHighResolutionTileOnImplTrea d");
462 m_schedulerOnImplThread->setNeedsRedraw();
463 }
464
444 void ThreadProxy::mainThreadHasStoppedFlinging() 465 void ThreadProxy::mainThreadHasStoppedFlinging()
445 { 466 {
446 if (m_inputHandlerOnImplThread) 467 if (m_inputHandlerOnImplThread)
447 m_inputHandlerOnImplThread->mainThreadHasStoppedFlinging(); 468 m_inputHandlerOnImplThread->mainThreadHasStoppedFlinging();
448 } 469 }
449 470
450 void ThreadProxy::start() 471 void ThreadProxy::start()
451 { 472 {
452 DCHECK(isMainThread()); 473 DCHECK(isMainThread());
453 DCHECK(Proxy::implThread()); 474 DCHECK(Proxy::implThread());
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 else 753 else
733 { 754 {
734 m_commitCompletionEventOnImplThread->signal(); 755 m_commitCompletionEventOnImplThread->signal();
735 m_commitCompletionEventOnImplThread = 0; 756 m_commitCompletionEventOnImplThread = 0;
736 } 757 }
737 758
738 // SetVisible kicks off the next scheduler action, so this must be last. 759 // SetVisible kicks off the next scheduler action, so this must be last.
739 m_schedulerOnImplThread->setVisible(m_layerTreeHostImpl->visible()); 760 m_schedulerOnImplThread->setVisible(m_layerTreeHostImpl->visible());
740 } 761 }
741 762
763 void ThreadProxy::scheduledActionCheckForCompletedTextures()
764 {
765 DCHECK(isImplThread());
766 TRACE_EVENT0("cc", "ThreadProxy::scheduledActionCheckForCompletedTextures");
767 m_layerTreeHostImpl->checkForCompletedTextures();
768 }
769
742 void ThreadProxy::scheduledActionActivatePendingTreeIfNeeded() 770 void ThreadProxy::scheduledActionActivatePendingTreeIfNeeded()
743 { 771 {
772 DCHECK(isImplThread());
773 TRACE_EVENT0("cc", "ThreadProxy::scheduledActionActivatePendingTreeIfNeeded" );
744 m_layerTreeHostImpl->activatePendingTreeIfNeeded(); 774 m_layerTreeHostImpl->activatePendingTreeIfNeeded();
745 } 775 }
746 776
747 void ThreadProxy::scheduledActionBeginContextRecreation() 777 void ThreadProxy::scheduledActionBeginContextRecreation()
748 { 778 {
749 DCHECK(isImplThread()); 779 DCHECK(isImplThread());
750 Proxy::mainThread()->postTask(base::Bind(&ThreadProxy::beginContextRecreatio n, m_mainThreadWeakPtr)); 780 Proxy::mainThread()->postTask(base::Bind(&ThreadProxy::beginContextRecreatio n, m_mainThreadWeakPtr));
751 } 781 }
752 782
753 ScheduledActionDrawAndSwapResult ThreadProxy::scheduledActionDrawAndSwapInternal (bool forcedDraw) 783 ScheduledActionDrawAndSwapResult ThreadProxy::scheduledActionDrawAndSwapInternal (bool forcedDraw)
754 { 784 {
755 TRACE_EVENT0("cc", "ThreadProxy::scheduledActionDrawAndSwap"); 785 TRACE_EVENT0("cc", "ThreadProxy::scheduledActionDrawAndSwap");
786
787 base::AutoReset<bool> markInside(&m_insideDraw, true);
788
756 ScheduledActionDrawAndSwapResult result; 789 ScheduledActionDrawAndSwapResult result;
757 result.didDraw = false; 790 result.didDraw = false;
758 result.didSwap = false; 791 result.didSwap = false;
759 DCHECK(isImplThread()); 792 DCHECK(isImplThread());
760 DCHECK(m_layerTreeHostImpl.get()); 793 DCHECK(m_layerTreeHostImpl.get());
761 if (!m_layerTreeHostImpl.get()) 794 if (!m_layerTreeHostImpl.get())
762 return result; 795 return result;
763 796
764 DCHECK(m_layerTreeHostImpl->renderer()); 797 DCHECK(m_layerTreeHostImpl->renderer());
765 if (!m_layerTreeHostImpl->renderer()) 798 if (!m_layerTreeHostImpl->renderer())
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 } 1104 }
1072 1105
1073 void ThreadProxy::capturePictureOnImplThread(CompletionEvent* completion, skia:: RefPtr<SkPicture>* picture) 1106 void ThreadProxy::capturePictureOnImplThread(CompletionEvent* completion, skia:: RefPtr<SkPicture>* picture)
1074 { 1107 {
1075 DCHECK(isImplThread()); 1108 DCHECK(isImplThread());
1076 *picture = m_layerTreeHostImpl->capturePicture(); 1109 *picture = m_layerTreeHostImpl->capturePicture();
1077 completion->signal(); 1110 completion->signal();
1078 } 1111 }
1079 1112
1080 } // namespace cc 1113 } // namespace cc
OLDNEW
« no previous file with comments | « cc/thread_proxy.h ('k') | cc/tile_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698