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

Unified Diff: content/browser/android/in_process/synchronous_compositor_impl.cc

Issue 287993004: [Android WebView] Implement Ubercomp for Render Thread support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 6 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/android/in_process/synchronous_compositor_impl.cc
diff --git a/content/browser/android/in_process/synchronous_compositor_impl.cc b/content/browser/android/in_process/synchronous_compositor_impl.cc
index 347c3631ac617ba93f693049580faf8f0da83a45..35be7261cbb77677acc182272ab0192d96aa541f 100644
--- a/content/browser/android/in_process/synchronous_compositor_impl.cc
+++ b/content/browser/android/in_process/synchronous_compositor_impl.cc
@@ -66,7 +66,8 @@ SynchronousCompositorImpl::SynchronousCompositorImpl(WebContents* contents)
: compositor_client_(NULL),
output_surface_(NULL),
contents_(contents),
- input_handler_(NULL) {
+ input_handler_(NULL),
+ weak_ptr_factory_(this) {
DCHECK(contents);
}
@@ -110,24 +111,60 @@ void SynchronousCompositorImpl::ReleaseHwDraw() {
g_factory.Get().CompositorReleasedHardwareDraw();
}
-bool SynchronousCompositorImpl::DemandDrawHw(
- gfx::Size surface_size,
- const gfx::Transform& transform,
- gfx::Rect viewport,
- gfx::Rect clip,
- bool stencil_enabled) {
+gpu::GLInProcessContext* SynchronousCompositorImpl::GetShareContext() {
+ DCHECK(CalledOnValidThread());
+ return g_factory.Get().GetShareContext();
+}
+
+bool SynchronousCompositorImpl::DemandDrawHw(gfx::Size surface_size,
+ const gfx::Transform& transform,
+ gfx::Rect viewport,
+ gfx::Rect clip,
+ bool stencil_enabled,
+ cc::CompositorFrame* frame) {
DCHECK(CalledOnValidThread());
no sievers 2014/05/20 20:48:26 So this is either on the UI thread (legacy) or on
boliu 2014/05/21 01:33:26 Ehh, exact opposite. This is called on UI thread
DCHECK(output_surface_);
+ DCHECK(frame);
- return output_surface_->DemandDrawHw(
- surface_size, transform, viewport, clip, stencil_enabled);
+ bool result = output_surface_->DemandDrawHw(
+ surface_size, transform, viewport, clip, stencil_enabled, frame);
+ if (result)
+ UpdateFrameMetaData(frame->metadata);
+ return result;
+}
+
+void SynchronousCompositorImpl::ReturnResources(
+ const cc::CompositorFrameAck& frame_ack) {
+ DCHECK(CalledOnValidThread());
+ output_surface_->ReturnResources(frame_ack);
}
bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) {
DCHECK(CalledOnValidThread());
DCHECK(output_surface_);
- return output_surface_->DemandDrawSw(canvas);
+ cc::CompositorFrame frame;
+ bool result = output_surface_->DemandDrawSw(canvas, &frame);
+ if (result)
+ UpdateFrameMetaData(frame.metadata);
+ return result;
+}
+
+void SynchronousCompositorImpl::UpdateFrameMetaData(
+ const cc::CompositorFrameMetadata& frame_metadata) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&SynchronousCompositorImpl::UpdateFrameMetaData,
+ weak_ptr_factory_.GetWeakPtr(),
+ frame_metadata));
+ return;
+ }
+ RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
+ contents_->GetRenderWidgetHostView());
+ if (rwhv)
+ rwhv->SynchronousFrameMetadata(frame_metadata);
}
void SynchronousCompositorImpl::SetMemoryPolicy(
@@ -207,14 +244,6 @@ InputEventAckState SynchronousCompositorImpl::HandleInputEvent(
contents_->GetRoutingID(), input_event);
}
-void SynchronousCompositorImpl::UpdateFrameMetaData(
- const cc::CompositorFrameMetadata& frame_metadata) {
- RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
- contents_->GetRenderWidgetHostView());
- if (rwhv)
- rwhv->SynchronousFrameMetadata(frame_metadata);
-}
-
void SynchronousCompositorImpl::DidActivatePendingTree() {
if (compositor_client_)
compositor_client_->DidUpdateContent();

Powered by Google App Engine
This is Rietveld 408576698