On Feb 18, 2014, at 3:59 PM, Ryosuke Niwa <rn...@webkit.org> wrote: > On Tue, Feb 18, 2014 at 3:09 PM, Adam Barth <aba...@webkit.org> wrote: > On Tue, Feb 18, 2014 at 2:41 PM, Adam Barth <aba...@webkit.org> wrote: > On Tue, Feb 18, 2014 at 1:54 PM, Maciej Stachowiak <m...@apple.com> wrote: > Do you have any more specific pointers that Ryosuke et al could look at for > the O(N^2) algorithm? Like a commit range or a function to look at? > > Removing the N^2 algorithms from render tree construction in Blink was an > effort that occurred an extended period of time. As Bem mentioned one of the > changes involved was the change below: > > https://src.chromium.org/viewvc/blink?revision=158839&view=revision > > I believe that WebKit has done some similar work recently, but I haven't > followed along in enough detail to know whether these N^2 algorithms still > exist in WebKit. > > It appears that WebKit still contains some N^2 algorithms in render tree > construction: > > var t = Date.now(); > for (var i = 0; i < 5000; ++i) > document.body.appendChild(document.createElement('div')); > document.body.offsetTop; > document.body.textContent = Date.now() - t; > > Here's a jsfiddle if you'd like to experiment yourself: > > http://jsfiddle.net/vwG2J/2/ > > In today's WebKit nightly build, the code above reports a runtime of ~96. If > I multiply the loop bound by a factor of ten, the runtime goes up to ~7625, > which is a factor of 79.4 (i.e., roughly quadratic). By way of contrast, in > today's Chrome canary build, the code above reports a runtime of ~30. If I > multiply the loop bound by a factor of ten, the runtime goes up to ~264, > which is a factor of 8.8 (i.e., roughly linear). > > Thanks for the clarification & info! > > My point is not that Chrome is faster at this particular test case but rather > that we were able to resolve the issues that appear to concern Ryosuke about > shadow DOM by making general, algorithmic improvements to the engine. > > Turning O(n^2) into O(n) algorithms is great but my goal here is to assess > the total cost of implementing shadow DOM, not whether we can make > compensating performance improvements. > > JSC team has been utilizing SVN branches to work on Concurrent JIT, > Generational GC, FTL, etc... to quantity the total performance cost and > benefit of each feature, and it has been working very well as far as I could > tell.
I think this strategy has worked well for us. Branches make it easier to embark on risky projects. Also, it's great to be able to see the total impact of a feature. I can appreciate Adam's great theories about asymptotic complexity, but I think that in practice any major change to the system will have some impact and it's good to know what it is. -Filip > > - R. Niwa > > _______________________________________________ > webkit-dev mailing list > webkit-dev@lists.webkit.org > https://lists.webkit.org/mailman/listinfo/webkit-dev
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev