diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-20 22:30:10 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-20 22:30:10 +0000 |
commit | 1fd6e69803e5512f07f955c354d2254e59e78474 (patch) | |
tree | 8e70b71c5912c92a7fd94eaa608ef2f55a51646c /ui | |
parent | ed55546b488666e060f10b37785b64503b96eb92 (diff) | |
download | chromium_src-1fd6e69803e5512f07f955c354d2254e59e78474.zip chromium_src-1fd6e69803e5512f07f955c354d2254e59e78474.tar.gz chromium_src-1fd6e69803e5512f07f955c354d2254e59e78474.tar.bz2 |
Revert "win: AcceleratedPresenter replies to the GPU process as soon as shared texture is copied."
This reverts commit ad526010baec7a1cb70b94ae0ef6c06f967007db.
TBR=apatrick
BUG=
Review URL: https://codereview.chromium.org/11571091
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@174260 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/surface/accelerated_surface_win.cc | 59 | ||||
-rw-r--r-- | ui/surface/accelerated_surface_win.h | 13 |
2 files changed, 27 insertions, 45 deletions
diff --git a/ui/surface/accelerated_surface_win.cc b/ui/surface/accelerated_surface_win.cc index 0fa247d7..acd8c64 100644 --- a/ui/surface/accelerated_surface_win.cc +++ b/ui/surface/accelerated_surface_win.cc @@ -390,13 +390,11 @@ scoped_refptr<AcceleratedPresenter> AcceleratedPresenter::GetForWindow( void AcceleratedPresenter::AsyncPresentAndAcknowledge( const gfx::Size& size, int64 surface_handle, - const CopyCompletionTask& copy_completion_task, - const PresentCompletionTask& present_completion_task) { + const CompletionTask& completion_task) { if (!surface_handle) { TRACE_EVENT1("gpu", "EarlyOut_ZeroSurfaceHandle", "surface_handle", surface_handle); - copy_completion_task.Run(true); - present_completion_task.Run(base::TimeTicks(), base::TimeDelta()); + completion_task.Run(true, base::TimeTicks(), base::TimeDelta()); return; } @@ -406,8 +404,7 @@ void AcceleratedPresenter::AsyncPresentAndAcknowledge( this, size, surface_handle, - copy_completion_task, - present_completion_task)); + completion_task)); } void AcceleratedPresenter::Present(HDC dc) { @@ -632,8 +629,7 @@ static base::TimeDelta GetSwapDelay() { void AcceleratedPresenter::DoPresentAndAcknowledge( const gfx::Size& size, int64 surface_handle, - const CopyCompletionTask& copy_completion_task, - const PresentCompletionTask& present_completion_task) { + const CompletionTask& completion_task) { TRACE_EVENT2( "gpu", "DoPresentAndAcknowledge", "width", size.width(), @@ -647,21 +643,15 @@ void AcceleratedPresenter::DoPresentAndAcknowledge( present_thread_->InitDevice(); if (!present_thread_->device()) { - if (!copy_completion_task.is_null()) - copy_completion_task.Run(false); - if (!present_completion_task.is_null()) - present_completion_task.Run(base::TimeTicks(), base::TimeDelta()); + if (!completion_task.is_null()) + completion_task.Run(false, base::TimeTicks(), base::TimeDelta()); TRACE_EVENT0("gpu", "EarlyOut_NoDevice"); return; } // Ensure the task is always run and while the lock is taken. - base::ScopedClosureRunner scoped_copy_completion_runner( - base::Bind(copy_completion_task, true)); - base::ScopedClosureRunner scoped_present_completion_runner( - base::Bind(present_completion_task, - base::TimeTicks(), - base::TimeDelta())); + base::ScopedClosureRunner scoped_completion_runner( + base::Bind(completion_task, true, base::TimeTicks(), base::TimeDelta())); // If invalidated, do nothing, the window is gone. if (!window_) { @@ -798,23 +788,6 @@ void AcceleratedPresenter::DoPresentAndAcknowledge( if (FAILED(hr)) return; - // Wait for the StretchRect to complete before notifying the GPU process - // that it is safe to write to its backing store again. - { - TRACE_EVENT0("gpu", "spin"); - do { - hr = present_thread_->query()->GetData(NULL, 0, D3DGETDATA_FLUSH); - - if (hr == S_FALSE) - Sleep(1); - } while (hr == S_FALSE); - } - - // Acknowledge that the copy is complete and it is safe to modify the shared - // texture. - scoped_copy_completion_runner.Release(); - copy_completion_task.Run(true); - present_size_ = size; static const base::TimeDelta swap_delay = GetSwapDelay(); @@ -880,8 +853,20 @@ void AcceleratedPresenter::DoPresentAndAcknowledge( 1000000 / display_mode.RefreshRate); } - scoped_present_completion_runner.Release(); - present_completion_task.Run(last_vsync_time, refresh_period); + // Wait for the StretchRect to complete before notifying the GPU process + // that it is safe to write to its backing store again. + { + TRACE_EVENT0("gpu", "spin"); + do { + hr = present_thread_->query()->GetData(NULL, 0, D3DGETDATA_FLUSH); + + if (hr == S_FALSE) + Sleep(1); + } while (hr == S_FALSE); + } + + scoped_completion_runner.Release(); + completion_task.Run(true, last_vsync_time, refresh_period); } void AcceleratedPresenter::DoSuspend() { diff --git a/ui/surface/accelerated_surface_win.h b/ui/surface/accelerated_surface_win.h index e077aae..166bf5b 100644 --- a/ui/surface/accelerated_surface_win.h +++ b/ui/surface/accelerated_surface_win.h @@ -26,10 +26,9 @@ class Rect; class SURFACE_EXPORT AcceleratedPresenter : public base::RefCountedThreadSafe<AcceleratedPresenter> { public: - typedef base::Callback<void(bool)> CopyCompletionTask; - - typedef base::Callback<void(base::TimeTicks, - base::TimeDelta)> PresentCompletionTask; + typedef base::Callback<void(bool, + base::TimeTicks, + base::TimeDelta)> CompletionTask; explicit AcceleratedPresenter(gfx::PluginWindowHandle window); @@ -46,8 +45,7 @@ class SURFACE_EXPORT AcceleratedPresenter void AsyncPresentAndAcknowledge( const gfx::Size& size, int64 surface_handle, - const CopyCompletionTask& copy_completion_task, - const PresentCompletionTask& present_completion_task); + const CompletionTask& completion_task); // Schedule the presenter to free all its resources. This can be called on any // thread. @@ -83,8 +81,7 @@ class SURFACE_EXPORT AcceleratedPresenter void DoPresentAndAcknowledge( const gfx::Size& size, int64 surface_handle, - const CopyCompletionTask& copy_completion_task, - const PresentCompletionTask& present_completion_task); + const CompletionTask& completion_task); void DoSuspend(); void DoPresent(const base::Closure& composite_task); void DoReleaseSurface(); |