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

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

Issue 2036563002: Delete OnscreenDisplayClient and TopLevelDisplayClient. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: onscreendisplayclient: webview-scoped-allow-gl-for-hardwarerenderer-constructor Created 4 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
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 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/location.h" 12 #include "base/location.h"
13 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
14 #include "base/profiler/scoped_tracker.h" 14 #include "base/profiler/scoped_tracker.h"
15 #include "base/single_thread_task_runner.h" 15 #include "base/single_thread_task_runner.h"
16 #include "base/threading/simple_thread.h" 16 #include "base/threading/simple_thread.h"
17 #include "base/threading/thread.h" 17 #include "base/threading/thread.h"
18 #include "base/threading/thread_task_runner_handle.h" 18 #include "base/threading/thread_task_runner_handle.h"
19 #include "build/build_config.h" 19 #include "build/build_config.h"
20 #include "cc/base/histograms.h" 20 #include "cc/base/histograms.h"
21 #include "cc/output/compositor_frame.h" 21 #include "cc/output/compositor_frame.h"
22 #include "cc/output/output_surface.h" 22 #include "cc/output/output_surface.h"
23 #include "cc/output/vulkan_in_process_context_provider.h" 23 #include "cc/output/vulkan_in_process_context_provider.h"
24 #include "cc/raster/single_thread_task_graph_runner.h" 24 #include "cc/raster/single_thread_task_graph_runner.h"
25 #include "cc/raster/task_graph_runner.h" 25 #include "cc/raster/task_graph_runner.h"
26 #include "cc/surfaces/onscreen_display_client.h" 26 #include "cc/surfaces/display.h"
27 #include "cc/surfaces/surface_display_output_surface.h" 27 #include "cc/surfaces/surface_display_output_surface.h"
28 #include "cc/surfaces/surface_manager.h" 28 #include "cc/surfaces/surface_manager.h"
29 #include "components/display_compositor/compositor_overlay_candidate_validator.h " 29 #include "components/display_compositor/compositor_overlay_candidate_validator.h "
30 #include "components/display_compositor/gl_helper.h" 30 #include "components/display_compositor/gl_helper.h"
31 #include "content/browser/compositor/browser_compositor_output_surface.h" 31 #include "content/browser/compositor/browser_compositor_output_surface.h"
32 #include "content/browser/compositor/gpu_browser_compositor_output_surface.h" 32 #include "content/browser/compositor/gpu_browser_compositor_output_surface.h"
33 #include "content/browser/compositor/gpu_surfaceless_browser_compositor_output_s urface.h" 33 #include "content/browser/compositor/gpu_surfaceless_browser_compositor_output_s urface.h"
34 #include "content/browser/compositor/offscreen_browser_compositor_output_surface .h" 34 #include "content/browser/compositor/offscreen_browser_compositor_output_surface .h"
35 #include "content/browser/compositor/reflector_impl.h" 35 #include "content/browser/compositor/reflector_impl.h"
36 #include "content/browser/compositor/software_browser_compositor_output_surface. h" 36 #include "content/browser/compositor/software_browser_compositor_output_surface. h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 143 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
144 return command_line->HasSwitch(switches::kDisableMacOverlays); 144 return command_line->HasSwitch(switches::kDisableMacOverlays);
145 } 145 }
146 #endif 146 #endif
147 147
148 } // namespace 148 } // namespace
149 149
150 namespace content { 150 namespace content {
151 151
152 struct GpuProcessTransportFactory::PerCompositorData { 152 struct GpuProcessTransportFactory::PerCompositorData {
153 gpu::SurfaceHandle surface_handle; 153 gpu::SurfaceHandle surface_handle = gpu::kNullSurfaceHandle;
154 BrowserCompositorOutputSurface* surface; 154 BrowserCompositorOutputSurface* display_output_surface = nullptr;
155 ReflectorImpl* reflector; 155 ReflectorImpl* reflector = nullptr;
156 std::unique_ptr<cc::OnscreenDisplayClient> display_client; 156 std::unique_ptr<cc::Display> display;
157 bool output_is_secure = false; 157 bool output_is_secure = false;
158
159 PerCompositorData()
160 : surface_handle(gpu::kNullSurfaceHandle),
161 surface(nullptr),
162 reflector(nullptr) {}
163 }; 158 };
164 159
165 GpuProcessTransportFactory::GpuProcessTransportFactory() 160 GpuProcessTransportFactory::GpuProcessTransportFactory()
166 : next_surface_id_namespace_(1u), 161 : next_surface_id_namespace_(1u),
167 task_graph_runner_(new cc::SingleThreadTaskGraphRunner), 162 task_graph_runner_(new cc::SingleThreadTaskGraphRunner),
168 callback_factory_(this) { 163 callback_factory_(this) {
169 cc::SetClientNameForMetrics("Browser"); 164 cc::SetClientNameForMetrics("Browser");
170 165
171 surface_manager_ = base::WrapUnique(new cc::SurfaceManager); 166 surface_manager_ = base::WrapUnique(new cc::SurfaceManager);
172 167
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 return GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor(); 269 return GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor();
275 } 270 }
276 271
277 void GpuProcessTransportFactory::CreateOutputSurface( 272 void GpuProcessTransportFactory::CreateOutputSurface(
278 base::WeakPtr<ui::Compositor> compositor) { 273 base::WeakPtr<ui::Compositor> compositor) {
279 DCHECK(!!compositor); 274 DCHECK(!!compositor);
280 PerCompositorData* data = per_compositor_data_[compositor.get()]; 275 PerCompositorData* data = per_compositor_data_[compositor.get()];
281 if (!data) { 276 if (!data) {
282 data = CreatePerCompositorData(compositor.get()); 277 data = CreatePerCompositorData(compositor.get());
283 } else { 278 } else {
284 data->surface = nullptr; 279 // TODO(danakj): We can destroy the |data->display| here when the compositor
280 // destroys its OutputSurface before calling back here.
281 data->display_output_surface = nullptr;
285 } 282 }
286 283
287 #if defined(OS_WIN) 284 #if defined(OS_WIN)
288 gfx::RenderingWindowManager::GetInstance()->UnregisterParent( 285 gfx::RenderingWindowManager::GetInstance()->UnregisterParent(
289 compositor->widget()); 286 compositor->widget());
290 #endif 287 #endif
291 288
292 const bool use_vulkan = static_cast<bool>(SharedVulkanContextProvider()); 289 const bool use_vulkan = static_cast<bool>(SharedVulkanContextProvider());
293 290
294 const bool create_gpu_output_surface = 291 const bool create_gpu_output_surface =
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 // Try again. 413 // Try again.
417 BrowserGpuChannelHostFactory::instance()->EstablishGpuChannel( 414 BrowserGpuChannelHostFactory::instance()->EstablishGpuChannel(
418 CAUSE_FOR_GPU_LAUNCH_SHARED_WORKER_THREAD_CONTEXT, 415 CAUSE_FOR_GPU_LAUNCH_SHARED_WORKER_THREAD_CONTEXT,
419 base::Bind(&GpuProcessTransportFactory::EstablishedGpuChannel, 416 base::Bind(&GpuProcessTransportFactory::EstablishedGpuChannel,
420 callback_factory_.GetWeakPtr(), compositor, 417 callback_factory_.GetWeakPtr(), compositor,
421 create_gpu_output_surface, num_attempts + 1)); 418 create_gpu_output_surface, num_attempts + 1));
422 return; 419 return;
423 } 420 }
424 } 421 }
425 422
426 std::unique_ptr<BrowserCompositorOutputSurface> surface; 423 std::unique_ptr<BrowserCompositorOutputSurface> display_output_surface;
427 #if defined(ENABLE_VULKAN) 424 #if defined(ENABLE_VULKAN)
428 std::unique_ptr<VulkanBrowserCompositorOutputSurface> vulkan_surface; 425 std::unique_ptr<VulkanBrowserCompositorOutputSurface> vulkan_surface;
429 if (vulkan_context_provider) { 426 if (vulkan_context_provider) {
430 vulkan_surface.reset(new VulkanBrowserCompositorOutputSurface( 427 vulkan_surface.reset(new VulkanBrowserCompositorOutputSurface(
431 vulkan_context_provider, compositor->vsync_manager(), 428 vulkan_context_provider, compositor->vsync_manager(),
432 compositor->task_runner().get())); 429 compositor->task_runner().get()));
433 if (!vulkan_surface->Initialize(compositor.get()->widget())) { 430 if (!vulkan_surface->Initialize(compositor.get()->widget())) {
434 vulkan_surface->Destroy(); 431 vulkan_surface->Destroy();
435 vulkan_surface.reset(); 432 vulkan_surface.reset();
436 } else { 433 } else {
437 surface = std::move(vulkan_surface); 434 display_output_surface = std::move(vulkan_surface);
438 } 435 }
439 } 436 }
440 #endif 437 #endif
441 438
442 if (!surface) { 439 if (!display_output_surface) {
443 if (!create_gpu_output_surface) { 440 if (!create_gpu_output_surface) {
444 surface = base::WrapUnique(new SoftwareBrowserCompositorOutputSurface( 441 display_output_surface =
445 CreateSoftwareOutputDevice(compositor.get()), 442 base::WrapUnique(new SoftwareBrowserCompositorOutputSurface(
446 compositor->vsync_manager(), compositor->task_runner().get())); 443 CreateSoftwareOutputDevice(compositor.get()),
444 compositor->vsync_manager(), compositor->task_runner().get()));
447 } else { 445 } else {
448 DCHECK(context_provider); 446 DCHECK(context_provider);
449 const auto& capabilities = context_provider->ContextCapabilities(); 447 const auto& capabilities = context_provider->ContextCapabilities();
450 if (data->surface_handle == gpu::kNullSurfaceHandle) { 448 if (data->surface_handle == gpu::kNullSurfaceHandle) {
451 surface = base::WrapUnique(new OffscreenBrowserCompositorOutputSurface( 449 display_output_surface =
452 context_provider, compositor->vsync_manager(), 450 base::WrapUnique(new OffscreenBrowserCompositorOutputSurface(
453 compositor->task_runner().get(), 451 context_provider, compositor->vsync_manager(),
454 std::unique_ptr< 452 compositor->task_runner().get(),
455 display_compositor::CompositorOverlayCandidateValidator>())); 453 std::unique_ptr<display_compositor::
454 CompositorOverlayCandidateValidator>()));
456 } else if (capabilities.surfaceless) { 455 } else if (capabilities.surfaceless) {
457 #if defined(OS_MACOSX) 456 #if defined(OS_MACOSX)
458 surface = base::WrapUnique(new GpuOutputSurfaceMac( 457 display_output_surface = base::WrapUnique(new GpuOutputSurfaceMac(
459 context_provider, data->surface_handle, compositor->vsync_manager(), 458 context_provider, data->surface_handle, compositor->vsync_manager(),
460 compositor->task_runner().get(), 459 compositor->task_runner().get(),
461 CreateOverlayCandidateValidator(compositor->widget()), 460 CreateOverlayCandidateValidator(compositor->widget()),
462 BrowserGpuMemoryBufferManager::current())); 461 BrowserGpuMemoryBufferManager::current()));
463 #else 462 #else
464 surface = 463 display_output_surface =
465 base::WrapUnique(new GpuSurfacelessBrowserCompositorOutputSurface( 464 base::WrapUnique(new GpuSurfacelessBrowserCompositorOutputSurface(
466 context_provider, data->surface_handle, 465 context_provider, data->surface_handle,
467 compositor->vsync_manager(), compositor->task_runner().get(), 466 compositor->vsync_manager(), compositor->task_runner().get(),
468 CreateOverlayCandidateValidator(compositor->widget()), 467 CreateOverlayCandidateValidator(compositor->widget()),
469 GL_TEXTURE_2D, GL_RGB, 468 GL_TEXTURE_2D, GL_RGB,
470 BrowserGpuMemoryBufferManager::current())); 469 BrowserGpuMemoryBufferManager::current()));
471 #endif 470 #endif
472 } else { 471 } else {
473 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator> 472 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator>
474 validator; 473 validator;
475 #if !defined(OS_MACOSX) 474 #if !defined(OS_MACOSX)
476 // Overlays are only supported on surfaceless output surfaces on Mac. 475 // Overlays are only supported on surfaceless output surfaces on Mac.
477 validator = CreateOverlayCandidateValidator(compositor->widget()); 476 validator = CreateOverlayCandidateValidator(compositor->widget());
478 #endif 477 #endif
479 surface = base::WrapUnique(new GpuBrowserCompositorOutputSurface( 478 display_output_surface =
480 context_provider, compositor->vsync_manager(), 479 base::WrapUnique(new GpuBrowserCompositorOutputSurface(
481 compositor->task_runner().get(), std::move(validator))); 480 context_provider, compositor->vsync_manager(),
481 compositor->task_runner().get(), std::move(validator)));
482 } 482 }
483 } 483 }
484 } 484 }
485 485
486 data->surface = surface.get(); 486 data->display_output_surface = display_output_surface.get();
487 if (data->reflector) 487 if (data->reflector)
488 data->reflector->OnSourceSurfaceReady(data->surface); 488 data->reflector->OnSourceSurfaceReady(data->display_output_surface);
489 489
490 #if defined(OS_WIN) 490 #if defined(OS_WIN)
491 gfx::RenderingWindowManager::GetInstance()->DoSetParentOnChild( 491 gfx::RenderingWindowManager::GetInstance()->DoSetParentOnChild(
492 compositor->widget()); 492 compositor->widget());
493 #endif 493 #endif
494 494
495 // This gets a bit confusing. Here we have a ContextProvider in the |surface| 495 // The Display owns and uses the |display_output_surface| created above.
496 // configured to render directly to this widget. We need to make an 496 data->display = base::MakeUnique<cc::Display>(
497 // OnscreenDisplayClient associated with that context, then return a 497 surface_manager_.get(), HostSharedBitmapManager::current(),
498 // SurfaceDisplayOutputSurface set up to draw to the display's surface. 498 BrowserGpuMemoryBufferManager::current(),
499 cc::SurfaceManager* manager = surface_manager_.get(); 499 compositor->GetRendererSettings(),
500 std::unique_ptr<cc::OnscreenDisplayClient> display_client( 500 compositor->surface_id_allocator()->id_namespace(),
501 new cc::OnscreenDisplayClient( 501 compositor->task_runner().get(), std::move(display_output_surface));
502 std::move(surface), manager, HostSharedBitmapManager::current(),
503 BrowserGpuMemoryBufferManager::current(),
504 compositor->GetRendererSettings(), compositor->task_runner(),
505 compositor->surface_id_allocator()->id_namespace()));
506 502
507 std::unique_ptr<cc::SurfaceDisplayOutputSurface> output_surface( 503 // The |delegated_output_surface| is given back to the compositor, it
504 // delegates to the Display as its root surface. Importantly, it shares the
505 // same ContextProvider as the Display's output surface.
506 std::unique_ptr<cc::SurfaceDisplayOutputSurface> delegated_output_surface(
508 vulkan_context_provider 507 vulkan_context_provider
509 ? new cc::SurfaceDisplayOutputSurface( 508 ? new cc::SurfaceDisplayOutputSurface(
510 manager, compositor->surface_id_allocator(), 509 surface_manager_.get(), compositor->surface_id_allocator(),
510 data->display.get(),
511 static_cast<scoped_refptr<cc::VulkanContextProvider>>( 511 static_cast<scoped_refptr<cc::VulkanContextProvider>>(
512 vulkan_context_provider)) 512 vulkan_context_provider))
513 : new cc::SurfaceDisplayOutputSurface( 513 : new cc::SurfaceDisplayOutputSurface(
514 manager, compositor->surface_id_allocator(), context_provider, 514 surface_manager_.get(), compositor->surface_id_allocator(),
515 data->display.get(), context_provider,
515 shared_worker_context_provider_)); 516 shared_worker_context_provider_));
516 display_client->set_surface_output_surface(output_surface.get()); 517 data->display->Resize(compositor->size());
517 output_surface->set_display_client(display_client.get()); 518 data->display->SetOutputIsSecure(data->output_is_secure);
518 display_client->display()->Resize(compositor->size()); 519 compositor->SetOutputSurface(std::move(delegated_output_surface));
519 display_client->display()->SetOutputIsSecure(data->output_is_secure);
520 data->display_client = std::move(display_client);
521 compositor->SetOutputSurface(std::move(output_surface));
522 } 520 }
523 521
524 std::unique_ptr<ui::Reflector> GpuProcessTransportFactory::CreateReflector( 522 std::unique_ptr<ui::Reflector> GpuProcessTransportFactory::CreateReflector(
525 ui::Compositor* source_compositor, 523 ui::Compositor* source_compositor,
526 ui::Layer* target_layer) { 524 ui::Layer* target_layer) {
527 PerCompositorData* source_data = per_compositor_data_[source_compositor]; 525 PerCompositorData* source_data = per_compositor_data_[source_compositor];
528 DCHECK(source_data); 526 DCHECK(source_data);
529 527
530 std::unique_ptr<ReflectorImpl> reflector( 528 std::unique_ptr<ReflectorImpl> reflector(
531 new ReflectorImpl(source_compositor, target_layer)); 529 new ReflectorImpl(source_compositor, target_layer));
532 source_data->reflector = reflector.get(); 530 source_data->reflector = reflector.get();
533 if (BrowserCompositorOutputSurface* source_surface = source_data->surface) 531 if (auto* source_surface = source_data->display_output_surface)
534 reflector->OnSourceSurfaceReady(source_surface); 532 reflector->OnSourceSurfaceReady(source_surface);
535 return std::move(reflector); 533 return std::move(reflector);
536 } 534 }
537 535
538 void GpuProcessTransportFactory::RemoveReflector(ui::Reflector* reflector) { 536 void GpuProcessTransportFactory::RemoveReflector(ui::Reflector* reflector) {
539 ReflectorImpl* reflector_impl = static_cast<ReflectorImpl*>(reflector); 537 ReflectorImpl* reflector_impl = static_cast<ReflectorImpl*>(reflector);
540 PerCompositorData* data = 538 PerCompositorData* data =
541 per_compositor_data_[reflector_impl->mirrored_compositor()]; 539 per_compositor_data_[reflector_impl->mirrored_compositor()];
542 DCHECK(data); 540 DCHECK(data);
543 data->reflector->Shutdown(); 541 data->reflector->Shutdown();
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 return allocator; 612 return allocator;
615 } 613 }
616 614
617 void GpuProcessTransportFactory::ResizeDisplay(ui::Compositor* compositor, 615 void GpuProcessTransportFactory::ResizeDisplay(ui::Compositor* compositor,
618 const gfx::Size& size) { 616 const gfx::Size& size) {
619 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); 617 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
620 if (it == per_compositor_data_.end()) 618 if (it == per_compositor_data_.end())
621 return; 619 return;
622 PerCompositorData* data = it->second; 620 PerCompositorData* data = it->second;
623 DCHECK(data); 621 DCHECK(data);
624 if (data->display_client) 622 if (data->display)
625 data->display_client->display()->Resize(size); 623 data->display->Resize(size);
626 } 624 }
627 625
628 void GpuProcessTransportFactory::SetAuthoritativeVSyncInterval( 626 void GpuProcessTransportFactory::SetAuthoritativeVSyncInterval(
629 ui::Compositor* compositor, 627 ui::Compositor* compositor,
630 base::TimeDelta interval) { 628 base::TimeDelta interval) {
631 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); 629 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
632 if (it == per_compositor_data_.end()) 630 if (it == per_compositor_data_.end())
633 return; 631 return;
634 PerCompositorData* data = it->second; 632 PerCompositorData* data = it->second;
635 DCHECK(data); 633 DCHECK(data);
636 if (data->surface) { 634 if (data->display_output_surface) {
637 data->surface->begin_frame_source()->SetAuthoritativeVSyncInterval( 635 data->display_output_surface->begin_frame_source()
638 interval); 636 ->SetAuthoritativeVSyncInterval(interval);
639 } 637 }
640 } 638 }
641 639
642 void GpuProcessTransportFactory::SetOutputIsSecure(ui::Compositor* compositor, 640 void GpuProcessTransportFactory::SetOutputIsSecure(ui::Compositor* compositor,
643 bool secure) { 641 bool secure) {
644 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); 642 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
645 if (it == per_compositor_data_.end()) 643 if (it == per_compositor_data_.end())
646 return; 644 return;
647 PerCompositorData* data = it->second; 645 PerCompositorData* data = it->second;
648 DCHECK(data); 646 DCHECK(data);
649 data->output_is_secure = secure; 647 data->output_is_secure = secure;
650 if (data->display_client) 648 if (data->display)
651 data->display_client->display()->SetOutputIsSecure(secure); 649 data->display->SetOutputIsSecure(secure);
652 } 650 }
653 651
654 cc::SurfaceManager* GpuProcessTransportFactory::GetSurfaceManager() { 652 cc::SurfaceManager* GpuProcessTransportFactory::GetSurfaceManager() {
655 return surface_manager_.get(); 653 return surface_manager_.get();
656 } 654 }
657 655
658 display_compositor::GLHelper* GpuProcessTransportFactory::GetGLHelper() { 656 display_compositor::GLHelper* GpuProcessTransportFactory::GetGLHelper() {
659 if (!gl_helper_ && !per_compositor_data_.empty()) { 657 if (!gl_helper_ && !per_compositor_data_.empty()) {
660 scoped_refptr<cc::ContextProvider> provider = 658 scoped_refptr<cc::ContextProvider> provider =
661 SharedMainThreadContextProvider(); 659 SharedMainThreadContextProvider();
(...skipping 16 matching lines...) Expand all
678 676
679 #if defined(OS_MACOSX) 677 #if defined(OS_MACOSX)
680 void GpuProcessTransportFactory::SetCompositorSuspendedForRecycle( 678 void GpuProcessTransportFactory::SetCompositorSuspendedForRecycle(
681 ui::Compositor* compositor, 679 ui::Compositor* compositor,
682 bool suspended) { 680 bool suspended) {
683 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); 681 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
684 if (it == per_compositor_data_.end()) 682 if (it == per_compositor_data_.end())
685 return; 683 return;
686 PerCompositorData* data = it->second; 684 PerCompositorData* data = it->second;
687 DCHECK(data); 685 DCHECK(data);
688 if (data->surface) 686 if (data->display_output_surface)
689 data->surface->SetSurfaceSuspendedForRecycle(suspended); 687 data->display_output_surface->SetSurfaceSuspendedForRecycle(suspended);
690 } 688 }
691 #endif 689 #endif
692 690
693 scoped_refptr<cc::ContextProvider> 691 scoped_refptr<cc::ContextProvider>
694 GpuProcessTransportFactory::SharedMainThreadContextProvider() { 692 GpuProcessTransportFactory::SharedMainThreadContextProvider() {
695 if (shared_main_thread_contexts_) 693 if (shared_main_thread_contexts_)
696 return shared_main_thread_contexts_; 694 return shared_main_thread_contexts_;
697 695
698 if (!GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor()) 696 if (!GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor())
699 return nullptr; 697 return nullptr;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 shared_vulkan_context_provider_ = 783 shared_vulkan_context_provider_ =
786 cc::VulkanInProcessContextProvider::Create(); 784 cc::VulkanInProcessContextProvider::Create();
787 } 785 }
788 786
789 shared_vulkan_context_provider_initialized_ = true; 787 shared_vulkan_context_provider_initialized_ = true;
790 } 788 }
791 return shared_vulkan_context_provider_; 789 return shared_vulkan_context_provider_;
792 } 790 }
793 791
794 } // namespace content 792 } // namespace content
OLDNEW
« no previous file with comments | « components/mus/surfaces/top_level_display_client.cc ('k') | content/browser/renderer_host/compositor_impl_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698