Open
Bug 302909
Opened 19 years ago
Updated 2 years ago
Unnecessary invalidation of SVG in <object> while animating 'top' and 'left' properties
Categories
(Core :: SVG, defect, P4)
Tracking
()
NEW
People
(Reporter: w.langdon, Unassigned)
References
()
Details
(Keywords: perf, Whiteboard: [invalidation] [in-the-wild] [external-report][dup of bug 1009693?])
Attachments
(4 files, 1 obsolete file)
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b4) Gecko/20050717 Firefox/1.0+
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b4) Gecko/20050717 Firefox/1.0+
Page designed to measure CPU+memory usage of Deerpark with on moving SVG graphics.
Load approx 66 times that of moving similar graphic as GIF. Memory usage similar.
ps: Why does bugzilla search with more keywords produce _more_ hits?
Reproducible: Always
Steps to Reproduce:
1. load http://www.cs.ucl.ac.uk/staff/W.Langdon/svg_performance.html
2. Should display 5 koch snow flakes (white with blue stroke) on a tartan
background. The SVG graphics will move slowly at random. The background will
flicker. (I think the background fliker with SVG has been reported elsewhere).
3. Measure CPU load. on 3Ghz CPU should be about 50%.
(On moving away from page and reloading, SVGs may not be redisplayed, but
background will fliker--failure to redisplay SVGs reported elsewhere).
Actual Results:
CPU loading hovers near 50%
Expected Results:
If similarly sized GIF is used instead (uncomment a couple of lines near top
of example javascript) 330 images can be loaded and animated for at approx the
same CPU loading.
Thank you
Bill
Updated•19 years ago
|
Component: General → SVG
Product: Firefox → Core
Version: unspecified → 1.8 Branch
Comment 1•19 years ago
|
||
That URL gives a "connection refused" error... Bill, is there a URL that shows the problem that I could access?
(In reply to comment #1)
> That URL gives a "connection refused" error...
My site, http://www.cs.ucl.ac.uk/staff/W.Langdon/ has been down.
It is ok now.
Bill
Comment 3•19 years ago
|
||
Ok, I did a profile of that testcase (on Linux, so applicability to Windows should be taken with a grain of salt, I guess):
Total hit count: 147512
Count %Total Function Name
70233 47.6 select
5956 4.0 __udivmoddi4
5758 3.9 bsearch
5482 3.7 memcpy
5190 3.5 __mempcpy
3617 2.5 _cairo_traps_tessellate_polygon
3305 2.2 __libc_calloc
3085 2.1 _compute_x
3053 2.1 __divdi3
All of the select() stuff is waiting on X to respond. Looking from the top down instead, we have:
129286 nsSVGCairoPathGeometry::Render(nsISVGRendererCanvas*)
(so that's almost all the time), with this breaking down as:
118515 cairo_stroke
7558 cairo_fill_preserve
3087 nsSVGCairoPathGeometry::GeneratePath(_cairo*, nsISVGCairoCanvas*)
Digging down into cairo_stroke, it breaks down more or less as:
59733 _cairo_gstate_clip_and_composite_trapezoids
58519 _cairo_path_fixed_stroke_to_traps
The former ends up completely in XRenderCompositeTrapezoids, which then ends up in _XSend and thence select().
The latter ends up in cairo_stroker_line_to which breaks down as:
30192 _cairo_stroker_add_sub_edge
26859 _cairo_stroker_join
Both of those end up mostly in _cairo_traps_tessellate_polygon, where we spend time as follows:
87804 3617 44803 _cairo_traps_tessellate_polygon
18307 qsort
13782 _line_segs_intersect_ceil
4685 _compute_x
2766 _cairo_traps_add_trap
1069 memmove
121 bsearch
So whatever cairo is doing here is should really try to do it faster... or something. The other possibility, of course, is that we make a huge number of calls into cairo, but given the small amount of our code where time is spent, I kinda doubt that's the only issue.
Status: UNCONFIRMED → NEW
Ever confirmed: true
Whiteboard: [cairo-perf]
Updated•19 years ago
|
Assignee: nobody → general
QA Contact: general → ian
No longer blocks: 334719
Comment 4•18 years ago
|
||
I'm seeing 95%+ cpu on a w2k machine. Looks even more interesting via remote desktop. Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9a4pre) Gecko/20070427 Minefield/3.0a4pre
~50% on xp with Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a5pre) Gecko/20070527 Minefield/3.0a5pre
Comment 5•18 years ago
|
||
I'm getting around 4-6% cpu on Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a7pre)
Gecko/2007071405 Minefield/3.0a7pre
Comment 6•18 years ago
|
||
err, nevermind, that was the wrong thing. I'm getting 50%
Updated•17 years ago
|
Version: 1.8 Branch → Trunk
Comment 7•16 years ago
|
||
28-35pct
so in couple of years CPU will fix this bug
Comment 8•13 years ago
|
||
Looks fixed...
Comment 9•13 years ago
|
||
Attaching testcase just to make sure we still have it if the source site disappears.
Comment 10•12 years ago
|
||
Firefox 17 uses 0% of CPU. Firefox 19 (20121022) uses 7%.
Comment 11•12 years ago
|
||
Testcase seems to not work for recent Firefox - no images seen with FF trunk or FF16.0a1 from July 16.
in IE, "images" of attachment 601334 [details] do appear.
Comment 12•12 years ago
|
||
The testcase animates the 'top' and 'left' properties of the <div> wrapping the
SVG snowflakes. That will cause reflow which is why we repaint.
Updated•11 years ago
|
Whiteboard: [jwatt:invalidation] → [jwatt:invalidation] [in-the-wild]
Updated•11 years ago
|
Priority: -- → P4
Whiteboard: [jwatt:invalidation] [in-the-wild] → [jwatt:invalidation] [in-the-wild] [external-report]
Comment 13•10 years ago
|
||
Updated•10 years ago
|
Attachment #8500013 -
Attachment mime type: text/plain → image/svg+xml
Comment 14•10 years ago
|
||
Comment 15•10 years ago
|
||
Attachment #601334 -
Attachment is obsolete: true
Comment 16•10 years ago
|
||
It seems that although bug 745485 and bug 876321 are fixed, if the <img>'s 'left' property is set to a fractional value then we will invalidate the <img>'s SVG as the <img> moves.
roc, is this expected?
Flags: needinfo?(roc)
Comment 17•10 years ago
|
||
That's bug 1009693.
Yes it is.
Flags: needinfo?(roc)
Updated•8 years ago
|
Whiteboard: [jwatt:invalidation] [in-the-wild] [external-report] → [invalidation] [in-the-wild] [external-report][dup of bug 1009693?]
Updated•8 years ago
|
Summary: SVG performance heavy CPU load on javascript moving graphic → Unnecessary invalidation of SVG in <object> while animating 'top' and 'left' properties
Updated•2 years ago
|
Severity: normal → S3
You need to log in
before you can comment on or make changes to this bug.
Description
•