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

Side by Side Diff: cc/thread_proxy.cc

Issue 12217105: cc: Check for completed raster tasks at interval. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Post task to impl thread when worker pool becomes idle. Created 7 years, 10 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 "cc/thread_proxy.h" 5 #include "cc/thread_proxy.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "cc/delay_based_time_source.h" 10 #include "cc/delay_based_time_source.h"
(...skipping 11 matching lines...) Expand all
22 using WebKit::WebSharedGraphicsContext3D; 22 using WebKit::WebSharedGraphicsContext3D;
23 23
24 namespace { 24 namespace {
25 25
26 // Measured in seconds. 26 // Measured in seconds.
27 const double contextRecreationTickRate = 0.03; 27 const double contextRecreationTickRate = 0.03;
28 28
29 // Measured in seconds. 29 // Measured in seconds.
30 const double smoothnessTakesPriorityExpirationDelay = 0.25; 30 const double smoothnessTakesPriorityExpirationDelay = 0.25;
31 31
32 // Measured in seconds.
33 const double checkForCompletedRasterTasksDelay = 0.004;
34
32 } // namespace 35 } // namespace
33 36
34 namespace cc { 37 namespace cc {
35 38
36 scoped_ptr<Proxy> ThreadProxy::create(LayerTreeHost* layerTreeHost, scoped_ptr<T hread> implThread) 39 scoped_ptr<Proxy> ThreadProxy::create(LayerTreeHost* layerTreeHost, scoped_ptr<T hread> implThread)
37 { 40 {
38 return make_scoped_ptr(new ThreadProxy(layerTreeHost, implThread.Pass())).Pa ssAs<Proxy>(); 41 return make_scoped_ptr(new ThreadProxy(layerTreeHost, implThread.Pass())).Pa ssAs<Proxy>();
39 } 42 }
40 43
41 ThreadProxy::ThreadProxy(LayerTreeHost* layerTreeHost, scoped_ptr<Thread> implTh read) 44 ThreadProxy::ThreadProxy(LayerTreeHost* layerTreeHost, scoped_ptr<Thread> implTh read)
42 : Proxy(implThread.Pass()) 45 : Proxy(implThread.Pass())
43 , m_animateRequested(false) 46 , m_animateRequested(false)
44 , m_commitRequested(false) 47 , m_commitRequested(false)
45 , m_commitRequestSentToImplThread(false) 48 , m_commitRequestSentToImplThread(false)
46 , m_layerTreeHost(layerTreeHost) 49 , m_layerTreeHost(layerTreeHost)
47 , m_rendererInitialized(false) 50 , m_rendererInitialized(false)
48 , m_started(false) 51 , m_started(false)
49 , m_texturesAcquired(true) 52 , m_texturesAcquired(true)
50 , m_inCompositeAndReadback(false) 53 , m_inCompositeAndReadback(false)
51 , m_manageTilesPending(false) 54 , m_manageTilesPending(false)
52 , m_weakFactoryOnImplThread(ALLOW_THIS_IN_INITIALIZER_LIST(this)) 55 , m_weakFactoryOnImplThread(ALLOW_THIS_IN_INITIALIZER_LIST(this))
53 , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) 56 , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this))
57 , m_weakCheckForCompletedRasterTasksFactory(
58 ALLOW_THIS_IN_INITIALIZER_LIST(this))
54 , m_beginFrameCompletionEventOnImplThread(0) 59 , m_beginFrameCompletionEventOnImplThread(0)
55 , m_readbackRequestOnImplThread(0) 60 , m_readbackRequestOnImplThread(0)
56 , m_commitCompletionEventOnImplThread(0) 61 , m_commitCompletionEventOnImplThread(0)
57 , m_completionEventForCommitHeldOnTreeActivation(0) 62 , m_completionEventForCommitHeldOnTreeActivation(0)
58 , m_textureAcquisitionCompletionEventOnImplThread(0) 63 , m_textureAcquisitionCompletionEventOnImplThread(0)
59 , m_nextFrameIsNewlyCommittedFrameOnImplThread(false) 64 , m_nextFrameIsNewlyCommittedFrameOnImplThread(false)
60 , m_renderVSyncEnabled(layerTreeHost->settings().renderVSyncEnabled) 65 , m_renderVSyncEnabled(layerTreeHost->settings().renderVSyncEnabled)
61 , m_insideDraw(false) 66 , m_insideDraw(false)
62 , m_totalCommitCount(0) 67 , m_totalCommitCount(0)
63 , m_deferCommits(false) 68 , m_deferCommits(false)
64 , m_renewTreePriorityOnImplThreadPending(false) 69 , m_renewTreePriorityOnImplThreadPending(false)
70 , m_checkForCompletedRasterTasksPending(false)
65 { 71 {
66 TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy"); 72 TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy");
67 DCHECK(isMainThread()); 73 DCHECK(isMainThread());
68 } 74 }
69 75
70 ThreadProxy::~ThreadProxy() 76 ThreadProxy::~ThreadProxy()
71 { 77 {
72 TRACE_EVENT0("cc", "ThreadProxy::~ThreadProxy"); 78 TRACE_EVENT0("cc", "ThreadProxy::~ThreadProxy");
73 DCHECK(isMainThread()); 79 DCHECK(isMainThread());
74 DCHECK(!m_started); 80 DCHECK(!m_started);
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 354
349 void ThreadProxy::setNeedsCommitOnImplThread() 355 void ThreadProxy::setNeedsCommitOnImplThread()
350 { 356 {
351 DCHECK(isImplThread()); 357 DCHECK(isImplThread());
352 TRACE_EVENT0("cc", "ThreadProxy::setNeedsCommitOnImplThread"); 358 TRACE_EVENT0("cc", "ThreadProxy::setNeedsCommitOnImplThread");
353 m_schedulerOnImplThread->setNeedsCommit(); 359 m_schedulerOnImplThread->setNeedsCommit();
354 } 360 }
355 361
356 void ThreadProxy::setNeedsManageTilesOnImplThread() 362 void ThreadProxy::setNeedsManageTilesOnImplThread()
357 { 363 {
364 DCHECK(isImplThread());
358 if (m_manageTilesPending) 365 if (m_manageTilesPending)
359 return; 366 return;
360 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::manageTilesOnImplThre ad, m_implThreadWeakPtr)); 367 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::manageTilesOnImplThre ad, m_implThreadWeakPtr));
361 m_manageTilesPending = true; 368 m_manageTilesPending = true;
362 } 369 }
363 370
364 void ThreadProxy::manageTilesOnImplThread() 371 void ThreadProxy::manageTilesOnImplThread()
365 { 372 {
373 DCHECK(isImplThread());
366 // TODO(nduca): If needed, move this into CCSchedulerStateMachine. 374 // TODO(nduca): If needed, move this into CCSchedulerStateMachine.
367 m_manageTilesPending = false; 375 m_manageTilesPending = false;
368 if (m_layerTreeHostImpl) 376 if (m_layerTreeHostImpl)
369 m_layerTreeHostImpl->manageTiles(); 377 m_layerTreeHostImpl->manageTiles();
370 } 378 }
371 379
380 void ThreadProxy::setNeedsCheckForCompletedRasterTasksOnImplThread()
381 {
382 DCHECK(isImplThread());
383 if (m_checkForCompletedRasterTasksPending)
384 return;
385 Proxy::implThread()->postDelayedTask(
386 base::Bind(&ThreadProxy::checkForCompletedRasterTasksOnImplThread,
387 m_weakCheckForCompletedRasterTasksFactory.GetWeakPtr()),
388 checkForCompletedRasterTasksDelay * 1000);
389 m_checkForCompletedRasterTasksPending = true;
390 }
391
392 void ThreadProxy::checkForCompletedRasterTasksOnImplThread()
393 {
394 DCHECK(isImplThread());
395 m_checkForCompletedRasterTasksPending = false;
396 if (m_layerTreeHostImpl)
397 m_layerTreeHostImpl->checkForCompletedRasterTasks();
398 }
399
372 void ThreadProxy::setNeedsForcedCommitOnImplThread() 400 void ThreadProxy::setNeedsForcedCommitOnImplThread()
373 { 401 {
374 DCHECK(isImplThread()); 402 DCHECK(isImplThread());
375 TRACE_EVENT0("cc", "ThreadProxy::setNeedsForcedCommitOnImplThread"); 403 TRACE_EVENT0("cc", "ThreadProxy::setNeedsForcedCommitOnImplThread");
376 m_schedulerOnImplThread->setNeedsForcedCommit(); 404 m_schedulerOnImplThread->setNeedsForcedCommit();
377 } 405 }
378 406
379 void ThreadProxy::postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animati onEventsVector> events, base::Time wallClockTime) 407 void ThreadProxy::postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animati onEventsVector> events, base::Time wallClockTime)
380 { 408 {
381 DCHECK(isImplThread()); 409 DCHECK(isImplThread());
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 m_schedulerOnImplThread->didSwapUseIncompleteTile(); 507 m_schedulerOnImplThread->didSwapUseIncompleteTile();
480 } 508 }
481 509
482 void ThreadProxy::didUploadVisibleHighResolutionTileOnImplThread() 510 void ThreadProxy::didUploadVisibleHighResolutionTileOnImplThread()
483 { 511 {
484 DCHECK(isImplThread()); 512 DCHECK(isImplThread());
485 TRACE_EVENT0("cc", "ThreadProxy::didUploadVisibleHighResolutionTileOnImplThre ad"); 513 TRACE_EVENT0("cc", "ThreadProxy::didUploadVisibleHighResolutionTileOnImplThre ad");
486 m_schedulerOnImplThread->setNeedsRedraw(); 514 m_schedulerOnImplThread->setNeedsRedraw();
487 } 515 }
488 516
517 void ThreadProxy::didDetectIdleRasterOnImplThread()
518 {
519 DCHECK(isImplThread());
520 TRACE_EVENT0("cc", "ThreadProxy::didDetectIdleRasterOnImplThread");
521
522 // Cancel pending check.
523 m_weakCheckForCompletedRasterTasksFactory.InvalidateWeakPtrs();
524 m_checkForCompletedRasterTasksPending = false;
525
526 // Perform immediate check.
527 if (m_layerTreeHostImpl)
528 m_layerTreeHostImpl->checkForCompletedRasterTasks();
529 }
530
489 void ThreadProxy::mainThreadHasStoppedFlinging() 531 void ThreadProxy::mainThreadHasStoppedFlinging()
490 { 532 {
491 if (m_inputHandlerOnImplThread) 533 if (m_inputHandlerOnImplThread)
492 m_inputHandlerOnImplThread->mainThreadHasStoppedFlinging(); 534 m_inputHandlerOnImplThread->mainThreadHasStoppedFlinging();
493 } 535 }
494 536
495 void ThreadProxy::start() 537 void ThreadProxy::start()
496 { 538 {
497 DCHECK(isMainThread()); 539 DCHECK(isMainThread());
498 DCHECK(Proxy::implThread()); 540 DCHECK(Proxy::implThread());
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 1080
1039 void ThreadProxy::layerTreeHostClosedOnImplThread(CompletionEvent* completion) 1081 void ThreadProxy::layerTreeHostClosedOnImplThread(CompletionEvent* completion)
1040 { 1082 {
1041 TRACE_EVENT0("cc", "ThreadProxy::layerTreeHostClosedOnImplThread"); 1083 TRACE_EVENT0("cc", "ThreadProxy::layerTreeHostClosedOnImplThread");
1042 DCHECK(isImplThread()); 1084 DCHECK(isImplThread());
1043 m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->res ourceProvider()); 1085 m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->res ourceProvider());
1044 m_inputHandlerOnImplThread.reset(); 1086 m_inputHandlerOnImplThread.reset();
1045 m_layerTreeHostImpl.reset(); 1087 m_layerTreeHostImpl.reset();
1046 m_schedulerOnImplThread.reset(); 1088 m_schedulerOnImplThread.reset();
1047 m_weakFactoryOnImplThread.InvalidateWeakPtrs(); 1089 m_weakFactoryOnImplThread.InvalidateWeakPtrs();
1090 m_weakCheckForCompletedRasterTasksFactory.InvalidateWeakPtrs();
1048 completion->signal(); 1091 completion->signal();
1049 } 1092 }
1050 1093
1051 void ThreadProxy::setFullRootLayerDamageOnImplThread() 1094 void ThreadProxy::setFullRootLayerDamageOnImplThread()
1052 { 1095 {
1053 DCHECK(isImplThread()); 1096 DCHECK(isImplThread());
1054 m_layerTreeHostImpl->setFullRootLayerDamage(); 1097 m_layerTreeHostImpl->setFullRootLayerDamage();
1055 } 1098 }
1056 1099
1057 size_t ThreadProxy::maxPartialTextureUpdates() const 1100 size_t ThreadProxy::maxPartialTextureUpdates() const
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 1254
1212 void ThreadProxy::renewTreePriorityOnImplThread() 1255 void ThreadProxy::renewTreePriorityOnImplThread()
1213 { 1256 {
1214 DCHECK(m_renewTreePriorityOnImplThreadPending); 1257 DCHECK(m_renewTreePriorityOnImplThreadPending);
1215 m_renewTreePriorityOnImplThreadPending = false; 1258 m_renewTreePriorityOnImplThreadPending = false;
1216 1259
1217 renewTreePriority(); 1260 renewTreePriority();
1218 } 1261 }
1219 1262
1220 } // namespace cc 1263 } // namespace cc
OLDNEW
« no previous file with comments | « cc/thread_proxy.h ('k') | cc/tile_manager.h » ('j') | cc/worker_pool.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698