Chromium Code Reviews| 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() |