diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-02 00:54:45 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-02 00:54:45 +0000 |
commit | 94ec440e77ad0b84608869d98b4ec92e7834ced1 (patch) | |
tree | f00365ae4a84dfd264962e65ec5baa0b26055447 /content | |
parent | 567c87cfe9499a20df42147f57e271efaf057c5f (diff) | |
download | chromium_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.cc | 24 | ||||
-rw-r--r-- | content/browser/android/in_process/synchronous_compositor_output_surface.h | 3 |
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); }; |