diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-07-23 09:28:44 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-07-23 09:28:44 +0200 |
commit | 815f1ed417bd26fbe2abbdf20ac5d3423b30796c (patch) | |
tree | 923c9a9e2834ccab60f5caecfb8f0ac410c1dd9e /Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp | |
parent | b4ad5d9d2b96baacd0180ead50de5195ca78af2d (diff) | |
download | qtwebkit-815f1ed417bd26fbe2abbdf20ac5d3423b30796c.tar.gz |
Imported WebKit commit e65cbc5b6ac32627c797e7fc7f46eb7794410c92 (http://svn.webkit.org/repository/webkit/trunk@123308)
New snapshot with better configure tests
Diffstat (limited to 'Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp')
-rw-r--r-- | Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp b/Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp new file mode 100644 index 000000000..2b11f6eb6 --- /dev/null +++ b/Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2012 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "config.h" +#include "WebViewBenchmarkSupportImpl.h" + +#include "FloatSize.h" +#include "FrameView.h" +#include "GraphicsLayer.h" +#include "IntRect.h" +#include "IntSize.h" +#include "WebViewImpl.h" +#include "painting/GraphicsContextBuilder.h" + +#include <public/WebCanvas.h> +#include <wtf/CurrentTime.h> +#include <wtf/OwnPtr.h> +#include <wtf/Vector.h> + +using namespace WebCore; + +namespace WebKit { + +void WebViewBenchmarkSupportImpl::paintLayer(PaintClient* paintClient, GraphicsLayer& layer, const IntRect& clip) +{ + WebSize canvasSize(clip.width(), clip.height()); + OwnPtr<WebCanvas> canvas = adoptPtr(paintClient->createCanvas(canvasSize)); + GraphicsContextBuilder builder(canvas.get()); + + paintClient->willPaint(*canvas.get()); + layer.paintGraphicsLayerContents(builder.context(), clip); + paintClient->didPaint(*canvas.get()); +} + +void WebViewBenchmarkSupportImpl::acceleratedPaintUnclipped(PaintClient* paintClient, GraphicsLayer& layer) +{ + FloatSize layerSize = layer.size(); + IntRect clip(0, 0, layerSize.width(), layerSize.height()); + + paintLayer(paintClient, layer, clip); + + const Vector<GraphicsLayer*>& children = layer.children(); + Vector<GraphicsLayer*>::const_iterator it; + for (it = children.begin(); it != children.end(); ++it) + acceleratedPaintUnclipped(paintClient, **it); +} + +void WebViewBenchmarkSupportImpl::softwarePaint(PaintClient* paintClient, PaintMode paintMode) +{ + WebSize size = m_webViewImpl->size(); + WebRect paintSize; + switch (paintMode) { + case PaintModeEverything: + if (m_webViewImpl->page() && m_webViewImpl->page()->mainFrame()) { + FrameView* view = m_webViewImpl->page()->mainFrame()->view(); + IntSize contentsSize = view->contentsSize(); + paintSize = WebRect(0, 0, contentsSize.width(), contentsSize.height()); + } else + paintSize = WebRect(0, 0, size.width, size.height); + break; + } + + WebSize canvasSize(paintSize.width, paintSize.height); + OwnPtr<WebCanvas> canvas = adoptPtr(paintClient->createCanvas(canvasSize)); + paintClient->willPaint(*canvas.get()); + m_webViewImpl->paint(canvas.get(), paintSize); + paintClient->didPaint(*canvas.get()); +} + +void WebViewBenchmarkSupportImpl::paint(PaintClient* paintClient, PaintMode paintMode) +{ + m_webViewImpl->layout(); + if (!m_webViewImpl->isAcceleratedCompositingActive()) + return softwarePaint(paintClient, paintMode); + GraphicsLayer* layer = m_webViewImpl->rootGraphicsLayer(); + switch (paintMode) { + case PaintModeEverything: + acceleratedPaintUnclipped(paintClient, *layer); + break; + } +} +} |