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

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: init tear down factored out separately 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..0a0be1cd16ebf452a0c54c037c5828b6b9c3d4e5 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,58 @@ 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();
+}
+
+scoped_ptr<cc::CompositorFrame> SynchronousCompositorImpl::DemandDrawHw(
+ gfx::Size surface_size,
+ const gfx::Transform& transform,
+ gfx::Rect viewport,
+ gfx::Rect clip,
+ bool stencil_enabled) {
DCHECK(CalledOnValidThread());
DCHECK(output_surface_);
- return output_surface_->DemandDrawHw(
+ scoped_ptr<cc::CompositorFrame> frame = output_surface_->DemandDrawHw(
surface_size, transform, viewport, clip, stencil_enabled);
+ if (frame.get())
+ UpdateFrameMetaData(frame->metadata);
+ return frame.Pass();
+}
+
+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);
+ scoped_ptr<cc::CompositorFrame> frame = output_surface_->DemandDrawSw(canvas);
+ if (frame.get())
+ UpdateFrameMetaData(frame->metadata);
+ return !!frame.get();
+}
+
+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 +242,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