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

Side by Side Diff: cc/trees/thread_proxy.cc

Issue 267783004: Refactoring the way begin frame sources inside scheduler work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Scheduler tests now pass and the code is cleaner. Created 6 years, 6 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
« no previous file with comments | « cc/trees/thread_proxy.h ('k') | no next file » | 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/trees/thread_proxy.h" 5 #include "cc/trees/thread_proxy.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 &completion, 173 &completion,
174 visible)); 174 visible));
175 completion.Wait(); 175 completion.Wait();
176 } 176 }
177 177
178 void ThreadProxy::SetVisibleOnImplThread(CompletionEvent* completion, 178 void ThreadProxy::SetVisibleOnImplThread(CompletionEvent* completion,
179 bool visible) { 179 bool visible) {
180 TRACE_EVENT0("cc", "ThreadProxy::SetVisibleOnImplThread"); 180 TRACE_EVENT0("cc", "ThreadProxy::SetVisibleOnImplThread");
181 impl().layer_tree_host_impl->SetVisible(visible); 181 impl().layer_tree_host_impl->SetVisible(visible);
182 impl().scheduler->SetVisible(visible); 182 impl().scheduler->SetVisible(visible);
183 UpdateBackgroundAnimateTicking();
184 completion->Signal(); 183 completion->Signal();
185 } 184 }
186 185
187 void ThreadProxy::UpdateBackgroundAnimateTicking() {
188 bool should_background_tick =
189 !impl().scheduler->WillDrawIfNeeded() &&
190 impl().layer_tree_host_impl->active_tree()->root_layer();
191 impl().layer_tree_host_impl->UpdateBackgroundAnimateTicking(
192 should_background_tick);
193 if (should_background_tick)
194 impl().animations_frozen_until_next_draw = false;
195 }
196
197 void ThreadProxy::DoCreateAndInitializeOutputSurface() { 186 void ThreadProxy::DoCreateAndInitializeOutputSurface() {
198 TRACE_EVENT0("cc", "ThreadProxy::DoCreateAndInitializeOutputSurface"); 187 TRACE_EVENT0("cc", "ThreadProxy::DoCreateAndInitializeOutputSurface");
199 DCHECK(IsMainThread()); 188 DCHECK(IsMainThread());
200 189
201 scoped_ptr<OutputSurface> output_surface = 190 scoped_ptr<OutputSurface> output_surface =
202 layer_tree_host()->CreateOutputSurface(); 191 layer_tree_host()->CreateOutputSurface();
203 192
204 RendererCapabilities capabilities; 193 RendererCapabilities capabilities;
205 bool success = !!output_surface; 194 bool success = !!output_surface;
206 if (success) { 195 if (success) {
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 } 293 }
305 294
306 void ThreadProxy::CheckOutputSurfaceStatusOnImplThread() { 295 void ThreadProxy::CheckOutputSurfaceStatusOnImplThread() {
307 TRACE_EVENT0("cc", "ThreadProxy::CheckOutputSurfaceStatusOnImplThread"); 296 TRACE_EVENT0("cc", "ThreadProxy::CheckOutputSurfaceStatusOnImplThread");
308 DCHECK(IsImplThread()); 297 DCHECK(IsImplThread());
309 if (!impl().layer_tree_host_impl->IsContextLost()) 298 if (!impl().layer_tree_host_impl->IsContextLost())
310 return; 299 return;
311 impl().scheduler->DidLoseOutputSurface(); 300 impl().scheduler->DidLoseOutputSurface();
312 } 301 }
313 302
314 void ThreadProxy::CommitVSyncParameters(base::TimeTicks timebase,
315 base::TimeDelta interval) {
316 impl().scheduler->CommitVSyncParameters(timebase, interval);
317 }
318
319 void ThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) { 303 void ThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) {
320 impl().scheduler->SetEstimatedParentDrawTime(draw_time); 304 impl().scheduler->SetEstimatedParentDrawTime(draw_time);
321 } 305 }
322 306
323 void ThreadProxy::SetMaxSwapsPendingOnImplThread(int max) { 307 void ThreadProxy::SetMaxSwapsPendingOnImplThread(int max) {
324 impl().scheduler->SetMaxSwapsPending(max); 308 impl().scheduler->SetMaxSwapsPending(max);
325 } 309 }
326 310
327 void ThreadProxy::DidSwapBuffersOnImplThread() { 311 void ThreadProxy::DidSwapBuffersOnImplThread() {
328 impl().scheduler->DidSwapBuffers(); 312 impl().scheduler->DidSwapBuffers();
329 } 313 }
330 314
331 void ThreadProxy::DidSwapBuffersCompleteOnImplThread() { 315 void ThreadProxy::DidSwapBuffersCompleteOnImplThread() {
332 TRACE_EVENT0("cc", "ThreadProxy::DidSwapBuffersCompleteOnImplThread"); 316 TRACE_EVENT0("cc", "ThreadProxy::DidSwapBuffersCompleteOnImplThread");
333 DCHECK(IsImplThread());
334 impl().scheduler->DidSwapBuffersComplete(); 317 impl().scheduler->DidSwapBuffersComplete();
335 Proxy::MainThreadTaskRunner()->PostTask( 318 Proxy::MainThreadTaskRunner()->PostTask(
336 FROM_HERE, 319 FROM_HERE,
337 base::Bind(&ThreadProxy::DidCompleteSwapBuffers, main_thread_weak_ptr_)); 320 base::Bind(&ThreadProxy::DidCompleteSwapBuffers, main_thread_weak_ptr_));
338 } 321 }
339 322
340 void ThreadProxy::SetNeedsBeginFrame(bool enable) {
341 TRACE_EVENT1("cc", "ThreadProxy::SetNeedsBeginFrame", "enable", enable);
342 impl().layer_tree_host_impl->SetNeedsBeginFrame(enable);
343 UpdateBackgroundAnimateTicking();
344 }
345
346 void ThreadProxy::BeginFrame(const BeginFrameArgs& args) {
347 impl().scheduler->BeginFrame(args);
348 }
349
350 void ThreadProxy::WillBeginImplFrame(const BeginFrameArgs& args) { 323 void ThreadProxy::WillBeginImplFrame(const BeginFrameArgs& args) {
351 impl().layer_tree_host_impl->WillBeginImplFrame(args); 324 impl().layer_tree_host_impl->WillBeginImplFrame(args);
352 } 325 }
353 326
354 void ThreadProxy::OnCanDrawStateChanged(bool can_draw) { 327 void ThreadProxy::OnCanDrawStateChanged(bool can_draw) {
355 TRACE_EVENT1( 328 TRACE_EVENT1(
356 "cc", "ThreadProxy::OnCanDrawStateChanged", "can_draw", can_draw); 329 "cc", "ThreadProxy::OnCanDrawStateChanged", "can_draw", can_draw);
357 DCHECK(IsImplThread()); 330 DCHECK(IsImplThread());
358 impl().scheduler->SetCanDraw(can_draw); 331 impl().scheduler->SetCanDraw(can_draw);
359 UpdateBackgroundAnimateTicking();
360 } 332 }
361 333
362 void ThreadProxy::NotifyReadyToActivate() { 334 void ThreadProxy::NotifyReadyToActivate() {
363 TRACE_EVENT0("cc", "ThreadProxy::NotifyReadyToActivate"); 335 TRACE_EVENT0("cc", "ThreadProxy::NotifyReadyToActivate");
364 impl().scheduler->NotifyReadyToActivate(); 336 impl().scheduler->NotifyReadyToActivate();
365 } 337 }
366 338
367 void ThreadProxy::SetNeedsCommitOnImplThread() { 339 void ThreadProxy::SetNeedsCommitOnImplThread() {
368 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsCommitOnImplThread"); 340 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsCommitOnImplThread");
369 DCHECK(IsImplThread()); 341 DCHECK(IsImplThread());
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 impl().commit_completion_event->Signal(); 948 impl().commit_completion_event->Signal();
977 impl().commit_completion_event = NULL; 949 impl().commit_completion_event = NULL;
978 } 950 }
979 951
980 // Delay this step until afer the main thread has been released as it's 952 // Delay this step until afer the main thread has been released as it's
981 // often a good bit of work to update the tree and prepare the new frame. 953 // often a good bit of work to update the tree and prepare the new frame.
982 impl().layer_tree_host_impl->CommitComplete(); 954 impl().layer_tree_host_impl->CommitComplete();
983 955
984 SetInputThrottledUntilCommitOnImplThread(false); 956 SetInputThrottledUntilCommitOnImplThread(false);
985 957
986 UpdateBackgroundAnimateTicking();
987
988 impl().next_frame_is_newly_committed_frame = true; 958 impl().next_frame_is_newly_committed_frame = true;
989 959
990 impl().timing_history.DidCommit(); 960 impl().timing_history.DidCommit();
991 } 961 }
992 962
993 void ThreadProxy::ScheduledActionUpdateVisibleTiles() { 963 void ThreadProxy::ScheduledActionUpdateVisibleTiles() {
994 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionUpdateVisibleTiles"); 964 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionUpdateVisibleTiles");
995 DCHECK(IsImplThread()); 965 DCHECK(IsImplThread());
996 impl().layer_tree_host_impl->UpdateVisibleTiles(); 966 impl().layer_tree_host_impl->UpdateVisibleTiles();
997 } 967 }
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 settings.timeout_and_draw_when_animation_checkerboards; 1215 settings.timeout_and_draw_when_animation_checkerboards;
1246 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1216 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ =
1247 settings.maximum_number_of_failed_draws_before_draw_is_forced_; 1217 settings.maximum_number_of_failed_draws_before_draw_is_forced_;
1248 scheduler_settings.using_synchronous_renderer_compositor = 1218 scheduler_settings.using_synchronous_renderer_compositor =
1249 settings.using_synchronous_renderer_compositor; 1219 settings.using_synchronous_renderer_compositor;
1250 scheduler_settings.throttle_frame_production = 1220 scheduler_settings.throttle_frame_production =
1251 settings.throttle_frame_production; 1221 settings.throttle_frame_production;
1252 impl().scheduler = Scheduler::Create(this, 1222 impl().scheduler = Scheduler::Create(this,
1253 scheduler_settings, 1223 scheduler_settings,
1254 impl().layer_tree_host_id, 1224 impl().layer_tree_host_id,
1225 impl().layer_tree_host_impl.get(),
1255 ImplThreadTaskRunner()); 1226 ImplThreadTaskRunner());
1256 impl().scheduler->SetVisible(impl().layer_tree_host_impl->visible()); 1227 impl().scheduler->SetVisible(impl().layer_tree_host_impl->visible());
1257 1228
1258 impl_thread_weak_ptr_ = impl().weak_factory.GetWeakPtr(); 1229 impl_thread_weak_ptr_ = impl().weak_factory.GetWeakPtr();
1259 completion->Signal(); 1230 completion->Signal();
1260 } 1231 }
1261 1232
1262 void ThreadProxy::InitializeOutputSurfaceOnImplThread( 1233 void ThreadProxy::InitializeOutputSurfaceOnImplThread(
1263 CompletionEvent* completion, 1234 CompletionEvent* completion,
1264 scoped_ptr<OutputSurface> output_surface, 1235 scoped_ptr<OutputSurface> output_surface,
(...skipping 28 matching lines...) Expand all
1293 impl().layer_tree_host_impl->resource_provider()->Finish(); 1264 impl().layer_tree_host_impl->resource_provider()->Finish();
1294 completion->Signal(); 1265 completion->Signal();
1295 } 1266 }
1296 1267
1297 void ThreadProxy::LayerTreeHostClosedOnImplThread(CompletionEvent* completion) { 1268 void ThreadProxy::LayerTreeHostClosedOnImplThread(CompletionEvent* completion) {
1298 TRACE_EVENT0("cc", "ThreadProxy::LayerTreeHostClosedOnImplThread"); 1269 TRACE_EVENT0("cc", "ThreadProxy::LayerTreeHostClosedOnImplThread");
1299 DCHECK(IsImplThread()); 1270 DCHECK(IsImplThread());
1300 layer_tree_host()->DeleteContentsTexturesOnImplThread( 1271 layer_tree_host()->DeleteContentsTexturesOnImplThread(
1301 impl().layer_tree_host_impl->resource_provider()); 1272 impl().layer_tree_host_impl->resource_provider());
1302 impl().current_resource_update_controller.reset(); 1273 impl().current_resource_update_controller.reset();
1303 impl().layer_tree_host_impl->SetNeedsBeginFrame(false);
1304 impl().scheduler.reset(); 1274 impl().scheduler.reset();
1305 impl().layer_tree_host_impl.reset(); 1275 impl().layer_tree_host_impl.reset();
1306 impl().weak_factory.InvalidateWeakPtrs(); 1276 impl().weak_factory.InvalidateWeakPtrs();
1307 impl().contents_texture_manager = NULL; 1277 impl().contents_texture_manager = NULL;
1308 completion->Signal(); 1278 completion->Signal();
1309 } 1279 }
1310 1280
1311 size_t ThreadProxy::MaxPartialTextureUpdates() const { 1281 size_t ThreadProxy::MaxPartialTextureUpdates() const {
1312 return ResourceUpdateController::MaxPartialTextureUpdates(); 1282 return ResourceUpdateController::MaxPartialTextureUpdates();
1313 } 1283 }
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1481 DCHECK(!impl().layer_tree_host_impl->pending_tree()); 1451 DCHECK(!impl().layer_tree_host_impl->pending_tree());
1482 1452
1483 if (impl().completion_event_for_commit_held_on_tree_activation) { 1453 if (impl().completion_event_for_commit_held_on_tree_activation) {
1484 TRACE_EVENT_INSTANT0( 1454 TRACE_EVENT_INSTANT0(
1485 "cc", "ReleaseCommitbyActivation", TRACE_EVENT_SCOPE_THREAD); 1455 "cc", "ReleaseCommitbyActivation", TRACE_EVENT_SCOPE_THREAD);
1486 DCHECK(impl().layer_tree_host_impl->settings().impl_side_painting); 1456 DCHECK(impl().layer_tree_host_impl->settings().impl_side_painting);
1487 impl().completion_event_for_commit_held_on_tree_activation->Signal(); 1457 impl().completion_event_for_commit_held_on_tree_activation->Signal();
1488 impl().completion_event_for_commit_held_on_tree_activation = NULL; 1458 impl().completion_event_for_commit_held_on_tree_activation = NULL;
1489 } 1459 }
1490 1460
1491 UpdateBackgroundAnimateTicking();
1492
1493 impl().timing_history.DidActivatePendingTree(); 1461 impl().timing_history.DidActivatePendingTree();
1494 } 1462 }
1495 1463
1496 void ThreadProxy::DidManageTiles() { 1464 void ThreadProxy::DidManageTiles() {
1497 DCHECK(IsImplThread()); 1465 DCHECK(IsImplThread());
1498 impl().scheduler->DidManageTiles(); 1466 impl().scheduler->DidManageTiles();
1499 } 1467 }
1500 1468
1501 } // namespace cc 1469 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/thread_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698