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

Side by Side Diff: components/viz/frame_sinks/mojo_frame_sink_manager.cc

Issue 2908473002: Revert of cc::SurfaceDependencyTracker should not crash when a Display goes away (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « components/viz/frame_sinks/mojo_frame_sink_manager.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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/viz/frame_sinks/mojo_frame_sink_manager.h" 5 #include "components/viz/frame_sinks/mojo_frame_sink_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "cc/base/switches.h" 11 #include "cc/base/switches.h"
12 #include "cc/scheduler/begin_frame_source.h" 12 #include "cc/scheduler/begin_frame_source.h"
13 #include "cc/surfaces/display.h" 13 #include "cc/surfaces/display.h"
14 #include "cc/surfaces/surface_dependency_tracker.h" 14 #include "cc/surfaces/surface_dependency_tracker.h"
15 #include "components/viz/frame_sinks/display_provider.h" 15 #include "components/viz/frame_sinks/display_provider.h"
16 #include "components/viz/frame_sinks/gpu_compositor_frame_sink.h" 16 #include "components/viz/frame_sinks/gpu_compositor_frame_sink.h"
17 #include "components/viz/frame_sinks/gpu_root_compositor_frame_sink.h" 17 #include "components/viz/frame_sinks/gpu_root_compositor_frame_sink.h"
18 18
19 namespace viz { 19 namespace viz {
20 20
21 MojoFrameSinkManager::MojoFrameSinkManager(bool use_surface_references, 21 MojoFrameSinkManager::MojoFrameSinkManager(bool use_surface_references,
22 DisplayProvider* display_provider) 22 DisplayProvider* display_provider)
23 : manager_(use_surface_references 23 : manager_(use_surface_references
24 ? cc::SurfaceManager::LifetimeType::REFERENCES 24 ? cc::SurfaceManager::LifetimeType::REFERENCES
25 : cc::SurfaceManager::LifetimeType::SEQUENCES), 25 : cc::SurfaceManager::LifetimeType::SEQUENCES),
26 display_provider_(display_provider), 26 display_provider_(display_provider),
27 binding_(this) { 27 binding_(this) {
28 manager_.AddObserver(this); 28 manager_.AddObserver(this);
29 dependency_tracker_ = base::MakeUnique<cc::SurfaceDependencyTracker>(
30 &manager_, manager_.GetPrimaryBeginFrameSource());
31 manager_.SetDependencyTracker(dependency_tracker_.get());
32 } 29 }
33 30
34 MojoFrameSinkManager::~MojoFrameSinkManager() { 31 MojoFrameSinkManager::~MojoFrameSinkManager() {
35 DCHECK(thread_checker_.CalledOnValidThread()); 32 DCHECK(thread_checker_.CalledOnValidThread());
36 manager_.SetDependencyTracker(nullptr);
37 dependency_tracker_.reset();
38 manager_.RemoveObserver(this); 33 manager_.RemoveObserver(this);
39 } 34 }
40 35
41 void MojoFrameSinkManager::Connect( 36 void MojoFrameSinkManager::Connect(
42 cc::mojom::FrameSinkManagerRequest request, 37 cc::mojom::FrameSinkManagerRequest request,
43 cc::mojom::FrameSinkManagerClientPtr client) { 38 cc::mojom::FrameSinkManagerClientPtr client) {
44 DCHECK(!binding_.is_bound()); 39 DCHECK(!binding_.is_bound());
45 binding_.Bind(std::move(request)); 40 binding_.Bind(std::move(request));
46 client_ = std::move(client); 41 client_ = std::move(client);
47 } 42 }
48 43
49 void MojoFrameSinkManager::CreateRootCompositorFrameSink( 44 void MojoFrameSinkManager::CreateRootCompositorFrameSink(
50 const cc::FrameSinkId& frame_sink_id, 45 const cc::FrameSinkId& frame_sink_id,
51 gpu::SurfaceHandle surface_handle, 46 gpu::SurfaceHandle surface_handle,
52 cc::mojom::MojoCompositorFrameSinkAssociatedRequest request, 47 cc::mojom::MojoCompositorFrameSinkAssociatedRequest request,
53 cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request, 48 cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request,
54 cc::mojom::MojoCompositorFrameSinkClientPtr client, 49 cc::mojom::MojoCompositorFrameSinkClientPtr client,
55 cc::mojom::DisplayPrivateAssociatedRequest display_private_request) { 50 cc::mojom::DisplayPrivateAssociatedRequest display_private_request) {
56 DCHECK(thread_checker_.CalledOnValidThread()); 51 DCHECK(thread_checker_.CalledOnValidThread());
57 DCHECK_NE(surface_handle, gpu::kNullSurfaceHandle); 52 DCHECK_NE(surface_handle, gpu::kNullSurfaceHandle);
58 DCHECK_EQ(0u, compositor_frame_sinks_.count(frame_sink_id)); 53 DCHECK_EQ(0u, compositor_frame_sinks_.count(frame_sink_id));
59 DCHECK(display_provider_); 54 DCHECK(display_provider_);
60 55
61 std::unique_ptr<cc::BeginFrameSource> begin_frame_source; 56 std::unique_ptr<cc::BeginFrameSource> begin_frame_source;
62 std::unique_ptr<cc::Display> display = display_provider_->CreateDisplay( 57 std::unique_ptr<cc::Display> display = display_provider_->CreateDisplay(
63 frame_sink_id, surface_handle, &begin_frame_source); 58 frame_sink_id, surface_handle, &begin_frame_source);
64 59
60 // Lazily inject a SurfaceDependencyTracker into SurfaceManager if surface
61 // synchronization is enabled.
62 if (!manager_.dependency_tracker() &&
63 base::CommandLine::ForCurrentProcess()->HasSwitch(
64 cc::switches::kEnableSurfaceSynchronization)) {
65 std::unique_ptr<cc::SurfaceDependencyTracker> dependency_tracker(
66 new cc::SurfaceDependencyTracker(&manager_, begin_frame_source.get()));
67 manager_.SetDependencyTracker(std::move(dependency_tracker));
68 }
69
65 compositor_frame_sinks_[frame_sink_id] = 70 compositor_frame_sinks_[frame_sink_id] =
66 base::MakeUnique<GpuRootCompositorFrameSink>( 71 base::MakeUnique<GpuRootCompositorFrameSink>(
67 this, &manager_, frame_sink_id, std::move(display), 72 this, &manager_, frame_sink_id, std::move(display),
68 std::move(begin_frame_source), std::move(request), 73 std::move(begin_frame_source), std::move(request),
69 std::move(private_request), std::move(client), 74 std::move(private_request), std::move(client),
70 std::move(display_private_request)); 75 std::move(display_private_request));
71 } 76 }
72 77
73 void MojoFrameSinkManager::CreateCompositorFrameSink( 78 void MojoFrameSinkManager::CreateCompositorFrameSink(
74 const cc::FrameSinkId& frame_sink_id, 79 const cc::FrameSinkId& frame_sink_id,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 142
138 void MojoFrameSinkManager::OnPrivateConnectionLost( 143 void MojoFrameSinkManager::OnPrivateConnectionLost(
139 const cc::FrameSinkId& frame_sink_id, 144 const cc::FrameSinkId& frame_sink_id,
140 bool destroy_compositor_frame_sink) { 145 bool destroy_compositor_frame_sink) {
141 DCHECK(thread_checker_.CalledOnValidThread()); 146 DCHECK(thread_checker_.CalledOnValidThread());
142 if (destroy_compositor_frame_sink) 147 if (destroy_compositor_frame_sink)
143 DestroyCompositorFrameSink(frame_sink_id); 148 DestroyCompositorFrameSink(frame_sink_id);
144 } 149 }
145 150
146 } // namespace viz 151 } // namespace viz
OLDNEW
« no previous file with comments | « components/viz/frame_sinks/mojo_frame_sink_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698