Changeset 230622 in webkit
- Timestamp:
- Apr 12, 2018 10:27:52 PM (6 years ago)
- Location:
- trunk/Tools
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r230621 r230622 1 2018-04-12 Zalan Bujtas <zalan@apple.com> 2 3 [LayoutReloaded] Add support for incremental layout 4 https://bugs.webkit.org/show_bug.cgi?id=184578 5 6 Reviewed by Antti Koivisto. 7 8 * LayoutReloaded/Layout.js: 9 (layout): 10 * LayoutReloaded/LayoutState.js: 11 (LayoutState.prototype.rootContainer): 12 (LayoutState.prototype.setNeedsLayoutById): 13 * LayoutReloaded/Utils.js: 14 (Utils.layoutTreeDump): 15 * LayoutReloaded/test/TestHarness.js: 16 (verifyLayout): 17 (runLayout): 18 (verifyLayoutTreeDump): Deleted. 19 * LayoutReloaded/test/index.html: 20 * LayoutReloaded/test/simple-incremental-layout-with-static-content.html: Added. 21 1 22 2018-04-12 Zalan Bujtas <zalan@apple.com> 2 23 -
trunk/Tools/LayoutReloaded/Layout.js
r230621 r230622 24 24 */ 25 25 26 function layout(window, viewportSize) { 27 let treeBuilder = new TreeBuilder(); 28 let initialContainingBlock = treeBuilder.createTree(window.document, window.renderTreeStructure); 29 let displayBox = new Display.Box(); 30 displayBox.setSize(viewportSize); 31 let layoutState = new LayoutState(initialContainingBlock, displayBox); 32 layoutState.formattingContext(initialContainingBlock).layout(); 33 return Utils.layoutTreeDump(initialContainingBlock, layoutState); 26 function layout(window, viewportSize, layoutState) { 27 let rootContainer = null; 28 if (layoutState) 29 rootContainer = layoutState.rootContainer(); 30 else { 31 // This is top level layout (initial containing block, etc). 32 let treeBuilder = new TreeBuilder(); 33 rootContainer = treeBuilder.createTree(window.document, window.renderTreeStructure); 34 let displayBox = new Display.Box(); 35 displayBox.setSize(viewportSize); 36 layoutState = new LayoutState(rootContainer, displayBox); 37 } 38 layoutState.formattingContext(rootContainer).layout(); 39 return layoutState; 34 40 } -
trunk/Tools/LayoutReloaded/LayoutState.js
r230621 r230622 37 37 } 38 38 39 rootContainer() { 40 return this.m_rootContainer; 41 } 42 39 43 establishedFormattingState(formattingRoot) { 40 44 ASSERT(formattingRoot.establishesFormattingContext()); … … 56 60 ASSERT_NOT_REACHED(); 57 61 return null; 62 } 63 64 // This is for testing only. 65 setNeedsLayoutById(layoutBoxId) { 58 66 } 59 67 -
trunk/Tools/LayoutReloaded/Utils.js
r230621 r230622 550 550 551 551 // "RenderView at (0,0) size 1317x366\n HTML RenderBlock at (0,0) size 1317x116\n BODY RenderBody at (8,8) size 1301x100\n DIV RenderBlock at (0,0) size 100x100\n"; 552 static layoutTreeDump( initialContainingBlock,layoutState) {553 return this._dumpBox(layoutState, initialContainingBlock, 1) + this._dumpTree(layoutState, initialContainingBlock, 2);552 static layoutTreeDump(layoutState) { 553 return this._dumpBox(layoutState, layoutState.rootContainer(), 1) + this._dumpTree(layoutState, layoutState.rootContainer(), 2); 554 554 } 555 555 -
trunk/Tools/LayoutReloaded/test/TestHarness.js
r229473 r230622 24 24 */ 25 25 26 function verifyLayout TreeDump(renderTreeDump, layoutTreeDump)26 function verifyLayout(renderTreeDump) 27 27 { 28 let layoutTreeDump = Utils.layoutTreeDump(layoutState); 28 29 console.log("WebKit:\n" + renderTreeDump + renderTreeDump.length); 29 30 console.log("Reloaded:\n" + layoutTreeDump + layoutTreeDump.length); … … 33 34 } 34 35 35 function runLayout(testWindow ) {36 function runLayout(testWindow, layoutState) { 36 37 testWindow.document.body.offsetHeight; 37 38 let viewportSize = new LayoutSize(parseFloat(testWindow.innerWidth), parseFloat(testWindow.innerHeight)); 38 let layoutTreeDump = layout(testWindow, viewportSize); 39 return verifyLayoutTreeDump(testWindow.simplifiedRenderTree, layoutTreeDump); 39 return layout(testWindow, viewportSize, layoutState); 40 40 } -
trunk/Tools/LayoutReloaded/test/index.html
r230484 r230622 9 9 <script> 10 10 let testFiles = [ 11 "simple-incremental-layout-with-static-content.html", 11 12 "relative-simple.html", 12 13 "relative-bottom.html", … … 117 118 addJS("../FormattingContext/InlineFormatting/Line.js"); 118 119 119 let failedTests = []; 120 121 function printResult(files, currentTestIndex) { 122 let resultContent = currentTestIndex != null ? ("Testing..." + currentTestIndex + " out of " + files.length) : ("Number of tests: " + files.length) ; 123 resultContent += "<br><br>Passed: " + ((currentTestIndex != null ? currentTestIndex : files.length) - failedTests.length) + "<br>Failed: " + failedTests.length; 120 let failedTests = new Array(); 121 122 let isRunningAsyncTest = false; 123 let tests; 124 let currentTestIndex = 0; 125 let subTests = 0; 126 let layoutState = null; 127 128 function collectRenderersWithNeedsLayout() { 129 // TODO: implement it in WebKit. 130 return null; 131 } 132 133 function runAndVerifyLayout(window) { 134 layoutState = runLayout(window, layoutState); 135 return verifyLayout(window.simplifiedRenderTree); 136 } 137 138 class TestRunner { 139 waitUntilDone() { 140 isRunningAsyncTest = true; 141 } 142 143 notifyDone() { 144 let testFrame = document.getElementById("testFrame"); 145 let passed = runAndVerifyLayout(testFrame.contentWindow); 146 finishAndMoveToNextTest(passed); 147 } 148 149 forceLayout() { 150 let testFrame = document.getElementById("testFrame"); 151 let needsLayoutRenderers = collectRenderersWithNeedsLayout(); //testFrame.contentWindow.collectRenderersWithNeedsLayout(); 152 testFrame.contentWindow.document.body.offsetWidth; 153 if (layoutState) { 154 for (let rendererId of needsLayoutRenderers) 155 layoutState.setNeedsLayoutById(rendererId); 156 } 157 let passed = runAndVerifyLayout(testFrame.contentWindow); 158 ++subTests; 159 if (!passed && failedTests.indexOf(currentTestIndex) == -1) 160 failedTests.push(currentTestIndex); 161 printIntermediateResult(); 162 } 163 164 } 165 166 function printFinalResult() { 167 let resultContent = "Number of tests: " + tests.length; 168 resultContent += "<br><br>Passed: " + (tests.length - failedTests.length) + "<br>Failed: " + failedTests.length; 124 169 if (failedTests.length > 0) { 125 170 resultContent += "<br><br>Failed cases:" 126 171 failedTests.forEach(function(item) { 127 resultContent += "<br><a href=\"" + files[item] + "\">" + files[item] + "</a>";172 resultContent += "<br><a href=\"" + tests[item] + "\">" + tests[item] + "</a>"; 128 173 }); 129 174 } … … 131 176 } 132 177 133 function runTest(files, currentTestIndex) { 134 printResult(files, currentTestIndex); 178 function printIntermediateResult() { 179 let resultContent = "Testing..." + currentTestIndex + (subTests > 0 ? "(" + subTests + ")" : "") + " out of " + tests.length; 180 resultContent += "<br><br>Passed: " + (currentTestIndex - failedTests.length) + "<br>Failed: " + failedTests.length; 181 if (failedTests.length > 0) { 182 resultContent += "<br><br>Failed cases:" 183 failedTests.forEach(function(item) { 184 resultContent += "<br><a href=\"" + tests[item] + "\">" + tests[item] + "</a>"; 185 }); 186 } 187 result.innerHTML = resultContent; 188 } 189 190 function finishAndMoveToNextTest(passed) { 191 let testFrame = document.getElementById("testFrame"); 192 testFrame.remove(); 193 initialContainingBlock = null; 194 layoutState = null; 195 subTests = 0; 196 isRunningAsyncTest = false; 197 if (!passed) 198 failedTests.push(currentTestIndex); 199 setTimeout(function() { 200 if (currentTestIndex < tests.length - 1) { 201 printIntermediateResult(); 202 ++currentTestIndex; 203 runTest(tests); 204 return; 205 } 206 printFinalResult(); 207 }, 0); 208 } 209 210 function runTest() { 135 211 let iframe = document.createElement("iframe"); 136 iframe.src = files[currentTestIndex];212 iframe.src = tests[currentTestIndex]; 137 213 iframe.id = "testFrame"; 138 214 iframe.width = window.innerWidth; 139 215 iframe.height = window.innerHeight; 140 216 iframe.onload = function() { 217 if (isRunningAsyncTest) 218 return; 141 219 let testFrame = document.getElementById("testFrame"); 142 let passed = runLayout(testFrame.contentWindow); 143 testFrame.remove(); 144 if (!passed) 145 failedTests.push(currentTestIndex); 146 setTimeout(function() { 147 if (currentTestIndex < files.length - 1) 148 runTest(files, ++currentTestIndex); 149 else 150 printResult(files); 151 }, 0); 220 let passed = runAndVerifyLayout(testFrame.contentWindow); 221 finishAndMoveToNextTest(passed, tests); 152 222 }; 153 223 document.body.appendChild(iframe); 224 iframe.contentWindow.testRunner = new TestRunner(); 154 225 } 155 226 156 227 function runTests() { 157 runTest(debugThis.length ? debugThis : testFiles, 0); 228 tests = debugThis.length ? debugThis : testFiles; 229 runTest(); 158 230 } 159 231 </script>
Note: See TracChangeset
for help on using the changeset viewer.