Index: ui/gfx/surface/accelerated_surface_win.cc |
=================================================================== |
--- ui/gfx/surface/accelerated_surface_win.cc (revision 119674) |
+++ ui/gfx/surface/accelerated_surface_win.cc (working copy) |
@@ -122,6 +122,10 @@ |
const int thread_affinity_; |
base::ScopedNativeLibrary d3d_module_; |
+ // Whether the presenter is suspended and therefore unable to represent. Only |
+ // accessed on the UI thread so the lock is unnecessary. |
+ bool suspended_; |
+ |
// The size of the swap chain once any pending resizes have been processed. |
// Only accessed on the UI thread so the lock is unnecessary. |
gfx::Size pending_size_; |
@@ -151,6 +155,7 @@ |
AcceleratedPresenter::AcceleratedPresenter() |
: thread_affinity_(g_present_thread_pool.Pointer()->NextThread()), |
+ suspended_(true), |
num_pending_resizes_(0) { |
g_present_thread_pool.Pointer()->PostTask( |
thread_affinity_, |
@@ -196,6 +201,8 @@ |
size, |
surface_id, |
completion_task)); |
+ |
+ suspended_ = false; |
} |
bool AcceleratedPresenter::Present(gfx::NativeWindow window) { |
@@ -203,6 +210,9 @@ |
HRESULT hr; |
+ if (suspended_) |
+ return false; |
+ |
base::AutoLock locked(lock_); |
if (!device_) |
@@ -265,6 +275,8 @@ |
base::Bind(&AcceleratedPresenter::DoResize, |
base::Unretained(this), |
gfx::Size(1, 1))); |
+ |
+ suspended_ = true; |
} |
void AcceleratedPresenter::DoInitialize() { |
@@ -499,3 +511,8 @@ |
bool AcceleratedSurface::Present(HWND window) { |
return presenter_->Present(window); |
} |
+ |
+void AcceleratedSurface::Suspend() { |
+ presenter_->Suspend(); |
+} |
+ |