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..e44556ddc0363e1d7e96f2434b8d7394e9a1a028 100644 |
| --- a/content/shell/renderer/test_runner/WebTestProxy.cpp |
| +++ b/content/shell/renderer/test_runner/WebTestProxy.cpp |
| @@ -489,19 +489,23 @@ void WebTestProxyBase::didCompositeAndReadback(const SkBitmap& bitmap) { |
| void WebTestProxyBase::CapturePixelsAsync( |
| base::Callback<void(const SkBitmap&)> callback) { |
| - m_compositeAndReadbackCallback = callback; |
| TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync"); |
| + m_compositeAndReadbackCallback = 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()) { |
|
danakj
2014/05/05 18:35:17
This was the only way that compositeAndReadbackAsy
|
| TRACE_EVENT0("shell", |
| "WebTestProxyBase::CapturePixelsAsync " |
| - "compositeAndReadbackAsync failed"); |
| + "isAcceleratedCompositingActive false"); |
| didCompositeAndReadback(SkBitmap()); |
| + return; |
| } |
| + |
| + webWidget()->compositeAndReadbackAsync(this); |
| } |
| void WebTestProxyBase::setLogConsoleOutput(bool enabled) |
| @@ -597,8 +601,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 +611,33 @@ 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(); |
| + |
| + if (!webWidget()->isAcceleratedCompositingActive()) { |
| + TRACE_EVENT0("shell", |
| + "WebTestProxyBase::displayAsyncThen " |
| + "isAcceleratedCompositingActive false"); |
| + DisplayForSoftwareMode(callback); |
| + return; |
| + } |
| + |
| + m_compositeAndReadbackCallback = base::Bind( |
|
danakj
2014/05/05 18:35:17
I could call CapturePixelsAsync here instead of se
enne (OOO)
2014/05/05 19:55:13
Yeah, I think that'd be cleaner. Can you just mov
|
| + &WebTestProxyBase::DidDisplayAsync, base::Unretained(this), callback); |
| + webWidget()->compositeAndReadbackAsync(this); |
| } |
| void WebTestProxyBase::discardBackingStore() |