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

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

Issue 577643002: Making OutputSurface a begin frame source and vsync source. (Closed)
Patch Set: Created 6 years, 3 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
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 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 322
323 void ThreadProxy::DidLoseOutputSurfaceOnImplThread() { 323 void ThreadProxy::DidLoseOutputSurfaceOnImplThread() {
324 TRACE_EVENT0("cc", "ThreadProxy::DidLoseOutputSurfaceOnImplThread"); 324 TRACE_EVENT0("cc", "ThreadProxy::DidLoseOutputSurfaceOnImplThread");
325 DCHECK(IsImplThread()); 325 DCHECK(IsImplThread());
326 Proxy::MainThreadTaskRunner()->PostTask( 326 Proxy::MainThreadTaskRunner()->PostTask(
327 FROM_HERE, 327 FROM_HERE,
328 base::Bind(&ThreadProxy::DidLoseOutputSurface, main_thread_weak_ptr_)); 328 base::Bind(&ThreadProxy::DidLoseOutputSurface, main_thread_weak_ptr_));
329 impl().scheduler->DidLoseOutputSurface(); 329 impl().scheduler->DidLoseOutputSurface();
330 } 330 }
331 331
332 void ThreadProxy::CommitVSyncParameters(base::TimeTicks timebase,
333 base::TimeDelta interval) {
334 impl().scheduler->CommitVSyncParameters(timebase, interval);
335 }
336
337 void ThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) { 332 void ThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) {
338 impl().scheduler->SetEstimatedParentDrawTime(draw_time); 333 impl().scheduler->SetEstimatedParentDrawTime(draw_time);
339 } 334 }
340 335
341 void ThreadProxy::SetMaxSwapsPendingOnImplThread(int max) { 336 void ThreadProxy::SetMaxSwapsPendingOnImplThread(int max) {
342 impl().scheduler->SetMaxSwapsPending(max); 337 impl().scheduler->SetMaxSwapsPending(max);
343 } 338 }
344 339
345 void ThreadProxy::DidSwapBuffersOnImplThread() { 340 void ThreadProxy::DidSwapBuffersOnImplThread() {
346 impl().scheduler->DidSwapBuffers(); 341 impl().scheduler->DidSwapBuffers();
347 } 342 }
348 343
349 void ThreadProxy::DidSwapBuffersCompleteOnImplThread() { 344 void ThreadProxy::DidSwapBuffersCompleteOnImplThread() {
350 TRACE_EVENT0("cc", "ThreadProxy::DidSwapBuffersCompleteOnImplThread"); 345 TRACE_EVENT0("cc", "ThreadProxy::DidSwapBuffersCompleteOnImplThread");
351 DCHECK(IsImplThread()); 346 DCHECK(IsImplThread());
352 impl().scheduler->DidSwapBuffersComplete(); 347 impl().scheduler->DidSwapBuffersComplete();
353 Proxy::MainThreadTaskRunner()->PostTask( 348 Proxy::MainThreadTaskRunner()->PostTask(
354 FROM_HERE, 349 FROM_HERE,
355 base::Bind(&ThreadProxy::DidCompleteSwapBuffers, main_thread_weak_ptr_)); 350 base::Bind(&ThreadProxy::DidCompleteSwapBuffers, main_thread_weak_ptr_));
356 } 351 }
357 352
358 BeginFrameSource* ThreadProxy::GetExternalBeginFrameSource() {
359 return impl().layer_tree_host_impl.get();
360 }
361
362 void ThreadProxy::WillBeginImplFrame(const BeginFrameArgs& args) { 353 void ThreadProxy::WillBeginImplFrame(const BeginFrameArgs& args) {
363 impl().layer_tree_host_impl->WillBeginImplFrame(args); 354 impl().layer_tree_host_impl->WillBeginImplFrame(args);
364 } 355 }
365 356
366 void ThreadProxy::OnCanDrawStateChanged(bool can_draw) { 357 void ThreadProxy::OnCanDrawStateChanged(bool can_draw) {
367 TRACE_EVENT1( 358 TRACE_EVENT1(
368 "cc", "ThreadProxy::OnCanDrawStateChanged", "can_draw", can_draw); 359 "cc", "ThreadProxy::OnCanDrawStateChanged", "can_draw", can_draw);
369 DCHECK(IsImplThread()); 360 DCHECK(IsImplThread());
370 impl().scheduler->SetCanDraw(can_draw); 361 impl().scheduler->SetCanDraw(can_draw);
371 UpdateBackgroundAnimateTicking(); 362 UpdateBackgroundAnimateTicking();
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 impl().layer_tree_host_impl->resource_provider()); 1209 impl().layer_tree_host_impl->resource_provider());
1219 completion->Signal(); 1210 completion->Signal();
1220 } 1211 }
1221 1212
1222 void ThreadProxy::InitializeOutputSurfaceOnImplThread( 1213 void ThreadProxy::InitializeOutputSurfaceOnImplThread(
1223 scoped_ptr<OutputSurface> output_surface) { 1214 scoped_ptr<OutputSurface> output_surface) {
1224 TRACE_EVENT0("cc", "ThreadProxy::InitializeOutputSurfaceOnImplThread"); 1215 TRACE_EVENT0("cc", "ThreadProxy::InitializeOutputSurfaceOnImplThread");
1225 DCHECK(IsImplThread()); 1216 DCHECK(IsImplThread());
1226 1217
1227 LayerTreeHostImpl* host_impl = impl().layer_tree_host_impl.get(); 1218 LayerTreeHostImpl* host_impl = impl().layer_tree_host_impl.get();
1219 OutputSurface* output_surface_ptr = output_surface.get();
1228 bool success = host_impl->InitializeRenderer(output_surface.Pass()); 1220 bool success = host_impl->InitializeRenderer(output_surface.Pass());
1229 RendererCapabilities capabilities; 1221 RendererCapabilities capabilities;
1230 if (success) { 1222 if (success) {
1231 capabilities = 1223 capabilities =
1232 host_impl->GetRendererCapabilities().MainThreadCapabilities(); 1224 host_impl->GetRendererCapabilities().MainThreadCapabilities();
1233 } 1225 }
1234 1226
1235 Proxy::MainThreadTaskRunner()->PostTask( 1227 Proxy::MainThreadTaskRunner()->PostTask(
1236 FROM_HERE, 1228 FROM_HERE,
1237 base::Bind(&ThreadProxy::DidInitializeOutputSurface, 1229 base::Bind(&ThreadProxy::DidInitializeOutputSurface,
1238 main_thread_weak_ptr_, 1230 main_thread_weak_ptr_,
1239 success, 1231 success,
1240 capabilities)); 1232 capabilities));
1241 1233
1242 if (success) 1234 if (success)
1243 impl().scheduler->DidCreateAndInitializeOutputSurface(); 1235 impl().scheduler->DidCreateAndInitializeOutputSurface(output_surface_ptr);
1244 } 1236 }
1245 1237
1246 void ThreadProxy::FinishGLOnImplThread(CompletionEvent* completion) { 1238 void ThreadProxy::FinishGLOnImplThread(CompletionEvent* completion) {
1247 TRACE_EVENT0("cc", "ThreadProxy::FinishGLOnImplThread"); 1239 TRACE_EVENT0("cc", "ThreadProxy::FinishGLOnImplThread");
1248 DCHECK(IsImplThread()); 1240 DCHECK(IsImplThread());
1249 if (impl().layer_tree_host_impl->output_surface()) { 1241 if (impl().layer_tree_host_impl->output_surface()) {
1250 ContextProvider* context_provider = 1242 ContextProvider* context_provider =
1251 impl().layer_tree_host_impl->output_surface()->context_provider(); 1243 impl().layer_tree_host_impl->output_surface()->context_provider();
1252 if (context_provider) 1244 if (context_provider)
1253 context_provider->ContextGL()->Finish(); 1245 context_provider->ContextGL()->Finish();
1254 } 1246 }
1255 completion->Signal(); 1247 completion->Signal();
1256 } 1248 }
1257 1249
1258 void ThreadProxy::LayerTreeHostClosedOnImplThread(CompletionEvent* completion) { 1250 void ThreadProxy::LayerTreeHostClosedOnImplThread(CompletionEvent* completion) {
1259 TRACE_EVENT0("cc", "ThreadProxy::LayerTreeHostClosedOnImplThread"); 1251 TRACE_EVENT0("cc", "ThreadProxy::LayerTreeHostClosedOnImplThread");
1260 DCHECK(IsImplThread()); 1252 DCHECK(IsImplThread());
1261 DCHECK(IsMainThreadBlocked()); 1253 DCHECK(IsMainThreadBlocked());
1262 layer_tree_host()->DeleteContentsTexturesOnImplThread( 1254 layer_tree_host()->DeleteContentsTexturesOnImplThread(
1263 impl().layer_tree_host_impl->resource_provider()); 1255 impl().layer_tree_host_impl->resource_provider());
1264 impl().current_resource_update_controller.reset(); 1256 impl().current_resource_update_controller.reset();
1265 impl().layer_tree_host_impl->SetNeedsBeginFrames(false);
1266 impl().scheduler.reset(); 1257 impl().scheduler.reset();
1267 impl().layer_tree_host_impl.reset(); 1258 impl().layer_tree_host_impl.reset();
1268 impl().weak_factory.InvalidateWeakPtrs(); 1259 impl().weak_factory.InvalidateWeakPtrs();
1269 // We need to explicitly cancel the notifier, since it isn't using weak ptrs. 1260 // We need to explicitly cancel the notifier, since it isn't using weak ptrs.
1270 // TODO(vmpstr): We should see if we can make it use weak ptrs and still keep 1261 // TODO(vmpstr): We should see if we can make it use weak ptrs and still keep
1271 // the convention of having a weak ptr factory initialized last. Alternatively 1262 // the convention of having a weak ptr factory initialized last. Alternatively
1272 // we should moved the notifier (and RenewTreePriority) to LTHI. See 1263 // we should moved the notifier (and RenewTreePriority) to LTHI. See
1273 // crbug.com/411972 1264 // crbug.com/411972
1274 impl().smoothness_priority_expiration_notifier.Cancel(); 1265 impl().smoothness_priority_expiration_notifier.Cancel();
1275 impl().contents_texture_manager = NULL; 1266 impl().contents_texture_manager = NULL;
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 1404
1414 impl().timing_history.DidActivateSyncTree(); 1405 impl().timing_history.DidActivateSyncTree();
1415 } 1406 }
1416 1407
1417 void ThreadProxy::DidManageTiles() { 1408 void ThreadProxy::DidManageTiles() {
1418 DCHECK(IsImplThread()); 1409 DCHECK(IsImplThread());
1419 impl().scheduler->DidManageTiles(); 1410 impl().scheduler->DidManageTiles();
1420 } 1411 }
1421 1412
1422 } // namespace cc 1413 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/thread_proxy.h ('k') | content/browser/android/in_process/synchronous_compositor_output_surface.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698