haikuwebkit/LayoutTests/displaylists/canvas-display-list.html

45 lines
1.2 KiB
HTML
Raw Permalink Normal View History

Allow canvas to use display-list drawing for testing https://bugs.webkit.org/show_bug.cgi?id=153475 Reviewed by Dean Jackson. Source/WebCore: Optionally have 2D <canvas> use display-list drawing, which is only enabled via Internals for now. Support displayListAsText() and replayDisplayListAsText() on canvas, so we can use it to test playback optimizations. [Note that displayListAsText() always returns an empty string currently, because the display list is cleared when the canvas is painted to the page.] Display list rendering is implemented by giving CanvasRenderingContext2D an optional DisplayListDrawingContext, which packages up a display list, recorder and recording context. The existing paintRenderingResultsToCanvas() is overridden to replay the recorded display list into the primary canvas context. Tracked replay display lists are stored in a static map, keyed by the CanvasRenderingContext2D. Test: displaylists/canvas-display-list.html * html/HTMLCanvasElement.cpp: (WebCore::HTMLCanvasElement::HTMLCanvasElement): (WebCore::HTMLCanvasElement::getContext): (WebCore::HTMLCanvasElement::paint): (WebCore::HTMLCanvasElement::setUsesDisplayListDrawing): (WebCore::HTMLCanvasElement::setTracksDisplayListReplay): (WebCore::HTMLCanvasElement::displayListAsText): (WebCore::HTMLCanvasElement::replayDisplayListAsText): * html/HTMLCanvasElement.h: * html/canvas/CanvasRenderingContext.h: * html/canvas/CanvasRenderingContext2D.cpp: (WebCore::DisplayListDrawingContext::DisplayListDrawingContext): (WebCore::contextDisplayListMap): (WebCore::CanvasRenderingContext2D::~CanvasRenderingContext2D): (WebCore::CanvasRenderingContext2D::setTracksDisplayListReplay): (WebCore::CanvasRenderingContext2D::displayListAsText): (WebCore::CanvasRenderingContext2D::replayDisplayListAsText): (WebCore::CanvasRenderingContext2D::paintRenderingResultsToCanvas): (WebCore::CanvasRenderingContext2D::drawingContext): (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D): Deleted. * html/canvas/CanvasRenderingContext2D.h: * testing/Internals.cpp: (WebCore::Internals::setElementUsesDisplayListDrawing): (WebCore::Internals::setElementTracksDisplayListReplay): (WebCore::Internals::displayListForElement): (WebCore::Internals::replayDisplayListForElement): LayoutTests: Simple canvas-based display list test. * displaylists/canvas-display-list-expected.txt: Added. * displaylists/canvas-display-list.html: Added. Canonical link: https://commits.webkit.org/171593@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195646 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-27 01:53:18 +00:00
<!DOCTYPE html>
<html>
<head>
<script>
function drawCanvas()
{
var ctx = document.getElementById('canvas').getContext('2d');
ctx.fillStyle = "rgb(200,0,0)";
ctx.fillRect (10, 10, 55, 50);
ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
ctx.fillRect (30, 30, 55, 50);
}
if (window.testRunner)
testRunner.dumpAsText();
var canvas;
function doTest()
{
document.body.offsetWidth;
canvas = document.getElementById('canvas');
if (window.internals) {
internals.setElementUsesDisplayListDrawing(canvas, true);
internals.setElementTracksDisplayListReplay(canvas, true);
}
drawCanvas();
if (window.testRunner)
Tools: Rename TestRunner.display() to TestRunner::displayAndTrackRepaints() https://bugs.webkit.org/show_bug.cgi?id=171641 Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2017-05-04 Reviewed by Simon Fraser. The plan is to add back the TestRunner.display() which does the display only without track repaints. * DumpRenderTree/DumpRenderTree.h: * DumpRenderTree/TestRunner.cpp: (displayAndTrackRepaintsCallback): (TestRunner::staticFunctions): (displayCallback): Deleted. (displayInvalidatedRegionCallback): Deleted. * DumpRenderTree/TestRunner.h: * DumpRenderTree/mac/DumpRenderTree.mm: (displayWebView): (displayAndTrackRepaintsWebView): * DumpRenderTree/mac/TestRunnerMac.mm: (TestRunner::displayAndTrackRepaints): (TestRunner::display): Deleted. * DumpRenderTree/win/TestRunnerWin.cpp: (TestRunner::displayAndTrackRepaints): (TestRunner::display): Deleted. * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: * WebKitTestRunner/InjectedBundle/TestRunner.cpp: (WTR::TestRunner::displayAndTrackRepaints): (WTR::TestRunner::display): Deleted. * WebKitTestRunner/InjectedBundle/TestRunner.h: LayoutTests: Rename testRunner.displayAndTrackRepaints() to testRunner.displayAndTrackRepaints() https://bugs.webkit.org/show_bug.cgi?id=171641 Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2017-05-04 Reviewed by Simon Fraser. Replace all the calls to testRunner.displayAndTrackRepaints() by testRunner.displayAndTrackRepaints() Replace all the calls to testRunner.displayInvalidatedRegion() by testRunner.displayAndTrackRepaints() since the former is a copy of the later. * compositing/clip-change.html: * compositing/geometry/foreground-offset-change.html: * compositing/geometry/limit-layer-bounds-transformed-overflow.html: * compositing/iframes/become-composited-nested-iframes.html: * compositing/iframes/become-overlapped-iframe.html: * compositing/iframes/connect-compositing-iframe-delayed.html: * compositing/iframes/connect-compositing-iframe.html: * compositing/iframes/connect-compositing-iframe2.html: * compositing/iframes/connect-compositing-iframe3.html: * compositing/iframes/enter-compositing-iframe.html: * compositing/iframes/iframe-content-flipping.html: * compositing/iframes/iframe-resize.html: * compositing/iframes/iframe-size-to-zero.html: * compositing/iframes/iframe-src-change.html: * compositing/iframes/invisible-nested-iframe-hide.html: * compositing/iframes/invisible-nested-iframe-show.html: * compositing/iframes/leave-compositing-iframe.html: * compositing/iframes/overlapped-iframe-iframe.html: * compositing/iframes/overlapped-iframe.html: * compositing/iframes/overlapped-nested-iframes.html: * compositing/iframes/repaint-after-losing-scrollbars.html: * compositing/iframes/resources/fixed-position-subframe.html: * compositing/iframes/resources/fixed-position-transformed-subframe.html: * compositing/iframes/resources/scrollgrandchild-inner.html: * compositing/iframes/scrolling-iframe.html: * compositing/overflow/content-gains-scrollbars.html: * compositing/overflow/content-loses-scrollbars.html: * compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html: * compositing/overflow/overflow-scrollbar-layers.html: * compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html: * compositing/overflow/repaint-after-losing-scrollbars.html: * compositing/patterns/direct-pattern-compositing-add-text-expected.html: * compositing/patterns/direct-pattern-compositing-add-text.html: * compositing/patterns/direct-pattern-compositing-change-expected.html: * compositing/patterns/direct-pattern-compositing-change.html: * compositing/patterns/direct-pattern-compositing-load-expected.html: * compositing/patterns/direct-pattern-compositing-load.html: * compositing/plugins/invalidate_rect.html: * compositing/repaint/iframes/composited-iframe-with-fixed-background-doc-repaint.html: * compositing/repaint/iframes/compositing-iframe-scroll-repaint.html: * compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint.html: * compositing/repaint/newly-composited-on-scroll.html: * compositing/repaint/newly-composited-repaint-rect.html: * compositing/repaint/page-scale-repaint.html: * compositing/repaint/requires-backing-repaint.html: * compositing/repaint/transform-style-change.html: * compositing/rtl/rtl-overflow-invalidation.html: * compositing/scroll-painted-composited-content.html: * compositing/tiling/huge-layer-resize.html: * compositing/video-page-visibility.html: * compositing/video/video-with-invalid-source.html: * compositing/webgl/webgl-repaint.html: * css3/filters/multiple-filters-invalidation.html: * css3/flexbox/repaint-column-reverse.html: * css3/flexbox/repaint-during-resize-no-flex.html: * css3/flexbox/repaint-rtl-column.html: * css3/flexbox/repaint.html: * displaylists/canvas-display-list.html: * displaylists/resources/dump-target-display-list.js: (doTest): * displaylists/resources/dump-target-replay-list.js: (doTest): * fast/animation/request-animation-frame-detach-element.html: * fast/animation/request-animation-frame-detach-element2.html: * fast/animation/request-animation-frame-during-modal.html: * fast/animation/request-animation-frame-iframe.html: * fast/animation/request-animation-frame-iframe2.html: * fast/animation/script-tests/request-animation-frame-cancel.js: * fast/animation/script-tests/request-animation-frame-cancel2.js: * fast/animation/script-tests/request-animation-frame-disabled.js: * fast/animation/script-tests/request-animation-frame-prefix.js: (window.webkitRequestAnimationFrame): (window.testRunner.window.setTimeout): * fast/animation/script-tests/request-animation-frame-time-unit.js: (window.requestAnimationFrame): * fast/animation/script-tests/request-animation-frame-timestamps-advance.js: (window.requestAnimationFrame): (window.testRunner.window.setTimeout): * fast/animation/script-tests/request-animation-frame-timestamps.js: * fast/animation/script-tests/request-animation-frame-within-callback.js: * fast/animation/script-tests/request-animation-frame.js: * fast/backgrounds/obscured-background-child-style-change-expected.html: * fast/backgrounds/obscured-background-child-style-change.html: * fast/backgrounds/solid-color-context-restore.html: * fast/canvas/canvas-as-image-incremental-repaint.html: * fast/canvas/canvas-incremental-repaint-2.html: * fast/canvas/canvas-incremental-repaint.html: * fast/canvas/canvas-resize-after-paint.html: * fast/canvas/resources/repaint.js: (runRepaintTest): * fast/canvas/script-tests/canvas-imageSmoothingEnabled-repaint.js: (TestControllerPaint): * fast/canvas/webgl/canvas-test.html: * fast/canvas/webgl/webgl-layer-update.html: * fast/css/pseudostyle-anonymous-text.html: * fast/css/relative-positioned-block-crash.html: * fast/dom/Window/post-message-crash.html: * fast/dom/Window/web-timing-minimal-performance-now.html: * fast/dynamic/containing-block-change.html: * fast/dynamic/layer-no-longer-paginated.html: * fast/events/touch/gesture/pad-gesture-cancel.js: * fast/events/touch/gesture/pad-gesture-fling.js: * fast/forms/hidden-listbox.html: * fast/forms/listbox-clip.html: * fast/frames/inline-object-inside-frameset.html: * fast/frames/transparent-scrollbar.html: * fast/images/animated-background-image-crash.html: * fast/layers/add-layer-with-nested-stacking.html: * fast/layers/inline-dirty-z-order-lists.html: * fast/layers/layer-content-visibility-change.html: * fast/layers/nested-layers-1.html: * fast/layers/nested-layers-2.html: * fast/layers/nested-layers-3.html: * fast/layers/nested-layers-4.html: * fast/layers/remove-layer-with-nested-stacking.html: * fast/overflow/hidden-scrollbar-resize.html: * fast/reflections/inline-crash.html: * fast/repaint/animation-after-layer-scroll.html: * fast/repaint/background-shorthand-with-gradient-and-height-changes.html: * fast/repaint/fixed-child-move-after-scroll.html: * fast/repaint/fixed-child-of-fixed-move-after-scroll.html: * fast/repaint/fixed-child-of-transformed-move-after-scroll.html: * fast/repaint/fixed-move-after-scroll.html: * fast/repaint/no-animation-outside-viewport-subframe.html: * fast/repaint/no-animation-outside-viewport.html: * fast/repaint/obscured-background-no-repaint.html: * fast/repaint/overflow-hidden-in-overflow-hidden-scrolled.html: * fast/repaint/renderer-destruction-by-invalidateSelection-crash.html: * fast/repaint/repaint-during-scroll-with-zoom.html: * fast/repaint/resources/fixed-move-after-keyboard-scroll-iframe.html: * fast/repaint/resources/iframe-scroll-repaint-iframe.html: * fast/repaint/resources/line-flow-with-floats.js: (beginTest): * fast/repaint/resources/repaint.js: (runRepaintTest): * fast/repaint/table-overflow-hidden-in-overflow-hidden-scrolled.html: * fast/replaced/width100percent-textarea.html: * fast/scrolling/scrollbar-tickmarks-hittest.html: * fast/table/border-collapsing/cached-69296.html: * fast/table/border-collapsing/cached-cell-append.html: * fast/table/border-collapsing/cached-cell-remove.html: * fast/table/border-collapsing/cached-change-cell-border-color.html: * fast/table/border-collapsing/cached-change-cell-border-width.html: * fast/table/border-collapsing/cached-change-cell-sl-border-color.html: * fast/table/border-collapsing/cached-change-col-border-color.html: * fast/table/border-collapsing/cached-change-col-border-width.html: * fast/table/border-collapsing/cached-change-colgroup-border-color.html: * fast/table/border-collapsing/cached-change-colgroup-border-width.html: * fast/table/border-collapsing/cached-change-row-border-color.html: * fast/table/border-collapsing/cached-change-row-border-width.html: * fast/table/border-collapsing/cached-change-table-border-color.html: * fast/table/border-collapsing/cached-change-table-border-width.html: * fast/table/border-collapsing/cached-change-tbody-border-color.html: * fast/table/border-collapsing/cached-change-tbody-border-width.html: * fast/table/empty-section-crash.html: * fast/text/font-initial.html: * fast/text/international/harfbuzz-runs-with-no-glyph.html: * fast/text/text-shadow-extreme-value.html: * http/tests/misc/slow-loading-image-in-pattern.html: * media/audio-repaint.html: * media/media-document-audio-repaint.html: * plugins/windowless_plugin_paint_test.html: * scrollbars/scrollbar-percent-padding-crash.html: * svg/custom/non-scaling-stroke-update.svg: * svg/custom/stale-resource-data-crash.svg: Canonical link: https://commits.webkit.org/188591@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@216211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-05-04 21:46:39 +00:00
testRunner.displayAndTrackRepaints();
Allow canvas to use display-list drawing for testing https://bugs.webkit.org/show_bug.cgi?id=153475 Reviewed by Dean Jackson. Source/WebCore: Optionally have 2D <canvas> use display-list drawing, which is only enabled via Internals for now. Support displayListAsText() and replayDisplayListAsText() on canvas, so we can use it to test playback optimizations. [Note that displayListAsText() always returns an empty string currently, because the display list is cleared when the canvas is painted to the page.] Display list rendering is implemented by giving CanvasRenderingContext2D an optional DisplayListDrawingContext, which packages up a display list, recorder and recording context. The existing paintRenderingResultsToCanvas() is overridden to replay the recorded display list into the primary canvas context. Tracked replay display lists are stored in a static map, keyed by the CanvasRenderingContext2D. Test: displaylists/canvas-display-list.html * html/HTMLCanvasElement.cpp: (WebCore::HTMLCanvasElement::HTMLCanvasElement): (WebCore::HTMLCanvasElement::getContext): (WebCore::HTMLCanvasElement::paint): (WebCore::HTMLCanvasElement::setUsesDisplayListDrawing): (WebCore::HTMLCanvasElement::setTracksDisplayListReplay): (WebCore::HTMLCanvasElement::displayListAsText): (WebCore::HTMLCanvasElement::replayDisplayListAsText): * html/HTMLCanvasElement.h: * html/canvas/CanvasRenderingContext.h: * html/canvas/CanvasRenderingContext2D.cpp: (WebCore::DisplayListDrawingContext::DisplayListDrawingContext): (WebCore::contextDisplayListMap): (WebCore::CanvasRenderingContext2D::~CanvasRenderingContext2D): (WebCore::CanvasRenderingContext2D::setTracksDisplayListReplay): (WebCore::CanvasRenderingContext2D::displayListAsText): (WebCore::CanvasRenderingContext2D::replayDisplayListAsText): (WebCore::CanvasRenderingContext2D::paintRenderingResultsToCanvas): (WebCore::CanvasRenderingContext2D::drawingContext): (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D): Deleted. * html/canvas/CanvasRenderingContext2D.h: * testing/Internals.cpp: (WebCore::Internals::setElementUsesDisplayListDrawing): (WebCore::Internals::setElementTracksDisplayListReplay): (WebCore::Internals::displayListForElement): (WebCore::Internals::replayDisplayListForElement): LayoutTests: Simple canvas-based display list test. * displaylists/canvas-display-list-expected.txt: Added. * displaylists/canvas-display-list.html: Added. Canonical link: https://commits.webkit.org/171593@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195646 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-27 01:53:18 +00:00
if (window.internals)
document.getElementById('output').textContent = internals.replayDisplayListForElement(canvas);
}
window.addEventListener('load', doTest, false);
</script>
</head>
<body>
<canvas id="canvas" width="300" height="200"></canvas>
<pre id="output"></pre>
</body>
</html>