summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-02 00:54:45 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-02 00:54:45 +0000
commit94ec440e77ad0b84608869d98b4ec92e7834ced1 (patch)
treef00365ae4a84dfd264962e65ec5baa0b26055447 /content
parent567c87cfe9499a20df42147f57e271efaf057c5f (diff)
downloadchromium_src-94ec440e77ad0b84608869d98b4ec92e7834ced1.zip
chromium_src-94ec440e77ad0b84608869d98b4ec92e7834ced1.tar.gz
chromium_src-94ec440e77ad0b84608869d98b4ec92e7834ced1.tar.bz2
Sync Compositor: Post UpdateFrameMetaData to UI thread
BUG=344087 Review URL: https://codereview.chromium.org/213743011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@261013 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/android/in_process/synchronous_compositor_output_surface.cc24
-rw-r--r--content/browser/android/in_process/synchronous_compositor_output_surface.h3
2 files changed, 23 insertions, 4 deletions
diff --git a/content/browser/android/in_process/synchronous_compositor_output_surface.cc b/content/browser/android/in_process/synchronous_compositor_output_surface.cc
index 88983d5..e65291b 100644
--- a/content/browser/android/in_process/synchronous_compositor_output_surface.cc
+++ b/content/browser/android/in_process/synchronous_compositor_output_surface.cc
@@ -73,7 +73,8 @@ SynchronousCompositorOutputSurface::SynchronousCompositorOutputSurface(
did_swap_buffer_(false),
current_sw_canvas_(NULL),
memory_policy_(0),
- output_surface_client_(NULL) {
+ output_surface_client_(NULL),
+ weak_ptr_factory_(this) {
capabilities_.deferred_gl_initialization = true;
capabilities_.draw_and_swap_full_viewport_every_frame = true;
capabilities_.adjust_deadline_for_parent = false;
@@ -139,14 +140,29 @@ void SynchronousCompositorOutputSurface::SwapBuffers(
DCHECK(context_provider_);
context_provider_->ContextGL()->ShallowFlushCHROMIUM();
}
- SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate();
- if (delegate)
- delegate->UpdateFrameMetaData(frame->metadata);
+ UpdateFrameMetaData(frame->metadata);
did_swap_buffer_ = true;
DidSwapBuffers();
}
+void SynchronousCompositorOutputSurface::UpdateFrameMetaData(
+ const cc::CompositorFrameMetadata& frame_info) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&SynchronousCompositorOutputSurface::UpdateFrameMetaData,
+ weak_ptr_factory_.GetWeakPtr(),
+ frame_info));
+ return;
+ }
+
+ SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate();
+ if (delegate)
+ delegate->UpdateFrameMetaData(frame_info);
+}
+
namespace {
void AdjustTransform(gfx::Transform* transform, gfx::Rect viewport) {
// CC's draw origin starts at the viewport.
diff --git a/content/browser/android/in_process/synchronous_compositor_output_surface.h b/content/browser/android/in_process/synchronous_compositor_output_surface.h
index e0be5da..c695334 100644
--- a/content/browser/android/in_process/synchronous_compositor_output_surface.h
+++ b/content/browser/android/in_process/synchronous_compositor_output_surface.h
@@ -88,6 +88,7 @@ class SynchronousCompositorOutputSurface
bool valid_for_tile_management);
bool CalledOnValidThread() const;
SynchronousCompositorOutputSurfaceDelegate* GetDelegate();
+ void UpdateFrameMetaData(const cc::CompositorFrameMetadata& frame_info);
int routing_id_;
bool invoking_composite_;
@@ -104,6 +105,8 @@ class SynchronousCompositorOutputSurface
cc::OutputSurfaceClient* output_surface_client_;
+ base::WeakPtrFactory<SynchronousCompositorOutputSurface> weak_ptr_factory_;
+
DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorOutputSurface);
};