Closed
Bug 229391
Opened 21 years ago
Closed 2 years ago
Slower than ideal (3D) DHTML performance
Categories
(Core :: Layout, defect)
Tracking
()
RESOLVED
WORKSFORME
People
(Reporter: simon, Unassigned)
References
()
Details
(Keywords: perf, testcase)
Attachments
(2 files, 2 obsolete files)
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6b) Gecko/20031208
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6b) Gecko/20031208
This 3D example of a rotating cube, that runs much slower in Mozilla1.6b than in
IE6 on my AMD 800Mhz / win2000 with 99% cpu consumption compared to 75-80% with ie.
Reproducible: Always
Steps to Reproduce:
1. open the url
2. just click on start/stop
Actual Results:
slow performance, high memory usage
Expected Results:
smother rendering of cube
Comment 1•21 years ago
|
||
Wow, yeah, we're really slow on this.
Would be nice to get a profile. And a more accurate testcase to measure it. This
test seems to involve a lot of adding and removing elements and positioning
them, so it might even be quite a realistic test.
Keywords: perf
Comment 2•21 years ago
|
||
(o133885)
Profile is at bug 195408 comment 17.
Comment 4•21 years ago
|
||
Simon: If you want to make a testcase out of this, see
http://www.hixie.ch/tests/adhoc/perf/dom/artificial/000.html
...for a template of sorts. You can look at other tests in that directory to see
what some other performance tests look like. That would help us get actual
numbers here, which make testing this a lot easier and accurate.
Note that when comparing browsers, it is critical to:
1. Not have the mouse cursor in the window
2. Have windows the same size
The following page can help with the second of those:
http://www.hixie.ch/tests/adhoc/perf/prepare.html
Comment 5•21 years ago
|
||
The top item in the profile is this AlreadyInQueue thing... That could be made
better by having the queue not be an array (since then building up the queue
would not be O(N^2) in the length of the queue). That makes it somewhat
difficult to guarantee in-order processing of the queue, however... Perhaps one
could use a hashtable to guarantee uniqueness and an array for the ordering and
add to both?
As for the rest of the profile, it looks like standard stuff -- style
reresolution, mostly. I assume the testcase sets a bunch of style properties
one right after another all off a single timeout?
Updated•21 years ago
|
Blocks: 21762
Summary: Slow (3D) dhtml performance compared to ie → Slow (3D) DHTML performance compared to ie
Reporter | ||
Comment 6•21 years ago
|
||
Ian, I would like to create a testcase, but give me some time, I will be gone
snowboarding the next days.
I tried to reduce the creation/destroying of elements and the setting of style
properties to a minimum. I basically create 368 div elements at the beginning
(pixels) and then start the timeout, which only moves the elements around (set
top/left properties).
Comment 7•21 years ago
|
||
See also the post I just made to n.p.m.style with a proposal that may end up
helping out a good bit here.
Updated•21 years ago
|
Reporter | ||
Comment 8•21 years ago
|
||
Hi everyone
I created a testcase. Go to the url above and click the link to the mozilla
testcase. Here are my measurements on an AMD 900Mhz, Windows 2000:
*** Moz1.6b ***
small cube:
Elapsed time: 12'447 ms
Average per loop: 248.94 ms
Fastest loop: 210 ms
Slowest loop: 290 ms
big cube:
Elapsed time: 30'916 ms
Average per loop: 618.32 ms
Fastest loop: 421 ms
Slowest loop: 761 ms
*** IE6 ***
small cube:
Elapsed time: 3'475 ms
Average per loop: 69.50 ms
Fastest loop: 60 ms
big cube:
Elapsed time: 7'009 ms
Average per loop: 140.18 ms
Fastest loop: 120 ms
Slowest loop: 161 ms
Slowest loop: 91 ms
Comment 9•21 years ago
|
||
Alternate version (thanks Simon!):
http://www.hixie.ch/tests/adhoc/perf/dom/real-world/006.html
Comment 10•21 years ago
|
||
On the testcase in comment 9, of the total 3216 jprof hits, we have:
244 under PresShell::ProcessReflowCommands
143 under nsArraySH::GetProperty (mostly GetItemAt and classinfo's WrapNative)
719 under CSS2PropertiesTearoff::SetTop
670 under CSS2PropertiesTearoff::SetLeft
164 under CSS2PropertiesTearoff::SetVisibility
281 under nsScriptSecurityManager::CanAccess (see bug 213946 for where most of
that time is)
The rest is in minor other stuff, JS engine itself, etc.
Under SetTop and company, the breakdown is:
1552 total under nsDOMCSSDeclaration::SetProperty
323 of that under CSSParserImpl::ParseProperty
513 of that under FrameManager::ComputeStyleChangeFor
303 of that under ApplyRenderingChangeToTree
161 of that under PresShell::AppendReflowCommand
that last one, 2/3 is the AlreadyInQueue check mentioned in comment 5 and 1/3
PostReflowEvent (event queue getting, monitors, etc, etc).
So the testcase is showing mostly the things we already knew:
1) Security manager could be improved a bit
2) Batching style reresolves would help a _lot_ in cases when multiple style
props are all set in a row
3) AlreadyInQueue() can make posting of reflow commands O(N^2) in the number
of commands
Comment 11•21 years ago
|
||
I filed bug 230170 on the style reresolution stuff that's been talked about
recently.
Comment 12•21 years ago
|
||
AlreadyInQueue sure could use a hash queue. One implementation idea: drop the
nsVoidArray, create a PLHashTable whose entry struct derives from PLHashEntry
but mixes in PRCList, so live entries can be kept in a doubly-linked list; both
unlink and search are thus O(1).
/be
Updated•21 years ago
|
Reporter | ||
Comment 13•20 years ago
|
||
I checked with the new Mozilla 1.8a4, Mozilla is still behind IE6, see test
results on same machine as #8.
Remark:
Overall speed is way better an closer to IE now, but rendering seems to happen
in bursts.
*** Moz 1.8.a ***
small cube (369 div):
Elapsed time: 4'919 ms
Average per loop: 98.38 ms
Fastest loop: 80 ms
Slowest loop: 120 ms
big cube (729 div):
Elapsed time: 10'033 ms
Average per loop: 200.66 ms
Fastest loop: 150 ms
Slowest loop: 290 ms
*** IE 6 ***
small cube:
Elapsed time: 3'334 ms
Average per loop: 66.68 ms
Fastest loop: 50 ms
big cube:
Elapsed time: 6'751 ms
Average per loop: 135.02 ms
Fastest loop: 110 ms
Slowest loop: 160 ms
Slowest loop: 90 ms
Comment 14•20 years ago
|
||
OK, I just did a profile of the large cube in a current (last night's, so it
should include the view update batching changes) build. Ccing roc, since some
of the view stuff comes up.... The basic info:
Total hits: 242221. Of these:
21395 under PresShell::ProcessReflowCommands. Of these 12648 are under
nsViewManager::MoveViewTo, mostly calling into nsRegionGTK::Union. Bug
243726 covers this last part, mostly.
16678 under nsCSSFrameConstructor::ProcessPendingRestyles.
18316 under nsScriptSecurityManager::CanAccess (covered by bug 213946 already)
70760 under nsDOMCSSDeclaration::SetPropertyValue
The rest.... Of the total 180927 hits under js_Execute, only 89000 are accounted
for above. The rest are in JS, XPConnect, classinfo. Of particular note are:
14741 under js_NumberToString
11468 under nsXPConnect::WrapNative
13834 under js_LookupPropertyWithFlags
I'll attach the profile to this bug for people's perusal.
I looked a bit further into nsDOMCSSDeclaration::SetPropertyValue. The
breakdown under that is:
35089 under CSSParserImpl::ParseProperty
27745 under nsDOMCSSAttributeDeclaration::DeclarationChanged
which fritters along minor things, then calls AttributeChanged (15000 hits under
that).
Of particular interest under this last part is
6294 under nsEventQueueServiceImpl::GetSpecialEventQueue (bug 240874)
The property parsing is about a third under nsCSSScanner::ParseNumber and
another third initing/releasing scanners and
decompressing/recompressing/transferring the style data. The rest is scattered
here and there.
Comment 15•20 years ago
|
||
It seems to me that making "foo.style = ..." go through parsing and the full
style reresolution mechanism is rather a waste. Can't we detect when the inline
style is the most specific, and then treat such assignments as directly setting
the style data?
Comment 17•20 years ago
|
||
Even directly setting the style data involves parsing, though...
Furthermore, depending on which properties are being set, other properties'
values will need to change (eg float affects display, position affects float,
font-size affects the meaning of em units for everything in sight, etc).
Add to this the fact that we have to clear out cached style data, possibly, and
that changing .style.foo on a node can affect its kids.
Once all that's taken into account, what we end up with may not be much faster
than just reresolving... :(
On an unrelated note, I just realized that I never said how much time painting
took on that testcase. There were about 3500 hits under UpdateIdle().
Comment 18•20 years ago
|
||
This bug seems to be a dupe of bug 195408. But I won't touch it. Also the
testcase is 404.
Reporter | ||
Comment 19•20 years ago
|
||
#18 Testcase should work again. Website was down temporarily (provider migrated
website...)
Comment 20•20 years ago
|
||
Simon, the testcases seems to be gone again (I just get a blank blue page, more
or less)....
Reporter | ||
Comment 21•20 years ago
|
||
Boris, Testcase should be up and running again. Sorry for the inconvenience.
Simon
Reporter | ||
Comment 22•20 years ago
|
||
Reporter | ||
Comment 23•20 years ago
|
||
Reporter | ||
Updated•20 years ago
|
Attachment #179157 -
Attachment is obsolete: true
Comment 24•20 years ago
|
||
The patch I checked in today for bug 288369 should help with the jerkiness
pointed out in comment 13...
Depends on: 288574
Reporter | ||
Comment 25•20 years ago
|
||
I downloaded the latest build today [Mozilla/5.0 (Windows; U; Windows NT 5.0;
en-US; rv:1.8b2) Gecko/20050521]. Here my results for the big cube
(unfortunately on a new machine):
--- Moz 1.8b2 ---
Elapsed time: 3'362 ms
Average per loop: 67.24 ms
Fastest loop: 47 ms
Slowest loop: 109 ms
-- Ie 6.0 ---
Elapsed time: 2'527 ms
Average per loop: 50.54 ms
Fastest loop: 31 ms
Slowest loop: 63 ms
--- Fox 1.0.4 ---
Elapsed time: 10'514 ms
Average per loop: 210.28 ms
Fastest loop: 140 ms
Slowest loop: 250 ms
Yes, getting faster and faster.
Comment 26•19 years ago
|
||
Simon, I'd be curious in seeing what tomorrow's trunk nightlies look like on your machine...
Also, I recommend comparing to Opera, not just IE -- in my experience Opera is a _lot_ faster than we are... :(
Reporter | ||
Comment 27•19 years ago
|
||
--- Opera 8.5 ---
Elapsed time: 2'107 ms
Average per loop: 42.14 ms
Fastest loop: 31 ms
Slowest loop: 47 ms
--- Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9a1) Gecko/20051116 Firefox/1.6a1 ---
Elapsed time: 3'032 ms
Average per loop: 60.64 ms
Fastest loop: 46 ms
Slowest loop: 94 ms
--- IE 6 ---
Elapsed time: 2'639 ms
Average per loop: 52.78 ms
Fastest loop: 46 ms
Slowest loop: 63 ms
Boris, as you guessed. Opera beats IE. Hope I downloaded the right nightly.
Comment 28•19 years ago
|
||
Yeah, that looks like the right nightly.
OK. So we're doing OK, not great. Thank you!
Comment 29•19 years ago
|
||
Out of curiousity, what effect, if any, did the fix for bug 317375 have on this? That is, how does a trunk build from 2006-01-24 or earlier compare to a current trunk build?
Reporter | ||
Comment 30•19 years ago
|
||
Hi Boris
I'm not sure if I understand the terminology right (trunk build?). So if I download a nightly build from http://ftp.mozilla.org/pub/mozilla.org/seamonkey/nightly/2006-01-23-11-trunk/ run the test and then download a build from http://ftp.mozilla.org/pub/mozilla.org/seamonkey/nightly/2006-02-01-11-trunk/ and run the test again that would help you ?
Comment 31•19 years ago
|
||
Simon, that's exactly right. Thanks!
Reporter | ||
Comment 32•19 years ago
|
||
Here are the numbers. I repeated it 3 times. There seems to be no difference between the builds...
Gecko/20060123 Gecko/20060201 Opera 8.51/7712
3'359 ms 3'471 ms 2'312 ms
67.18 ms 69.42 ms 46.24 ms
46 ms 47 ms 31 ms
94 ms 94 ms 78 ms
3'563 ms 3'515 ms 2'094 ms
71.26 ms 70.30 ms 41.88 ms
46 ms 46 ms 31 ms
110 ms 140 ms 47 ms
3'250 ms 3'454 ms 2'375 ms
65.00 ms 69.08 ms 47.50 ms
46 ms 46 ms 31 ms
125 ms 109 ms 78 ms
Comment 33•19 years ago
|
||
OK, great. That patch wasn't expected to make things immediately faster or anything; just making sure it didn't get slower. ;)
Comment 34•19 years ago
|
||
I'd be interested in how today's builds (which have bug 326273 fixed) do.
Comment 35•19 years ago
|
||
Unfortunately, I never tested this bug in a build prior to today, but here are my results for the big cube.
Current 5-11-2006 Trunk:
Elapsed time: 1'905 ms
Average per loop: 38.10 ms
Fastest loop: 31 ms
Slowest loop: 62 ms
IE6:
Elapsed time: 1'405 ms
Average per loop: 28.10 ms
Fastest loop: 15 ms
Slowest loop: 32 ms
Comment 36•19 years ago
|
||
Interesting. Either we got a lot slower, or the hardware matters; see comment 27.... fwiw, you can get builds from day before yesterday off FTP easily enough.
Comment 37•19 years ago
|
||
Never mind comment 36; I misread comment 27.
Aren't these post-cairo-turnon numbers?
Comment 39•19 years ago
|
||
More data for you:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a1) Gecko/20060507 Minefield/3.0a1
Elapsed time: 2'500 ms
Average per loop: 50.00 ms
Fastest loop: 40 ms
Slowest loop: 80 ms
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a1) Gecko/20060511 Minefield/3.0a1
Elapsed time: 2'153 ms
Average per loop: 43.06 ms
Fastest loop: 30 ms
Slowest loop: 51 ms
So yeah, a definite speed win.
Comment 40•19 years ago
|
||
Crap, forgot the IE numbers
Elapsed time: 1'904 ms
Average per loop: 38.08 ms
Fastest loop: 30 ms
Slowest loop: 61 ms
Sorry for the spam.
Comment 41•19 years ago
|
||
So I did a profile of this with a current build on Linux (with threadmanager changes and all).
Rough breakdown of where time is spent:
15% recomputing style data
14.5% parsing CSS
10.6% changing the inline style rule. About 1/3 of this is in
nsCSSFrameConstructor::AttributeChanged; the rest is Begin/EndUpdate,
copying observer lists, setting the nsAttrValue, etc.
7% converting numbers to strings in JS
6.7% under js_LookupProperty; a bit more than half of this is in XPConnect
6.6% layout
6.1% getting properties from a nodelist (presumably getting at divs?).
About 2/3 of this is spent creating XPConnect wrappers for the native
objects.
5.3% security checks
4.6% painting
1.7% JS GC
Of the remaining 20% or so, at least 3/4 is mostly scattered in JS and XPConnect as far as I can tell...
Attachment #161608 -
Attachment is obsolete: true
Comment 42•18 years ago
|
||
The animated 3d box at provided URL also shows the same, exact painting symptoms as described in a similar bugfile (bug 30782: Animation with some text have some problem drawing pixels). At both URLs of these bugs and at
http://www.taboca.com/worlds/gek/webfilmed/intro2/3dcircle3.html
we can see small streak of pixels not being repainted, small lines of residual pixels.
Comment 43•18 years ago
|
||
> also shows the same, exact painting symptoms
This bug's testcase shows those symptoms in all browsers (or at least Konqueror, Opera, IE/Windows, and Gecko), leading me to think that the page is just coded to have that effect.
> http://www.taboca.com/worlds/gek/webfilmed/intro2/3dcircle3.html
I don't see the problem there on Linux, for what it's worth. It probably depends on the invalidation differences between the platforms...
Reporter | ||
Comment 44•18 years ago
|
||
To #42/43: I never checked if the streaks of pixels not beeing repainted is a bug or lies in my coding (I think it's the latter, but I havn't had the time to check...). But it was certainly not the reason to post this bug, which is about speed.
Reporter | ||
Comment 45•18 years ago
|
||
I made a comparison with the current browsers and the latest seamonkey build Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a1) Gecko/20061124 SeaMonkey/1.5a. Still same machine as #25 but on Windows XP not Win2000.
OP 9.02
Elapsed time: 1'968 ms
Average per loop: 39.36 ms
Fastest loop: 31 ms
Slowest loop: 62 ms
IE 7.0
Elapsed time: 2'595 ms
Average per loop: 51.90 ms
Fastest loop: 31 ms
Slowest loop: 63 ms
FF 2.0
Elapsed time: 3'638 ms
Average per loop: 72.76 ms
Fastest loop: 47 ms
Slowest loop: 109 ms
SM 1.5a
Elapsed time: 3'643 ms
Average per loop: 72.86 ms
Fastest loop: 47 ms
Slowest loop: 94 ms
To #42-44:
Residual pixels are not a bug. For speed reasons 729 pixels (divs) are created at once at the beginning and then just moved around. No DOM node manipulation (appendChild, removeChild). So depending on the position of the cube more or less pixels out of the initially created ones are reused.
BTW: Inline spell check is great, especially for nonnative speakers, I mean writers...
Comment 46•18 years ago
|
||
Can someone do a new profile on this one?
Comment 47•18 years ago
|
||
For what it's worth, there's no point to running this test or profiling it at least until the reflow branch has landed. Possibly also not until the textframe rewrite has landed, though this test may not be too sensitive to that. Until that happens, this is pretty much guaranteed to be like it was on the 1.8 branch (as the test in comment 45 shows).
Reporter | ||
Comment 48•18 years ago
|
||
I hope I got it right, that the current GrandParadiso 3.0a3 [Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a3) Gecko/20070322 GranParadiso/3.0a3] contains the reflow branch [see #47], otherwise sorry for bothering everyone.
Its a bit slower, but whats worse is, that now many frames are just dropped. Sometimes only about 15 out of 50 frames are displayed, all the others are skipped (especially if I have another program open).
The numbers:
Elapsed time: 3'905 ms
Average per loop: 78.10 ms
Fastest loop: 62 ms
Slowest loop: 94 ms
Comment 49•18 years ago
|
||
1.9a3 does contain reflow branch. That said, I spent some time testing this testcase with reflow branch builds, and never saw frame dropping (on a P3-733, at that). I still don't see it on trunk (on Linux)...
If you _do_ see it on Windows, please file a regression bug? And maybe see whether you can narrow down the first nightly when it started?
Reporter | ||
Comment 50•18 years ago
|
||
Boris, I did see the skipping on Windows with the same machine as #45. But I realized, that I had some extensions installed...
... I removed all my extensions (Firebug, Html Validator, Adblock) and then the frame dropping was gone. But interestingly, as soon as I had a few extensions installed (although they were automatically disabled by GranParadiso), the frame dropping occurred again. The dropping didn't seem to cone from a specific extension, but I couldn't find out exactly on what it depended.
Comment 51•18 years ago
|
||
Interesting! Can you file a bug on that? And maybe hunt down a regression range? Frame dropping is a serious issue that should be blocking 1.9, imo.
Comment 52•18 years ago
|
||
JavaScript performance in general seems to have taken a hit (bug 375225, bug 375227) since bug 333078 was checked in.
Comment 53•18 years ago
|
||
Yes, but the frame dropping is not necessarily a performance issue. For what it's worth, I'm working on getting those bugs profiled...
Reporter | ||
Comment 54•18 years ago
|
||
#51: Can someone give me a hint where/how I would get the necessary files (file naming)? First in the range - last in range ?
Ok, I'll file a bug in the next few days.
Comment 55•18 years ago
|
||
Simon, ftp://ftp.mozilla.org/pub/mozilla.org/firefox/nightly has dated directories... If you need older builds, http://archive.mozilla.org
Reporter | ||
Comment 56•18 years ago
|
||
I filed new bug 377380.
Reporter | ||
Comment 57•17 years ago
|
||
Boris, I did some testing to hunt down a regression
range. I published the results in bug 377380.
Reporter | ||
Updated•17 years ago
|
Comment 58•17 years ago
|
||
it's WFM on Windows XP with latest nightly vs. IE7.
Fx3beta4pre
Elapsed time: 1'366 ms
Average per loop: 27.32 ms
Fastest loop: 23 ms
Slowest loop: 29 ms
IE7
Elapsed time: 1'611 ms
Average per loop: 32.22 ms
Fastest loop: 16 ms
Slowest loop: 47 ms
reopen if needed
Status: NEW → RESOLVED
Closed: 17 years ago
Resolution: --- → WORKSFORME
Comment 59•17 years ago
|
||
Comparing performance to IE7 is not that useful nowadays. How do Opera and Safari do?
Reporter | ||
Comment 60•17 years ago
|
||
new machine (not same as in #45)
Opera 9.26
Elapsed time: 1'016 ms
Average per loop: 20.32 ms
Fastest loop: 15 ms
Slowest loop: 32 ms
IE7
Elapsed time: 1'126 ms
Average per loop: 22.52 ms
Fastest loop: 15 ms
Slowest loop: 32 ms
FF 3.0b5pre
Elapsed time: 1'148 ms
Average per loop: 22.96 ms
Fastest loop: 19 ms
Slowest loop: 25 ms
Reporter | ||
Comment 61•17 years ago
|
||
Oh well, I'm sorry, but I found out, that I didn't measure the overall time correctly. What I measured was the overall time spent in the Loop() function, but this did not include the time spent between the setTimeout() calls (even though the timeout was set to zero. But, only in an ideal world setTimeout("Loop()", 0); would actually take no time to call the Loop function again...).
As a consequence I added a new test parameter, the new 'Time in Loop' is the former 'Elapsed time' and 'Elapsed time' is now the overall time spent for the whole animation. 'Average per loop', 'Fastest loop' and 'Slowest Loop' are the same as before.
So here are the new numbers :
Minefield/3.0b5pr Gecko/2008030607
Elapsed time: 1'816 ms
Time in Loop: 1'173 ms
Average per loop: 23.46 ms
Fastest loop: 19 ms
Slowest loop: 25 ms
Opera 9.26
Elapsed time: 2'469 ms
Time in Loop: 942 ms
Average per loop: 18.84 ms
Fastest loop: 15 ms
Slowest loop: 32 ms
Safari 3.04 Win Beta
Elapsed time: 2'484 ms
Time in Loop: 686 ms
Average per loop: 13.72 ms
Fastest loop: 0 ms
Slowest loop: 16 ms
FF 2.0.0.12
Elapsed time: 2'875 ms
Time in Loop: 1'812 ms
Average per loop: 36.24 ms
Fastest loop: 31 ms
Slowest loop: 47 ms
BTW: This script is also used in the webkit's Sunspider 0.9 benchmark.
Comment 62•17 years ago
|
||
Yeah, and we do just fine on that script in the SunSpider context; profiling is going to be needed to drive actual improvements here (as it was in the pure-script case, quite successfully).
Comment 63•17 years ago
|
||
Oh, so the original testcase was excluding the actual time needed to recompute the layout (since UAs do that async), right? I was profiling the full animation, so I think my profiles were picking up your new "Elapsed time" metric.
As for profiling, last profile I did here indicated that the main costs were the expensive double-to-string and string-to-double conversions when setting top/left, XPConnect overhead, CSS parsing in general.
I'll do another profile sometime in June, probably. I do think we should reopen this bug. Resummarizing while I'm at it.
Status: RESOLVED → REOPENED
Resolution: WORKSFORME → ---
Summary: Slow (3D) DHTML performance compared to ie → Slower than ideal (3D) DHTML performance
Reporter | ||
Comment 64•17 years ago
|
||
Boris, I do not understand enough of the subject to really confirm what you are saying, but I think you are right.
The whole animation is done by calling the setTimeout('Loop()', 0) function from inside the Loop() function with a delay of 0 miliseconds. All the calculations of the pixel's coordinates and the setting of their positions (e.g. div.style.top/left) are also done from within the Loop() function by calling other functions such as Rotate(), Translate(), DrawCube(), etc.
'Time in Loop' (= 'Elapsed time' in original testcase) is measured by calling new Date() inside the Loop() function at the beginning and again at the ending, and then adding the difference up everytime Loop() is called.
pseudocode:
Loop() {
Start measure time; // for 'time in Loop'
Calculate cube's position;
Draw cube;
Stop measure time and add it to previously measured time;
setTimeout('Loop()', 0);
;
So, do I get it right by saying: *If* the layout was computed in sync, then 'Time in Loop' would become the same as 'Elapsed time', because nothing outside of the setTimeout would happen (e.g. finish recomputing layout) ?
Comment 65•17 years ago
|
||
If layout (and painting, etc) were sync, then elapsed time would be time in loop plus (10ms * (number of loops)), since setTimeouts for times smaller than 10ms are set for 10ms from now.
Sounds like we're on the same page. I'm actually pretty impressed that we're managing to beat Opera for total time, even with the handicap from the time in loop! Once we fix some of the issues impacting that, life will be pretty sweet. ;)
Comment 66•15 years ago
|
||
I've been working with the sunspider tests recently and while working with 3d-cube i came across this bug. And since the last numbers posted are pre Chrome, IE 8 and many other browsers. I went through and ran the numbers.
http://cznp.com/3d-cube-04.06.2009.txt
Hope it helps some. Thanks.
Updated•15 years ago
|
Assignee: layout → nobody
QA Contact: ian → layout
Reporter | ||
Comment 67•15 years ago
|
||
just some new numbers with FF 3.6b3:
FF 3.5.5 FF 3.6b3 Opera 10 Safari 4 Chrome 3
Elapsed time 1702 1288 672 981 822
Time in loop 1003 580 343 425 504
Average per loop 20.26 11.6 6.86 8.5 10.08
Fastest loop 17 9 0 7 8
Slowes loop 23 13 16 10 24
Reporter | ||
Updated•15 years ago
|
Comment 68•11 years ago
|
||
Testing the big cube from the new link:
Nightly 27
Elapsed time: 3'798 ms
Time in Loop: 1'515 ms
Average per loop: 30.30 ms
Fastest loop: 24 ms
Slowest loop: 49 ms
Chrome 29
Elapsed time: 1'397 ms
Time in Loop: 199 ms
Average per loop: 3.98 ms
Fastest loop: 3 ms
Slowest loop: 11 ms
IE 10
Elapsed time: 2'536 ms
Time in Loop: 1'580 ms
Average per loop: 31.60 ms
Fastest loop: 26 ms
Slowest loop: 63 ms
Comment 69•11 years ago
|
||
Would be useful to have a testcase here that runs for a controllable period of time, to aid profiling....
Keywords: qawanted
Reporter | ||
Comment 70•11 years ago
|
||
@Boris: Can you explain what you mean/need for the test case. I have vacation starting this weekend and will take time to update the test case.
Btw: Nice to see that this test case is still useful after 10 year!
Comment 71•11 years ago
|
||
Simon, what I'd like to be able to do is have the cube keep rotating for 30 seconds or so, so that I can profile it.
Also useful would be a cube that keeps rotating for 30 seconds or so but doesn't do it off setTimeout: so basically a while loop that keeps updating the positions but not yielding to paint. That would allow isolating the update times and paint times from each other.
Reporter | ||
Comment 72•11 years ago
|
||
I guess it defeats the purpose of this testcase, if I replace the setting of the style properties with just setting a class, e.g.
// replace
el.style.top = Y + 'px';
el.style.left = X + 'px';
el.style.visibility = 'visible';
el.style.height = '1px';
el.style.width = '1px';
el.style.margin = '0px';
el.style.padding = '0px';
el.style.position = 'absolute';
el.style.border = '0px';
el.style.backgroundColor = '#000000';
// with
el.style.top = Y + 'px';
el.style.left = X + 'px';
el.className = 'point'; // where point is all of the above
Comment 73•11 years ago
|
||
Yes, that would significantly change the behavior.
Reporter | ||
Updated•11 years ago
|
Reporter | ||
Comment 74•11 years ago
|
||
I created a revised testcase, which lets you set the time or the number of iterations as well as if setTimeout() should be called or not. Here are some numbers of FF 24 vs Chrome 30:
// Firefox 24
test method:time, using timeout of 0
cube size:medium (729 divs)
elapsed time:10025 ms
time in Loop:5092 ms
average per loop:20 ms
fastest loop:16 ms
slowest loop:31 ms
# of loops:261
test method:time
cube size:medium (729 divs)
elapsed time:10018 ms
time in Loop:10016 ms
average per loop:19 ms
fastest loop:15 ms
slowest loop:23 ms
# of loops:524
// Google Chrome
test method:time, using timeout of 0
cube size:medium (729 divs)
elapsed time:10016 ms
time in Loop:1152 ms
average per loop:2 ms
fastest loop:1 ms
slowest loop:4 ms
# of loops:600
test method:time
cube size:medium (729 divs)
elapsed time:10001 ms
time in Loop:9992 ms
average per loop:1 ms
fastest loop:1 ms
slowest loop:7 ms
# of loops:7032
Updated•2 years ago
|
Severity: normal → S3
Comment 76•2 years ago
|
||
Seems very fast now.
Status: REOPENED → RESOLVED
Closed: 17 years ago → 2 years ago
Resolution: --- → WORKSFORME
You need to log in
before you can comment on or make changes to this bug.
Description
•