Commit 0c42c749 authored by enne@chromium.org's avatar enne@chromium.org

Make WebTestProxy handle printing + compositing mode

CapturePixels has a special branch for printing code, but
CapturePixelsAsync before this patch doesn't.  Because WebKitTestRunner
calls the async version in compositing mode, printing tests fail if it
doesn't also handle this case.

The stateful canvas() accessor that the paintPagesWithBoundaries
modifies is a bit of a code smell that previously existed, but it can't
be easily cleaned up until the CapturePixels function gets removed.

BUG=361729

Review URL: https://codereview.chromium.org/274253002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@269867 0039d316-1c4b-4281-b951-d872f2087c98
parent e0262cc2
...@@ -66,20 +66,6 @@ private: ...@@ -66,20 +66,6 @@ private:
CallbackMethodType m_callback; CallbackMethodType m_callback;
}; };
class ClosureTask : public WebMethodTask<WebTestProxyBase> {
public:
ClosureTask(WebTestProxyBase* object, base::Closure callback)
: WebMethodTask<WebTestProxyBase>(object), m_callback(callback) {}
virtual void runIfValid() OVERRIDE {
if (!m_callback.is_null())
m_callback.Run();
}
private:
base::Closure m_callback;
};
void printFrameDescription(WebTestDelegate* delegate, WebFrame* frame) void printFrameDescription(WebTestDelegate* delegate, WebFrame* frame)
{ {
string name8 = frame->uniqueName().utf8(); string name8 = frame->uniqueName().utf8();
...@@ -493,12 +479,33 @@ void WebTestProxyBase::didCompositeAndReadback(const SkBitmap& bitmap) { ...@@ -493,12 +479,33 @@ void WebTestProxyBase::didCompositeAndReadback(const SkBitmap& bitmap) {
m_compositeAndReadbackCallbacks.pop_front(); m_compositeAndReadbackCallbacks.pop_front();
} }
void WebTestProxyBase::CapturePixelsForPrinting(
base::Callback<void(const SkBitmap&)> callback) {
// TODO(enne): get rid of stateful canvas().
webWidget()->layout();
paintPagesWithBoundaries();
DrawSelectionRect(canvas());
SkBaseDevice* device = skia::GetTopDevice(*canvas());
const SkBitmap& bitmap = device->accessBitmap(false);
callback.Run(bitmap);
}
void WebTestProxyBase::CapturePixelsAsync( void WebTestProxyBase::CapturePixelsAsync(
base::Callback<void(const SkBitmap&)> callback) { base::Callback<void(const SkBitmap&)> callback) {
TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync"); TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync");
DCHECK(webWidget()->isAcceleratedCompositingActive()); DCHECK(webWidget()->isAcceleratedCompositingActive());
DCHECK(!callback.is_null()); DCHECK(!callback.is_null());
if (m_testInterfaces->testRunner()->isPrinting()) {
base::MessageLoopProxy::current()->PostTask(
FROM_HERE,
base::Bind(&WebTestProxyBase::CapturePixelsForPrinting,
base::Unretained(this),
callback));
return;
}
m_compositeAndReadbackCallbacks.push_back(callback); m_compositeAndReadbackCallbacks.push_back(callback);
webWidget()->compositeAndReadbackAsync(this); webWidget()->compositeAndReadbackAsync(this);
} }
...@@ -623,11 +630,11 @@ void WebTestProxyBase::displayAsyncThen(base::Closure callback) { ...@@ -623,11 +630,11 @@ void WebTestProxyBase::displayAsyncThen(base::Closure callback) {
TRACE_EVENT0("shell", TRACE_EVENT0("shell",
"WebTestProxyBase::displayAsyncThen " "WebTestProxyBase::displayAsyncThen "
"isAcceleratedCompositingActive false"); "isAcceleratedCompositingActive false");
m_delegate->postTask( base::MessageLoopProxy::current()->PostTask(
new ClosureTask(this, FROM_HERE,
base::Bind(&WebTestProxyBase::DisplayForSoftwareMode, base::Bind(&WebTestProxyBase::DisplayForSoftwareMode,
base::Unretained(this), base::Unretained(this),
callback))); callback));
return; return;
} }
......
...@@ -99,6 +99,8 @@ public: ...@@ -99,6 +99,8 @@ public:
std::string captureTree(bool debugRenderTree); std::string captureTree(bool debugRenderTree);
SkCanvas* capturePixels(); SkCanvas* capturePixels();
void CapturePixelsForPrinting(
base::Callback<void(const SkBitmap&)> callback);
void CapturePixelsAsync(base::Callback<void(const SkBitmap&)> callback); void CapturePixelsAsync(base::Callback<void(const SkBitmap&)> callback);
void setLogConsoleOutput(bool enabled); void setLogConsoleOutput(bool enabled);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment