Index: content/shell/renderer/test_runner/WebTestProxy.cpp |
diff --git a/content/shell/renderer/test_runner/WebTestProxy.cpp b/content/shell/renderer/test_runner/WebTestProxy.cpp |
index 4295806e7b6ae075fc0ea01de9c3a8a7a0227262..1a85a23b2410dd473717fe5ffa159fb858939355 100644 |
--- a/content/shell/renderer/test_runner/WebTestProxy.cpp |
+++ b/content/shell/renderer/test_runner/WebTestProxy.cpp |
@@ -488,8 +488,9 @@ void WebTestProxyBase::didCompositeAndReadback(const SkBitmap& bitmap) { |
bitmap.info().fHeight); |
SkCanvas canvas(bitmap); |
DrawSelectionRect(&canvas); |
- DCHECK(!m_compositeAndReadbackCallback.is_null()); |
- base::ResetAndReturn(&m_compositeAndReadbackCallback).Run(bitmap); |
+ DCHECK(!m_compositeAndReadbackCallbacks.empty()); |
+ m_compositeAndReadbackCallbacks.front().Run(bitmap); |
+ m_compositeAndReadbackCallbacks.pop_front(); |
} |
void WebTestProxyBase::CapturePixelsAsync( |
@@ -498,8 +499,7 @@ void WebTestProxyBase::CapturePixelsAsync( |
DCHECK(webWidget()->isAcceleratedCompositingActive()); |
DCHECK(!callback.is_null()); |
- DCHECK(m_compositeAndReadbackCallback.is_null()); |
- m_compositeAndReadbackCallback = callback; |
+ m_compositeAndReadbackCallbacks.push_back(callback); |
webWidget()->compositeAndReadbackAsync(this); |
} |
@@ -596,26 +596,43 @@ SkCanvas* WebTestProxyBase::canvas() |
return m_canvas.get(); |
} |
-void WebTestProxyBase::display(base::Closure callback) |
-{ |
- const blink::WebSize& size = webWidget()->size(); |
- WebRect rect(0, 0, size.width, size.height); |
- m_paintRect = rect; |
- paintInvalidatedRegion(); |
+void WebTestProxyBase::DisplayForSoftwareMode(const base::Closure& callback) { |
+ const blink::WebSize& size = webWidget()->size(); |
+ WebRect rect(0, 0, size.width, size.height); |
+ m_paintRect = rect; |
+ paintInvalidatedRegion(); |
- if (!callback.is_null()) |
- callback.Run(); |
+ if (!callback.is_null()) |
+ callback.Run(); |
} |
-void WebTestProxyBase::displayAsyncThen(base::Closure callback) |
-{ |
- // TODO(enne): When compositing, this should invoke a real rAF, paint, |
- // and commit. For now, just make sure that displayAsync is actually |
- // async so that callers can't depend on synchronous behavior. |
- m_delegate->postTask(new ClosureTask( |
- this, |
- base::Bind( |
- &WebTestProxyBase::display, base::Unretained(this), callback))); |
+void WebTestProxyBase::DidDisplayAsync(const base::Closure& callback, |
+ const SkBitmap& bitmap) { |
+ // Verify we actually composited. |
+ CHECK_NE(0, bitmap.info().fWidth); |
+ CHECK_NE(0, bitmap.info().fHeight); |
+ if (!callback.is_null()) |
+ callback.Run(); |
+} |
+ |
+void WebTestProxyBase::displayAsyncThen(base::Closure callback) { |
+ TRACE_EVENT0("shell", "WebTestProxyBase::displayAsyncThen"); |
+ |
+ // TODO(danakj): Remove when we have kForceCompositingMode everywhere. |
+ if (!webWidget()->isAcceleratedCompositingActive()) { |
+ TRACE_EVENT0("shell", |
+ "WebTestProxyBase::displayAsyncThen " |
+ "isAcceleratedCompositingActive false"); |
+ m_delegate->postTask( |
+ new ClosureTask(this, |
+ base::Bind(&WebTestProxyBase::DisplayForSoftwareMode, |
+ base::Unretained(this), |
+ callback))); |
+ return; |
+ } |
+ |
+ CapturePixelsAsync(base::Bind( |
+ &WebTestProxyBase::DidDisplayAsync, base::Unretained(this), callback)); |
} |
void WebTestProxyBase::discardBackingStore() |