Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2058)

Unified Diff: content/shell/renderer/test_runner/WebTestProxy.cpp

Issue 266243002: Make displayAsyncThen use the CompositeAndReadbackAsync path. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: displayasync: rebase Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/shell/renderer/test_runner/WebTestProxy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 4295806e7b6ae075fc0ea01de9c3a8a7a0227262..1a85a23b2410dd473717fe5ffa159fb858939355 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()
« no previous file with comments | « content/shell/renderer/test_runner/WebTestProxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698