diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-09 16:52:23 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-09 16:52:23 +0000 |
commit | ef6532eeac4fc80d0913a1f0e49df2549e4d5260 (patch) | |
tree | ef64aca9c043bf77cf686621dd8756674b87f3b3 | |
parent | e354ab30b1b6606f8d0ed41c5affde0607562ce4 (diff) | |
download | chromium_src-ef6532eeac4fc80d0913a1f0e49df2549e4d5260.zip chromium_src-ef6532eeac4fc80d0913a1f0e49df2549e4d5260.tar.gz chromium_src-ef6532eeac4fc80d0913a1f0e49df2549e4d5260.tar.bz2 |
Make displayAsyncThen use the CompositeAndReadbackAsync path.
This avoids the use of the deprecated synchronous CompositeAndReadback
when in composited mode.
Depends on: https://codereview.chromium.org/272683003/
Depends on: https://codereview.chromium.org/262323002/
R=abarth@chromium.org, enne@chromium.org, piman@chromium.org, enne, piman
BUG=370130
Review URL: https://codereview.chromium.org/266243002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@269338 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/shell/renderer/test_runner/WebTestProxy.cpp | 59 | ||||
-rw-r--r-- | content/shell/renderer/test_runner/WebTestProxy.h | 7 |
2 files changed, 43 insertions, 23 deletions
diff --git a/content/shell/renderer/test_runner/WebTestProxy.cpp b/content/shell/renderer/test_runner/WebTestProxy.cpp index 4295806..1a85a23 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() diff --git a/content/shell/renderer/test_runner/WebTestProxy.h b/content/shell/renderer/test_runner/WebTestProxy.h index 7ecb38a..adff595 100644 --- a/content/shell/renderer/test_runner/WebTestProxy.h +++ b/content/shell/renderer/test_runner/WebTestProxy.h @@ -5,6 +5,7 @@ #ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTPROXY_H_ #define CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTPROXY_H_ +#include <deque> #include <map> #include <string> @@ -109,7 +110,6 @@ public: void didCloseChooser(); bool isChooserShown(); - void display(base::Closure callback); void displayAsyncThen(base::Closure callback); void discardBackingStore(); @@ -195,6 +195,8 @@ private: void invalidateAll(); void animateNow(); void DrawSelectionRect(SkCanvas* canvas); + void DisplayForSoftwareMode(const base::Closure& callback); + void DidDisplayAsync(const base::Closure& callback, const SkBitmap& bitmap); blink::WebWidget* webWidget(); @@ -214,7 +216,8 @@ private: bool m_animateScheduled; std::map<unsigned, std::string> m_resourceIdentifierMap; std::map<unsigned, blink::WebURLRequest> m_requestMap; - base::Callback<void(const SkBitmap&)> m_compositeAndReadbackCallback; + std::deque<base::Callback<void(const SkBitmap&)> > + m_compositeAndReadbackCallbacks; bool m_logConsoleOutput; int m_chooserCount; |