summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-09 16:52:23 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-09 16:52:23 +0000
commitef6532eeac4fc80d0913a1f0e49df2549e4d5260 (patch)
treeef64aca9c043bf77cf686621dd8756674b87f3b3
parente354ab30b1b6606f8d0ed41c5affde0607562ce4 (diff)
downloadchromium_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.cpp59
-rw-r--r--content/shell/renderer/test_runner/WebTestProxy.h7
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;