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

Side by Side Diff: content/browser/compositor/gpu_process_transport_factory.cc

Issue 1545243002: Convert Pass()→std::move() in //content/browser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 12 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/compositor/gpu_process_transport_factory.h" 5 #include "content/browser/compositor/gpu_process_transport_factory.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility>
8 9
9 #include "base/bind.h" 10 #include "base/bind.h"
10 #include "base/command_line.h" 11 #include "base/command_line.h"
11 #include "base/location.h" 12 #include "base/location.h"
12 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
13 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
14 #include "base/thread_task_runner_handle.h" 15 #include "base/thread_task_runner_handle.h"
15 #include "base/threading/simple_thread.h" 16 #include "base/threading/simple_thread.h"
16 #include "base/threading/thread.h" 17 #include "base/threading/thread.h"
17 #include "build/build_config.h" 18 #include "build/build_config.h"
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 } 180 }
180 #elif defined(OS_MACOSX) 181 #elif defined(OS_MACOSX)
181 // Overlays are only supported through the remote layer API. 182 // Overlays are only supported through the remote layer API.
182 if (ui::RemoteLayerAPISupported()) { 183 if (ui::RemoteLayerAPISupported()) {
183 validator.reset(new BrowserCompositorOverlayCandidateValidatorMac(widget)); 184 validator.reset(new BrowserCompositorOverlayCandidateValidatorMac(widget));
184 } 185 }
185 #elif defined(OS_ANDROID) 186 #elif defined(OS_ANDROID)
186 validator.reset(new BrowserCompositorOverlayCandidateValidatorAndroid()); 187 validator.reset(new BrowserCompositorOverlayCandidateValidatorAndroid());
187 #endif 188 #endif
188 189
189 return validator.Pass(); 190 return validator;
190 } 191 }
191 192
192 static bool ShouldCreateGpuOutputSurface(ui::Compositor* compositor) { 193 static bool ShouldCreateGpuOutputSurface(ui::Compositor* compositor) {
193 #if defined(MOJO_RUNNER_CLIENT) 194 #if defined(MOJO_RUNNER_CLIENT)
194 // Chrome running as a mojo app currently can only use software compositing. 195 // Chrome running as a mojo app currently can only use software compositing.
195 // TODO(rjkroege): http://crbug.com/548451 196 // TODO(rjkroege): http://crbug.com/548451
196 if (IsRunningInMojoShell()) { 197 if (IsRunningInMojoShell()) {
197 return false; 198 return false;
198 } 199 }
199 #endif 200 #endif
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 CreateOverlayCandidateValidator(compositor->widget()), target, 345 CreateOverlayCandidateValidator(compositor->widget()), target,
345 format, BrowserGpuMemoryBufferManager::current())); 346 format, BrowserGpuMemoryBufferManager::current()));
346 } else { 347 } else {
347 scoped_ptr<BrowserCompositorOverlayCandidateValidator> validator; 348 scoped_ptr<BrowserCompositorOverlayCandidateValidator> validator;
348 #if !defined(OS_MACOSX) 349 #if !defined(OS_MACOSX)
349 // Overlays are only supported on surfaceless output surfaces on Mac. 350 // Overlays are only supported on surfaceless output surfaces on Mac.
350 validator = CreateOverlayCandidateValidator(compositor->widget()); 351 validator = CreateOverlayCandidateValidator(compositor->widget());
351 #endif 352 #endif
352 surface = make_scoped_ptr(new GpuBrowserCompositorOutputSurface( 353 surface = make_scoped_ptr(new GpuBrowserCompositorOutputSurface(
353 context_provider, shared_worker_context_provider_, 354 context_provider, shared_worker_context_provider_,
354 compositor->vsync_manager(), validator.Pass())); 355 compositor->vsync_manager(), std::move(validator)));
355 } 356 }
356 } 357 }
357 358
358 // TODO(piman): Use GpuSurfaceTracker to map ids to surfaces instead of an 359 // TODO(piman): Use GpuSurfaceTracker to map ids to surfaces instead of an
359 // output_surface_map_ here. 360 // output_surface_map_ here.
360 output_surface_map_.AddWithID(surface.get(), data->surface_id); 361 output_surface_map_.AddWithID(surface.get(), data->surface_id);
361 data->surface = surface.get(); 362 data->surface = surface.get();
362 if (data->reflector) 363 if (data->reflector)
363 data->reflector->OnSourceSurfaceReady(data->surface); 364 data->reflector->OnSourceSurfaceReady(data->surface);
364 365
365 if (!UseSurfacesEnabled()) { 366 if (!UseSurfacesEnabled()) {
366 compositor->SetOutputSurface(surface.Pass()); 367 compositor->SetOutputSurface(std::move(surface));
367 return; 368 return;
368 } 369 }
369 370
370 // This gets a bit confusing. Here we have a ContextProvider in the |surface| 371 // This gets a bit confusing. Here we have a ContextProvider in the |surface|
371 // configured to render directly to this widget. We need to make an 372 // configured to render directly to this widget. We need to make an
372 // OnscreenDisplayClient associated with that context, then return a 373 // OnscreenDisplayClient associated with that context, then return a
373 // SurfaceDisplayOutputSurface set up to draw to the display's surface. 374 // SurfaceDisplayOutputSurface set up to draw to the display's surface.
374 cc::SurfaceManager* manager = surface_manager_.get(); 375 cc::SurfaceManager* manager = surface_manager_.get();
375 scoped_ptr<cc::OnscreenDisplayClient> display_client( 376 scoped_ptr<cc::OnscreenDisplayClient> display_client(
376 new cc::OnscreenDisplayClient( 377 new cc::OnscreenDisplayClient(
377 surface.Pass(), manager, HostSharedBitmapManager::current(), 378 std::move(surface), manager, HostSharedBitmapManager::current(),
378 BrowserGpuMemoryBufferManager::current(), 379 BrowserGpuMemoryBufferManager::current(),
379 compositor->GetRendererSettings(), compositor->task_runner())); 380 compositor->GetRendererSettings(), compositor->task_runner()));
380 381
381 scoped_ptr<cc::SurfaceDisplayOutputSurface> output_surface( 382 scoped_ptr<cc::SurfaceDisplayOutputSurface> output_surface(
382 new cc::SurfaceDisplayOutputSurface( 383 new cc::SurfaceDisplayOutputSurface(
383 manager, compositor->surface_id_allocator(), context_provider, 384 manager, compositor->surface_id_allocator(), context_provider,
384 shared_worker_context_provider_)); 385 shared_worker_context_provider_));
385 display_client->set_surface_output_surface(output_surface.get()); 386 display_client->set_surface_output_surface(output_surface.get());
386 output_surface->set_display_client(display_client.get()); 387 output_surface->set_display_client(display_client.get());
387 display_client->display()->Resize(compositor->size()); 388 display_client->display()->Resize(compositor->size());
388 data->display_client = display_client.Pass(); 389 data->display_client = std::move(display_client);
389 compositor->SetOutputSurface(output_surface.Pass()); 390 compositor->SetOutputSurface(std::move(output_surface));
390 } 391 }
391 392
392 scoped_ptr<ui::Reflector> GpuProcessTransportFactory::CreateReflector( 393 scoped_ptr<ui::Reflector> GpuProcessTransportFactory::CreateReflector(
393 ui::Compositor* source_compositor, 394 ui::Compositor* source_compositor,
394 ui::Layer* target_layer) { 395 ui::Layer* target_layer) {
395 PerCompositorData* source_data = per_compositor_data_[source_compositor]; 396 PerCompositorData* source_data = per_compositor_data_[source_compositor];
396 DCHECK(source_data); 397 DCHECK(source_data);
397 398
398 scoped_ptr<ReflectorImpl> reflector( 399 scoped_ptr<ReflectorImpl> reflector(
399 new ReflectorImpl(source_compositor, target_layer)); 400 new ReflectorImpl(source_compositor, target_layer));
400 source_data->reflector = reflector.get(); 401 source_data->reflector = reflector.get();
401 if (BrowserCompositorOutputSurface* source_surface = source_data->surface) 402 if (BrowserCompositorOutputSurface* source_surface = source_data->surface)
402 reflector->OnSourceSurfaceReady(source_surface); 403 reflector->OnSourceSurfaceReady(source_surface);
403 return reflector.Pass(); 404 return std::move(reflector);
404 } 405 }
405 406
406 void GpuProcessTransportFactory::RemoveReflector(ui::Reflector* reflector) { 407 void GpuProcessTransportFactory::RemoveReflector(ui::Reflector* reflector) {
407 ReflectorImpl* reflector_impl = static_cast<ReflectorImpl*>(reflector); 408 ReflectorImpl* reflector_impl = static_cast<ReflectorImpl*>(reflector);
408 PerCompositorData* data = 409 PerCompositorData* data =
409 per_compositor_data_[reflector_impl->mirrored_compositor()]; 410 per_compositor_data_[reflector_impl->mirrored_compositor()];
410 DCHECK(data); 411 DCHECK(data);
411 data->reflector->Shutdown(); 412 data->reflector->Shutdown();
412 data->reflector = nullptr; 413 data->reflector = nullptr;
413 } 414 }
(...skipping 11 matching lines...) Expand all
425 if (data->surface_id) 426 if (data->surface_id)
426 GpuSurfaceTracker::Get()->RemoveSurface(data->surface_id); 427 GpuSurfaceTracker::Get()->RemoveSurface(data->surface_id);
427 delete data; 428 delete data;
428 per_compositor_data_.erase(it); 429 per_compositor_data_.erase(it);
429 if (per_compositor_data_.empty()) { 430 if (per_compositor_data_.empty()) {
430 // Destroying the GLHelper may cause some async actions to be cancelled, 431 // Destroying the GLHelper may cause some async actions to be cancelled,
431 // causing things to request a new GLHelper. Due to crbug.com/176091 the 432 // causing things to request a new GLHelper. Due to crbug.com/176091 the
432 // GLHelper created in this case would be lost/leaked if we just reset() 433 // GLHelper created in this case would be lost/leaked if we just reset()
433 // on the |gl_helper_| variable directly. So instead we call reset() on a 434 // on the |gl_helper_| variable directly. So instead we call reset() on a
434 // local scoped_ptr. 435 // local scoped_ptr.
435 scoped_ptr<GLHelper> helper = gl_helper_.Pass(); 436 scoped_ptr<GLHelper> helper = std::move(gl_helper_);
436 437
437 // If there are any observer left at this point, make sure they clean up 438 // If there are any observer left at this point, make sure they clean up
438 // before we destroy the GLHelper. 439 // before we destroy the GLHelper.
439 FOR_EACH_OBSERVER( 440 FOR_EACH_OBSERVER(
440 ImageTransportFactoryObserver, observer_list_, OnLostResources()); 441 ImageTransportFactoryObserver, observer_list_, OnLostResources());
441 442
442 helper.reset(); 443 helper.reset();
443 DCHECK(!gl_helper_) << "Destroying the GLHelper should not cause a new " 444 DCHECK(!gl_helper_) << "Destroying the GLHelper should not cause a new "
444 "GLHelper to be created."; 445 "GLHelper to be created.";
445 } 446 }
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 GURL url("chrome://gpu/GpuProcessTransportFactory::CreateContextCommon"); 626 GURL url("chrome://gpu/GpuProcessTransportFactory::CreateContextCommon");
626 scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context( 627 scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context(
627 new WebGraphicsContext3DCommandBufferImpl( 628 new WebGraphicsContext3DCommandBufferImpl(
628 surface_id, 629 surface_id,
629 url, 630 url,
630 gpu_channel_host.get(), 631 gpu_channel_host.get(),
631 attrs, 632 attrs,
632 lose_context_when_out_of_memory, 633 lose_context_when_out_of_memory,
633 WebGraphicsContext3DCommandBufferImpl::SharedMemoryLimits(), 634 WebGraphicsContext3DCommandBufferImpl::SharedMemoryLimits(),
634 NULL)); 635 NULL));
635 return context.Pass(); 636 return context;
636 } 637 }
637 638
638 void GpuProcessTransportFactory::OnLostMainThreadSharedContextInsideCallback() { 639 void GpuProcessTransportFactory::OnLostMainThreadSharedContextInsideCallback() {
639 base::ThreadTaskRunnerHandle::Get()->PostTask( 640 base::ThreadTaskRunnerHandle::Get()->PostTask(
640 FROM_HERE, 641 FROM_HERE,
641 base::Bind(&GpuProcessTransportFactory::OnLostMainThreadSharedContext, 642 base::Bind(&GpuProcessTransportFactory::OnLostMainThreadSharedContext,
642 callback_factory_.GetWeakPtr())); 643 callback_factory_.GetWeakPtr()));
643 } 644 }
644 645
645 void GpuProcessTransportFactory::OnLostMainThreadSharedContext() { 646 void GpuProcessTransportFactory::OnLostMainThreadSharedContext() {
646 LOG(ERROR) << "Lost UI shared context."; 647 LOG(ERROR) << "Lost UI shared context.";
647 648
648 // Keep old resources around while we call the observers, but ensure that 649 // Keep old resources around while we call the observers, but ensure that
649 // new resources are created if needed. 650 // new resources are created if needed.
650 // Kill shared contexts for both threads in tandem so they are always in 651 // Kill shared contexts for both threads in tandem so they are always in
651 // the same share group. 652 // the same share group.
652 scoped_refptr<cc::ContextProvider> lost_shared_main_thread_contexts = 653 scoped_refptr<cc::ContextProvider> lost_shared_main_thread_contexts =
653 shared_main_thread_contexts_; 654 shared_main_thread_contexts_;
654 shared_main_thread_contexts_ = NULL; 655 shared_main_thread_contexts_ = NULL;
655 656
656 scoped_ptr<GLHelper> lost_gl_helper = gl_helper_.Pass(); 657 scoped_ptr<GLHelper> lost_gl_helper = std::move(gl_helper_);
657 658
658 FOR_EACH_OBSERVER(ImageTransportFactoryObserver, 659 FOR_EACH_OBSERVER(ImageTransportFactoryObserver,
659 observer_list_, 660 observer_list_,
660 OnLostResources()); 661 OnLostResources());
661 662
662 // Kill things that use the shared context before killing the shared context. 663 // Kill things that use the shared context before killing the shared context.
663 lost_gl_helper.reset(); 664 lost_gl_helper.reset();
664 lost_shared_main_thread_contexts = NULL; 665 lost_shared_main_thread_contexts = NULL;
665 } 666 }
666 667
667 } // namespace content 668 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698