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

Unified Diff: content/browser/renderer_host/compositor_impl_android.cc

Issue 750643003: Android: Improve Composite-with-no-GPU-channel handling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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
« no previous file with comments | « content/browser/renderer_host/compositor_impl_android.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/compositor_impl_android.cc
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
index bcdf99cde87f7a8fd4b56515e98c63a8958cfec9..5c6a868cdd6a1b50c3dc96c8877263f91877d879 100644
--- a/content/browser/renderer_host/compositor_impl_android.cc
+++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -185,6 +185,7 @@ CompositorImpl::CompositorImpl(CompositorClient* client,
will_composite_immediately_(false),
composite_on_vsync_trigger_(DO_NOT_COMPOSITE),
pending_swapbuffers_(0U),
+ defer_composite_for_gpu_channel_(false),
weak_factory_(this) {
DCHECK(client);
DCHECK(root_window);
@@ -203,7 +204,7 @@ void CompositorImpl::PostComposite(CompositingTrigger trigger) {
DCHECK(needs_composite_);
DCHECK(trigger == COMPOSITE_IMMEDIATELY || trigger == COMPOSITE_EVENTUALLY);
- if (will_composite_immediately_ ||
+ if (defer_composite_for_gpu_channel_ || will_composite_immediately_ ||
(trigger == COMPOSITE_EVENTUALLY && WillComposite())) {
// We will already composite soon enough.
DCHECK(WillComposite());
@@ -259,15 +260,28 @@ void CompositorImpl::PostComposite(CompositingTrigger trigger) {
FROM_HERE, current_composite_task_->callback(), delay);
}
+void CompositorImpl::OnGpuChannelEstablished() {
+ defer_composite_for_gpu_channel_ = false;
+
+ if (host_)
+ PostComposite(COMPOSITE_IMMEDIATELY);
+}
+
void CompositorImpl::Composite(CompositingTrigger trigger) {
+ if (trigger == COMPOSITE_IMMEDIATELY)
+ will_composite_immediately_ = false;
+
BrowserGpuChannelHostFactory* factory =
BrowserGpuChannelHostFactory::instance();
if (!factory->GetGpuChannel() || factory->GetGpuChannel()->IsLost()) {
CauseForGpuLaunch cause =
CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE;
- factory->EstablishGpuChannel(cause,
- base::Bind(&CompositorImpl::ScheduleComposite,
- weak_factory_.GetWeakPtr()));
+ factory->EstablishGpuChannel(
+ cause, base::Bind(&CompositorImpl::OnGpuChannelEstablished,
+ weak_factory_.GetWeakPtr()));
+ DCHECK(!defer_composite_for_gpu_channel_);
+ defer_composite_for_gpu_channel_ = true;
+ current_composite_task_.reset();
return;
}
@@ -276,9 +290,6 @@ void CompositorImpl::Composite(CompositingTrigger trigger) {
DCHECK(needs_composite_);
DCHECK(!DidCompositeThisFrame());
- if (trigger == COMPOSITE_IMMEDIATELY)
- will_composite_immediately_ = false;
-
DCHECK_LE(pending_swapbuffers_, kMaxSwapBuffers);
if (pending_swapbuffers_ == kMaxSwapBuffers) {
TRACE_EVENT0("compositor", "CompositorImpl_SwapLimit");
@@ -409,6 +420,7 @@ void CompositorImpl::SetVisible(bool visible) {
} else if (!host_) {
DCHECK(!WillComposite());
needs_composite_ = false;
+ defer_composite_for_gpu_channel_ = false;
pending_swapbuffers_ = 0;
cc::LayerTreeSettings settings;
settings.refresh_rate = 60.0;
« no previous file with comments | « content/browser/renderer_host/compositor_impl_android.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698