summaryrefslogtreecommitdiffstats
path: root/ui/surface
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-20 22:30:10 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-20 22:30:10 +0000
commit1fd6e69803e5512f07f955c354d2254e59e78474 (patch)
tree8e70b71c5912c92a7fd94eaa608ef2f55a51646c /ui/surface
parented55546b488666e060f10b37785b64503b96eb92 (diff)
downloadchromium_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/surface')
-rw-r--r--ui/surface/accelerated_surface_win.cc59
-rw-r--r--ui/surface/accelerated_surface_win.h13
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();