Open Bug 940815 Opened 11 years ago Updated 2 years ago

Browsermark "DOM Search" is 1.6x slower than Chrome

Categories

(Core :: JavaScript Engine, defect)

defect

Tracking

()

People

(Reporter: cpeterson, Unassigned)

References

(Blocks 1 open bug)

Details

From Naveed's Browsermark "DOM Search" test results (bigger is better): * Chrome 31 = 8,144 * Chrome 27 = 7,848 * Firefox 25 = 5,195 * Firefox 22 = 5,260 * IE11 = 10,461 Firefox 25 is slightly slower than Firefox 22.
Component: General → DOM
On trunk, we're close to parity, I think. Fixing bug 820848 would help even more, maybe. One interesting feature here is that we end up with 11% of our time under jit::DoGetPropFallback. In the end it ens up doing a get on the HTMLDocument, but via all the proxy machinery, not the IC. I'll look into what property exactly and why. Another 8% is js::GetProperty, again falling into the proxy machinery, again not via the IC. 15% of the time is under regexp_exec. The vast majority of this is CreateRegExpMatchResult and the DefineGeneric calls it does. In fact, smells a lot like bug 879402. And bug 876846 (which is not surprising; the latter has code similar to this benchmark). 25% of the time is under array_slice. 1/4 of this is SetArrayElement, and about half is going through the proxy getElementIfPresent machinery on an HTMLCollection. That's bug 697343. Again, mostly seems like a JS testcase...
Component: DOM → JavaScript Engine
Depends on: 820848, 876846, 879402, 697343
> jit::DoGetPropFallback I expect this is the same issue as we found in bug 922071. > Another 8% is js::GetProperty Also as discussed in bug 922071.
Depends on: 922071, 943989, 922272
So for me, in a build with bug 879402 fixed, I see numbers kinda like: Firefox nightly: 9240 Chrome dev: 6516 For comparison, fx26: 4026 Nightly without bug 879402: 8208 A profile of the nightly with bug 879402 fixed shows: * 18% of the time under array_slice, of which 12% is in the HTMLCollectionBinding code. * 10% under array_push * 10% under js::GetProperty * 9% under regexp_exec, breaking down as 6% CreateRegExpMatchResult (half of this is malloc under createArray!) and 3% ExecuteRegExp. * 5% jit::DoGetPropFallback. * 4% js::SetObjectElement * 2% calling getElementById * 2% calling getElementsByTagName * 3% CloneRegExpObject * 3% CreateThisForFunctionWithProto and some long-tail stuff (e.g. js_Date is popping up at 1% now).
Depends on: 944014
No longer depends on: 922071
Depends on: 1094255
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.