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

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

Issue 1546383002: sync compositor: Send ipc reply in swap (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase + no swap fix Created 5 years 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 4d64521a57bde82141caef4440af9e771d808c81..e5c789b7b09686c7b16c3d1c6103aa883a803e65 100644
--- a/content/browser/android/in_process/synchronous_compositor_impl.cc
+++ b/content/browser/android/in_process/synchronous_compositor_impl.cc
@@ -4,6 +4,8 @@
#include "content/browser/android/in_process/synchronous_compositor_impl.h"
+#include <utility>
+
#include "base/auto_reset.h"
#include "base/bind.h"
#include "base/lazy_instance.h"
@@ -163,19 +165,16 @@ scoped_ptr<cc::CompositorFrame> SynchronousCompositorImpl::DemandDrawHw(
DCHECK(CalledOnValidThread());
DCHECK(output_surface_);
DCHECK(begin_frame_source_);
+ DCHECK(!frame_holder_);
- scoped_ptr<cc::CompositorFrame> frame =
- output_surface_->DemandDrawHw(surface_size,
- transform,
- viewport,
- clip,
- viewport_rect_for_tile_priority,
- transform_for_tile_priority);
+ output_surface_->DemandDrawHw(surface_size, transform, viewport, clip,
+ viewport_rect_for_tile_priority,
+ transform_for_tile_priority);
- if (frame.get())
- UpdateFrameMetaData(frame->metadata);
+ if (frame_holder_)
+ UpdateFrameMetaData(frame_holder_->metadata);
- return frame.Pass();
+ return std::move(frame_holder_);
}
void SynchronousCompositorImpl::ReturnResources(
@@ -188,14 +187,23 @@ bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) {
DCHECK(CalledOnValidThread());
DCHECK(output_surface_);
DCHECK(begin_frame_source_);
+ DCHECK(!frame_holder_);
+
+ output_surface_->DemandDrawSw(canvas);
- scoped_ptr<cc::CompositorFrame> frame =
- output_surface_->DemandDrawSw(canvas);
+ bool success = !!frame_holder_;
+ if (frame_holder_) {
+ UpdateFrameMetaData(frame_holder_->metadata);
+ frame_holder_.reset();
+ }
- if (frame.get())
- UpdateFrameMetaData(frame->metadata);
+ return success;
+}
- return !!frame.get();
+void SynchronousCompositorImpl::SwapBuffers(cc::CompositorFrame* frame) {
+ DCHECK(!frame_holder_);
+ frame_holder_.reset(new cc::CompositorFrame);
+ frame->AssignTo(frame_holder_.get());
}
void SynchronousCompositorImpl::UpdateFrameMetaData(

Powered by Google App Engine
This is Rietveld 408576698