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 02cdbd4bbe8cae3cc8e785cfb9ea9bd3cf06cbb5..a554fb5371821c44e5a6630171eac7c1b59349ef 100644 |
--- a/content/shell/renderer/test_runner/WebTestProxy.cpp |
+++ b/content/shell/renderer/test_runner/WebTestProxy.cpp |
@@ -484,24 +484,29 @@ void WebTestProxyBase::didCompositeAndReadback(const SkBitmap& bitmap) { |
bitmap.info().fHeight); |
SkCanvas canvas(bitmap); |
DrawSelectionRect(&canvas); |
- base::ResetAndReturn(&m_compositeAndReadbackCallback).Run(bitmap); |
+ m_compositeAndReadbackCallbacks.front().Run(bitmap); |
+ m_compositeAndReadbackCallbacks.pop_front(); |
} |
void WebTestProxyBase::CapturePixelsAsync( |
base::Callback<void(const SkBitmap&)> callback) { |
- m_compositeAndReadbackCallback = callback; |
TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync"); |
+ m_compositeAndReadbackCallbacks.push_back(callback); |
+ |
// Do a layout here because it might leave compositing mode! x.x |
// TODO(danakj): Remove this when we have kForceCompositingMode everywhere. |
webWidget()->layout(); |
- if (!webWidget()->compositeAndReadbackAsync(this)) { |
+ if (!webWidget()->isAcceleratedCompositingActive()) { |
TRACE_EVENT0("shell", |
"WebTestProxyBase::CapturePixelsAsync " |
- "compositeAndReadbackAsync failed"); |
+ "isAcceleratedCompositingActive false"); |
didCompositeAndReadback(SkBitmap()); |
+ return; |
} |
+ |
+ webWidget()->compositeAndReadbackAsync(this); |
} |
void WebTestProxyBase::setLogConsoleOutput(bool enabled) |
@@ -597,8 +602,7 @@ SkCanvas* WebTestProxyBase::canvas() |
return m_canvas.get(); |
} |
-void WebTestProxyBase::display(base::Closure callback) |
-{ |
+void WebTestProxyBase::DisplayForSoftwareMode(const base::Closure& callback) { |
const blink::WebSize& size = webWidget()->size(); |
WebRect rect(0, 0, size.width, size.height); |
m_paintRect = rect; |
@@ -608,15 +612,37 @@ void WebTestProxyBase::display(base::Closure callback) |
callback.Run(); |
} |
+void WebTestProxyBase::DidDisplayAsync(const base::Closure& callback, |
+ const SkBitmap& bitmap) { |
+ 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))); |
+ TRACE_EVENT0("shell", "WebTestProxyBase::displayAsyncThen"); |
+ |
+ // TODO(danakj): Just call CapturePixelsAsyc when we have |
+ // kForceCompositingMode everywhere. |
+ |
+ // Do a layout here because it might leave compositing mode! x.x |
+ webWidget()->layout(); |
abarth-chromium
2014/05/05 22:37:43
Will this change what we're testing by introducing
danakj
2014/05/05 22:46:55
This does add one additional layout.
|
+ |
+ 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; |
+ } |
+ |
+ m_compositeAndReadbackCallbacks.push_back(base::Bind( |
+ &WebTestProxyBase::DidDisplayAsync, base::Unretained(this), callback)); |
+ webWidget()->compositeAndReadbackAsync(this); |
} |
void WebTestProxyBase::discardBackingStore() |