RESOLVED FIXED 40779
[Chromium] Perf regression following landing of HTML5 parser
https://bugs.webkit.org/show_bug.cgi?id=40779
Summary [Chromium] Perf regression following landing of HTML5 parser
Andrei Popescu
Reported Thursday, June 17, 2010 4:41:38 PM UTC
A new HTML 5 parser landed in WebKit in r61234: http://trac.webkit.org/changeset/61234 This new parser was turned on in Chromium in http://src.chromium.org/viewvc/chrome?view=rev&revision=49936 Ever since that change, the Vista and OSX 10.6 perf bots started failing. The Vista bot consistently fails, while the OSX 10.6 one is flaky: http://build.chromium.org/buildbot/waterfall/builders/Mac10.6%20Perf(1)/builds/4306 http://build.chromium.org/buildbot/waterfall/builders/Vista%20Perf%20(1)/builds/5397 See also the first regression in the following graph: http://build.chromium.org/buildbot/perf/vista-release-dual-core/intl1/report.html?history=150&rev=-1
Attachments
Patch (1.69 KB, patch)
2010-06-17 15:56 PDT, Tony Gentilcore
no flags
Patch (5.20 KB, patch)
2010-06-17 16:52 PDT, Tony Gentilcore
no flags
Patch (5.20 KB, patch)
2010-06-17 17:04 PDT, Tony Gentilcore
eric: review+
eric: commit-queue+
Tony Gentilcore
Comment 1 Thursday, June 17, 2010 6:18:47 PM UTC
Adding some more data to the bug. First, this only seems to happen on the Vista cycler (XP is fine). Second, the regression seems to be due to a few outliers, rather than a consistent move across all runs (see below). This is a good thing as it means it is probably a bug rather than something inherently slower about the new parser. Sample run times: [68,65,149,41,49,60,14,183,49,139,104,114,230,140,90,224,84,70,191,38,65,69,102,209,77,53,148,137,95,28,43365,39,61398,63,129,170,98,131,38,168,85,43696,84,203,220,143,93,102,403,199,258,306,210,294,122,312,27,10,74,27,24,47,11,111,28,89,69,67,92,64,56,122,72,49,119,30,40,43,69,129,41,34,88,98,76,18,108,48,215,50,76,115,76,78,31,80,47,21389,64,149,168,115,72,60,280,140,216,214,168,214,90,231,28,10,74,28,25,44,10,112,30,90,70,68,96,63,58,123,71,45,119,28,39,40,72,132,41,34,83,97,76,18,108,48,214,52,76,118,75,75,30,79,47,79,65,147,167,117,61,60,278,137,221,203,157,206,89,227,28,11,74,28,25,43,9,112,28,90,69,67,92,64,58,122,69,45,121,28,38,40,70,131,41,34,83,122,77,17,109,48,215,51,77,117,76,77,31,79,47,79,64,148,166,114,61,60,279,135,218,199,175,206,88,229,27,10,73,28,25,44,10,111,29,90,69,70,92,66,58,125,69,45,118,28,38,40,72,130,41,35,83,121,74,18,111,29,216,52,76,116,74,76,31,81,47,79,64,148,167,114,62,60,282,139,231,205,165,206,89,229,28,10,74,28,26,44,10,113,29,90,70,68,96,65,59,123,71,59,129,28,40,41,74,133,42,35,84,97,76,19,110,29,217,53,78,117,76,76,31,80,47,80,67,149,167,114,61,60,283,139,221,207,158,209,89,228,27,13,74,29,26,45,10,113,30,91,69,68,93,63,59,125,70,46,120,27,39,40,73,130,42,37,84,123,75,18,110,47,217,52,77,117,75,76,31,79,47,80,65,150,167,115,62,60,284,139,221,204,161,207,91,231,29,12,77,29,25,44,10,117,29,90,69,69,93,64,60,124,71,46,120,29,39,43,73,132,42,35,84,97,75,18,110,49,218,52,77,118,75,76,32,81,48,80,64,148,167,119,62,61,284,140,222,203,160,208,90,231,28,12,74,29,28,44,10,113,30,92,70,69,94,64,59,125,70,46,122,28,39,41,74,131,43,35,84,98,79,18,43384,26,219,52,77,117,76,76,32,81,48,82,64,149,169,115,62,60,285,140,221,205,162,206,89,231,28,11,74,29,25,44,10,116,28,90,69,69,93,65,60,123,70,46,118,28,39,41,73,130,42,35,84,97,78,19,111,48,220,53,77,118,75,74,31,83,46,80,67,149,168,114,63,60,286,140,223,206,160,217,93,229] ms Reference run times: [679,87,163,46,62,68,17,207,53,154,112,113,269,144,85,259,89,101,199,72,71,66,111,234,56,36,124,105,73,22,163,56,329,64,157,148,79,148,31,144,70,82,81,215,229,153,105,104,375,204,462,328,182,451,124,269,37,13,77,31,29,53,12,117,33,102,75,74,103,64,63,127,75,55,133,32,43,43,82,150,34,34,85,85,67,15,108,25,194,54,79,95,66,68,29,72,49,73,58,146,168,107,69,66,329,124,261,227,206,205,81,201,28,13,75,29,28,48,14,109,34,93,72,72,108,66,61,133,75,49,132,31,43,43,80,153,45,39,99,136,68,20,109,26,203,56,81,115,64,69,28,71,42,72,58,150,152,99,53,56,278,146,261,222,183,251,96,235,34,13,77,31,29,49,12,108,34,103,75,74,107,66,61,125,79,54,134,32,43,43,83,153,37,33,84,84,68,15,109,31,222,50,69,120,67,76,33,80,49,93,71,162,159,120,69,62,334,124,222,188,185,196,75,211,30,12,79,32,28,50,12,116,35,102,76,74,104,65,64,126,68,52,121,29,36,37,68,127,43,41,99,133,85,24,125,31,230,55,81,95,67,66,29,72,47,74,60,147,151,101,69,65,335,119,222,201,197,216,94,220,34,12,77,29,29,49,13,116,33,91,76,78,105,69,60,129,74,51,130,56,44,43,84,159,41,32,83,85,70,22,110,46,199,55,82,121,66,70,29,72,44,74,59,152,166,125,54,57,280,134,265,222,208,225,99,237,34,10,72,27,24,43,10,109,33,103,76,76,105,67,64,125,79,50,135,27,36,37,68,128,46,40,100,136,68,15,108,50,217,55,69,124,79,77,34,80,50,87,72,166,162,99,55,55,278,153,264,223,185,220,94,235,36,14,77,27,24,44,10,117,35,104,76,75,104,64,65,128,76,53,134,27,35,38,68,128,44,41,100,136,84,24,125,31,233,55,73,86,80,76,34,82,53,90,71,169,167,99,55,58,280,116,223,202,219,202,81,195,28,13,75,30,29,47,15,119,36,96,72,73,104,68,62,132,74,50,131,32,43,44,85,152,37,32,84,84,71,20,110,25,209,49,81,114,66,70,29,73,48,73,61,151,152,104,55,57,281,121,223,195,171,194,80,216,28,10,72,27,23,45,11,109,28,103,76,75,104,67,65,126,77,50,134,32,44,44,85,148,37,33,85,86,68,15,122,38,242,56,70,125,82,77,34,81,51,87,72,163,144,119,55,55,280,150,265,229,168,218,95,236] ms Notice that in the reference run, all times are 3 digits. In the sample run, most times seem to line up with the occasional 5 digit time.
Adam Barth
Comment 3 Thursday, June 17, 2010 9:10:31 PM UTC
> Notice that in the reference run, all times are 3 digits. In the sample run, most times seem to line up with the occasional 5 digit time. Does that correspond to individual pages that we're bad at? @tonyg, would you be willing to investigate?
Tony Gentilcore
Comment 4 Thursday, June 17, 2010 9:12:33 PM UTC
(In reply to comment #3) > > Notice that in the reference run, all times are 3 digits. In the sample run, most times seem to line up with the occasional 5 digit time. > > Does that correspond to individual pages that we're bad at? I talked to chase about this. He was unclear if they should line up or not. One strange thing is that the number of times is not evenly divisible by the number of urls. > > @tonyg, would you be willing to investigate? I'm trying to investigate now, but haven't gotten any solid leads yet.
Tony Gentilcore
Comment 5 Thursday, June 17, 2010 9:37:25 PM UTC
(In reply to comment #4) > (In reply to comment #3) > > > Notice that in the reference run, all times are 3 digits. In the sample run, most times seem to line up with the occasional 5 digit time. > > > > Does that correspond to individual pages that we're bad at? > > I talked to chase about this. He was unclear if they should line up or not. > > One strange thing is that the number of times is not evenly divisible by the number of urls. > > > > > @tonyg, would you be willing to investigate? > > I'm trying to investigate now, but haven't gotten any solid leads yet. Finally have a solid local repro. Our local versions of news.163.com and sport24.gr will repro consistently. I'm still determining where/how we stall.
Tony Gentilcore
Comment 6 Thursday, June 17, 2010 10:24:29 PM UTC
I've got a test case now. It looks like the bug is caused by an external resource inside a <noscript> tag. In some of our page cyclers, the paths for resources loaded inside a <noscript> were not re-written to be on the local file system (which is fine). I'm guessing the old preload scanner skipped <noscript> tags whereas the new does not. If so, I'll put together a patch to make the new preload scanner skip <noscript>s.
Adam Barth
Comment 7 Thursday, June 17, 2010 11:26:43 PM UTC
You can put the lexer into the RCDATA state to make it eat everything in the <noscript> tag.
Tony Gentilcore
Comment 8 Thursday, June 17, 2010 11:56:43 PM UTC
Adam Barth
Comment 9 Friday, June 18, 2010 12:02:08 AM UTC
I see. We're wrong both before and after this patch, we're just changing it to be the most usual case... Maybe we should just fix the bug? We need to know whether scripts are enabled to decide whether noscript should enter that state. (I think frames should always enter because we don't have a way to disable frames.)
Tony Gentilcore
Comment 10 Friday, June 18, 2010 12:52:02 AM UTC
Eric Seidel (no email)
Comment 11 Friday, June 18, 2010 12:56:27 AM UTC
Comment on attachment 59047 [details] Patch WebCore/html/HTML5TreeBuilder.h:86 + static bool isScriptingFlagEnabled(Frame* frame); No need for the argument name. WebCore/html/HTML5TreeBuilder.cpp:142 + if (tagName == styleTag || tagName == iframeTag || tagName == xmpTag || tagName == noembedTag || tagName == noframesTag || (tagName == noscriptTag && isScriptingFlagEnabled(frame))) Can we wrap this line? :) Looks good to me. I'd like Adam to look too to make sure scriptController->canExecuteScripts(NotAboutToExecuteScript) is the right flavor of "can we script now" call.
Tony Gentilcore
Comment 12 Friday, June 18, 2010 1:04:09 AM UTC
Eric Seidel (no email)
Comment 13 Friday, June 18, 2010 1:25:59 AM UTC
Comment on attachment 59049 [details] Patch You didn't remove the "frame" argument, but it's not a big deal. :)
Adam Barth
Comment 14 Friday, June 18, 2010 4:40:54 AM UTC
Tony Gentilcore
Comment 15 Friday, June 18, 2010 6:46:37 PM UTC
I'd like to create a subsequent patch with a LayoutTest for this. The case is something like: <script src="slow-script-to-pause-parser-long-enough-for-preload-scanner.js"></script> <noscript> <img src="existent-image.png" onload="failTest()"> </noscript> However, the PreloadScanner (correctly) doesn't trigger onload for the image. So I need another way to determine if the image was fetched (not loaded). Is that possible in a LayoutTest? Any suggestions?
Adam Barth
Comment 16 Friday, June 18, 2010 6:49:54 PM UTC
> However, the PreloadScanner (correctly) doesn't trigger onload for the image. So I need another way to determine if the image was fetched (not loaded). Is that possible in a LayoutTest? Any suggestions? Yes! Eric and I found a way to test the preloader: http://trac.webkit.org/browser/trunk/LayoutTests/fast/preloader
Note You need to log in before you can comment on or make changes to this bug.