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

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

Issue 266353003: aw: Ubercomp mega patch (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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..a012b5083ec243c8f9e0c088d1b0c3eb37924671 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);
}
@@ -115,19 +116,67 @@ bool SynchronousCompositorImpl::DemandDrawHw(
const gfx::Transform& transform,
gfx::Rect viewport,
gfx::Rect clip,
- bool stencil_enabled) {
+ bool stencil_enabled,
+ cc::CompositorFrame* frame) {
DCHECK(CalledOnValidThread());
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;
}
-bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) {
+bool SynchronousCompositorImpl::DemandDrawDelegated(
+ const gfx::Transform& transform,
+ gfx::Rect viewport,
+ gfx::Rect clip,
+ cc::CompositorFrame* frame) {
DCHECK(CalledOnValidThread());
DCHECK(output_surface_);
+ DCHECK(frame);
- return output_surface_->DemandDrawSw(canvas);
+ bool result =
+ output_surface_->DemandDrawDelegated(transform, viewport, clip, frame);
+ if (result)
+ UpdateFrameMetaData(frame->metadata);
+ return result;
+}
+
+bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas,
+ cc::CompositorFrame* frame) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(output_surface_);
+ DCHECK(frame);
+
+ bool result = output_surface_->DemandDrawSw(canvas, frame);
+ if (result)
+ UpdateFrameMetaData(frame->metadata);
+ return result;
+}
+
+void SynchronousCompositorImpl::ReturnResources(
+ const cc::CompositorFrameAck* frame_ack) {
+ output_surface_->ReturnResources(frame_ack);
+}
+
+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 +256,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();
@@ -274,4 +315,9 @@ void SynchronousCompositor::SetClientForWebContents(
}
}
+// static
+SynchronousCompositorFactoryImpl* SynchronousCompositor::GetFactory() {
+ return g_factory.Pointer();
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698