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

Unified Diff: content/browser/compositor/delegated_frame_host.cc

Issue 859423002: Explicitly specify the ui::Compositor to DelegatedFrameHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use compositor Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/compositor/delegated_frame_host.cc
diff --git a/content/browser/compositor/delegated_frame_host.cc b/content/browser/compositor/delegated_frame_host.cc
index e09c38ebc6589ccc1ec5a9ef82e6bc7703ce974a..cbf43b5237810e353f556bbbc6bea2dc1aeaef69 100644
--- a/content/browser/compositor/delegated_frame_host.cc
+++ b/content/browser/compositor/delegated_frame_host.cc
@@ -79,6 +79,7 @@ void DelegatedFrameHostClient::RequestCopyOfOutput(
DelegatedFrameHost::DelegatedFrameHost(DelegatedFrameHostClient* client)
: client_(client),
+ compositor_(nullptr),
use_surfaces_(UseSurfacesEnabled()),
last_output_surface_id_(0),
pending_delegated_ack_count_(0),
@@ -94,14 +95,12 @@ void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) {
if (surface_id_.is_null() && !frame_provider_.get() &&
!released_front_lock_.get()) {
- ui::Compositor* compositor = client_->GetCompositor();
- if (compositor)
- released_front_lock_ = compositor->GetCompositorLock();
+ if (compositor_)
+ released_front_lock_ = compositor_->GetCompositorLock();
}
- ui::Compositor* compositor = client_->GetCompositor();
- if (compositor) {
- compositor->SetLatencyInfo(latency_info);
+ if (compositor_) {
+ compositor_->SetLatencyInfo(latency_info);
}
}
@@ -117,12 +116,7 @@ void DelegatedFrameHost::WasHidden() {
void DelegatedFrameHost::MaybeCreateResizeLock() {
if (!client_->ShouldCreateResizeLock())
return;
- DCHECK(client_->GetCompositor());
-
- // Listen to changes in the compositor lock state.
- ui::Compositor* compositor = client_->GetCompositor();
- if (!compositor->HasObserver(this))
- compositor->AddObserver(this);
+ DCHECK(compositor_);
bool defer_compositor_lock =
can_lock_compositor_ == NO_PENDING_RENDERER_FRAME ||
@@ -147,8 +141,7 @@ bool DelegatedFrameHost::ShouldCreateResizeLock() {
if (desired_size == current_frame_size_in_dip_ || desired_size.IsEmpty())
return false;
- ui::Compositor* compositor = client_->GetCompositor();
- if (!compositor)
+ if (!compositor_)
return false;
return true;
@@ -225,13 +218,11 @@ void DelegatedFrameHost::CopyFromCompositingSurfaceToVideoFrame(
}
bool DelegatedFrameHost::CanCopyToBitmap() const {
- return client_->GetCompositor() &&
- client_->GetLayer()->has_external_content();
+ return compositor_ && client_->GetLayer()->has_external_content();
}
bool DelegatedFrameHost::CanCopyToVideoFrame() const {
- return client_->GetCompositor() &&
- client_->GetLayer()->has_external_content();
+ return compositor_ && client_->GetLayer()->has_external_content();
}
bool DelegatedFrameHost::CanSubscribeFrame() const {
@@ -283,11 +274,6 @@ void DelegatedFrameHost::CheckResizeLock() {
// the release of the lock until we've kicked a frame with the new texture, to
// avoid resizing the UI before we have a chance to draw a "good" frame.
resize_lock_->UnlockCompositor();
- ui::Compositor* compositor = client_->GetCompositor();
- if (compositor) {
- if (!compositor->HasObserver(this))
- compositor->AddObserver(this);
- }
}
void DelegatedFrameHost::DidReceiveFrameFromRenderer(
@@ -385,8 +371,7 @@ void DelegatedFrameHost::SwapDelegatedFrame(
}
last_output_surface_id_ = output_surface_id;
}
- ui::Compositor* compositor = client_->GetCompositor();
- bool immediate_ack = !compositor;
+ bool immediate_ack = !compositor_;
if (frame_size.IsEmpty()) {
DCHECK(frame_data->resource_list.empty());
EvictDelegatedFrame();
@@ -430,7 +415,7 @@ void DelegatedFrameHost::SwapDelegatedFrame(
immediate_ack = true;
cc::SurfaceFactory::DrawCallback ack_callback;
- if (compositor && !immediate_ack) {
+ if (compositor_ && !immediate_ack) {
ack_callback = base::Bind(&DelegatedFrameHost::SurfaceDrawn,
AsWeakPtr(), output_surface_id);
}
@@ -472,12 +457,12 @@ void DelegatedFrameHost::SwapDelegatedFrame(
} else if (!use_surfaces_) {
std::vector<ui::LatencyInfo>::const_iterator it;
for (it = latency_info.begin(); it != latency_info.end(); ++it)
- compositor->SetLatencyInfo(*it);
+ compositor_->SetLatencyInfo(*it);
// If we've previously skipped any latency infos add them.
for (it = skipped_latency_info_list_.begin();
it != skipped_latency_info_list_.end();
++it)
- compositor->SetLatencyInfo(*it);
+ compositor_->SetLatencyInfo(*it);
skipped_latency_info_list_.clear();
AddOnCommitCallbackAndDisableLocks(
base::Bind(&DelegatedFrameHost::SendDelegatedFrameAck,
@@ -924,6 +909,12 @@ void DelegatedFrameHost::OnCompositingLockStateChanged(
}
}
+void DelegatedFrameHost::OnCompositingShuttingDown(ui::Compositor* compositor) {
+ DCHECK_EQ(compositor, compositor_);
+ ResetCompositor();
+ DCHECK(!compositor_);
+}
+
void DelegatedFrameHost::OnUpdateVSyncParameters(
base::TimeTicks timebase,
base::TimeDelta interval) {
@@ -951,6 +942,7 @@ void DelegatedFrameHost::OnLostResources() {
// DelegatedFrameHost, private:
DelegatedFrameHost::~DelegatedFrameHost() {
+ DCHECK(!compositor_);
ImageTransportFactory::GetInstance()->RemoveObserver(this);
if (!surface_id_.is_null())
@@ -972,38 +964,37 @@ void DelegatedFrameHost::RunOnCommitCallbacks() {
void DelegatedFrameHost::AddOnCommitCallbackAndDisableLocks(
const base::Closure& callback) {
- ui::Compositor* compositor = client_->GetCompositor();
- DCHECK(compositor);
-
- if (!compositor->HasObserver(this))
- compositor->AddObserver(this);
+ DCHECK(compositor_);
can_lock_compositor_ = NO_PENDING_COMMIT;
if (!callback.is_null())
on_compositing_did_commit_callbacks_.push_back(callback);
}
-void DelegatedFrameHost::AddedToWindow() {
- ui::Compositor* compositor = client_->GetCompositor();
- if (compositor) {
- DCHECK(!vsync_manager_.get());
- vsync_manager_ = compositor->vsync_manager();
- vsync_manager_->AddObserver(this);
- }
+void DelegatedFrameHost::SetCompositor(ui::Compositor* compositor) {
+ DCHECK(!compositor_);
+ if (!compositor)
+ return;
+ compositor_ = compositor;
+ compositor_->AddObserver(this);
+ DCHECK(!vsync_manager_.get());
+ vsync_manager_ = compositor_->vsync_manager();
+ vsync_manager_->AddObserver(this);
}
-void DelegatedFrameHost::RemovingFromWindow() {
+void DelegatedFrameHost::ResetCompositor() {
+ if (!compositor_)
+ return;
RunOnCommitCallbacks();
resize_lock_.reset();
client_->GetHost()->WasResized();
- ui::Compositor* compositor = client_->GetCompositor();
- if (compositor && compositor->HasObserver(this))
- compositor->RemoveObserver(this);
-
+ if (compositor_->HasObserver(this))
+ compositor_->RemoveObserver(this);
if (vsync_manager_.get()) {
vsync_manager_->RemoveObserver(this);
vsync_manager_ = NULL;
}
+ compositor_ = nullptr;
}
void DelegatedFrameHost::LockResources() {
« no previous file with comments | « content/browser/compositor/delegated_frame_host.h ('k') | content/browser/media/capture/desktop_capture_device_aura.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698