summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chromium/components/viz/host/host_frame_sink_manager.cc24
-rw-r--r--chromium/content/browser/compositor/viz_process_transport_factory.cc6
-rw-r--r--chromium/content/browser/compositor/viz_process_transport_factory.h3
3 files changed, 20 insertions, 13 deletions
diff --git a/chromium/components/viz/host/host_frame_sink_manager.cc b/chromium/components/viz/host/host_frame_sink_manager.cc
index 4416414acf0..157902f8d1e 100644
--- a/chromium/components/viz/host/host_frame_sink_manager.cc
+++ b/chromium/components/viz/host/host_frame_sink_manager.cc
@@ -115,8 +115,8 @@ void HostFrameSinkManager::InvalidateFrameSinkId(
// HostFrameSinkManager has been mutated. |data| might not be a valid
// reference at this point.
}
-
- frame_sink_manager_->InvalidateFrameSinkId(frame_sink_id);
+ if (frame_sink_manager_)
+ frame_sink_manager_->InvalidateFrameSinkId(frame_sink_id);
}
void HostFrameSinkManager::EnableSynchronizationReporting(
@@ -147,7 +147,7 @@ void HostFrameSinkManager::SetFrameSinkDebugLabel(
void HostFrameSinkManager::CreateRootCompositorFrameSink(
mojom::RootCompositorFrameSinkParamsPtr params) {
// Should only be used with an out-of-process display compositor.
- DCHECK(frame_sink_manager_remote_);
+ DCHECK(frame_sink_manager_remote_ || !frame_sink_manager_);
FrameSinkId frame_sink_id = params->frame_sink_id;
FrameSinkData& data = frame_sink_data_map_[frame_sink_id];
@@ -160,10 +160,11 @@ void HostFrameSinkManager::CreateRootCompositorFrameSink(
base::DoNothing());
}
- data.is_root = true;
- data.has_created_compositor_frame_sink = true;
-
- frame_sink_manager_->CreateRootCompositorFrameSink(std::move(params));
+ if (frame_sink_manager_) {
+ data.is_root = true;
+ data.has_created_compositor_frame_sink = true;
+ frame_sink_manager_->CreateRootCompositorFrameSink(std::move(params));
+ }
display_hit_test_query_[frame_sink_id] = std::make_unique<HitTestQuery>();
}
@@ -181,11 +182,12 @@ void HostFrameSinkManager::CreateCompositorFrameSink(
base::DoNothing());
}
- data.is_root = false;
- data.has_created_compositor_frame_sink = true;
-
- frame_sink_manager_->CreateCompositorFrameSink(
+ if (frame_sink_manager_) {
+ data.is_root = false;
+ data.has_created_compositor_frame_sink = true;
+ frame_sink_manager_->CreateCompositorFrameSink(
frame_sink_id, std::move(receiver), std::move(client));
+ }
}
void HostFrameSinkManager::OnFrameTokenChanged(const FrameSinkId& frame_sink_id,
diff --git a/chromium/content/browser/compositor/viz_process_transport_factory.cc b/chromium/content/browser/compositor/viz_process_transport_factory.cc
index 22635f8b04f..0e7880c8add 100644
--- a/chromium/content/browser/compositor/viz_process_transport_factory.cc
+++ b/chromium/content/browser/compositor/viz_process_transport_factory.cc
@@ -357,11 +357,15 @@ void VizProcessTransportFactory::OnGpuProcessLost() {
ConnectHostFrameSinkManager();
}
+void VizProcessTransportFactory::PrepareForShutDown() {
+ shutdown_=true;
+}
+
void VizProcessTransportFactory::OnEstablishedGpuChannel(
base::WeakPtr<ui::Compositor> compositor_weak_ptr,
scoped_refptr<gpu::GpuChannelHost> gpu_channel_host) {
ui::Compositor* compositor = compositor_weak_ptr.get();
- if (!compositor)
+ if (!compositor || shutdown_)
return;
bool gpu_compositing =
diff --git a/chromium/content/browser/compositor/viz_process_transport_factory.h b/chromium/content/browser/compositor/viz_process_transport_factory.h
index 5550113ec21..47fc75378d6 100644
--- a/chromium/content/browser/compositor/viz_process_transport_factory.h
+++ b/chromium/content/browser/compositor/viz_process_transport_factory.h
@@ -57,6 +57,7 @@ class VizProcessTransportFactory : public ui::ContextFactory,
// Connects HostFrameSinkManager to FrameSinkManagerImpl in viz process.
void ConnectHostFrameSinkManager();
+ void PrepareForShutDown();
// ui::ContextFactory implementation.
void CreateLayerTreeFrameSink(
@@ -135,7 +136,7 @@ class VizProcessTransportFactory : public ui::ContextFactory,
ui::HostContextFactoryPrivate context_factory_private_;
base::WeakPtrFactory<VizProcessTransportFactory> weak_ptr_factory_{this};
-
+ bool shutdown_ = false;
DISALLOW_COPY_AND_ASSIGN(VizProcessTransportFactory);
};