Closed Bug 422371 Opened 14 years ago Closed 7 months ago

SVG feTurbulence filter is far too slow


(Core :: SVG, defect)

Not set





(Reporter: Hughman, Unassigned)


(Depends on 1 open bug)


(Keywords: hang, perf, Whiteboard: [external-report][filters][chrome is much faster])


(1 file)

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9b4) Gecko/2008030714 Firefox/3.0b4
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9b4) Gecko/2008030714 Firefox/3.0b4

I was trying out the SVG of Firefox from my webpages and I was making a webpage background svg. It was all going well until I added the preserveAspectRatio="none" line to the SVG tag because it seems to go into an endless loop of loading the SVG document. The only thing I could do with firefox when I loaded the SVG was kill it, nothing else was working. It only seems to happen while the window in maximized. If you can restore to window it goes back to normal.

Reproducible: Always

Steps to Reproduce:
1. Load the attached SVG.
2. Maximize window, it gets very hard to do anything.
3. Restore the window, everything returns to normal.
Actual Results:  
Firefox basically hangs when maximized. You do get a few millisecs to click something every few seconds.

Expected Results:  
Normal SVG displaying. Display once then do nothing.


Build platform

Build tools
Compiler 	Version 	Compiler flags
cl 	14.00.50727 	-GL -wd4624 -wd4952 -TC -nologo -W3 -Gy -Fd$(PDBFILE)
cl 	14.00.50727 	-GR- -GL -wd4624 -wd4952 -TP -nologo -Zc:wchar_t- -W3 -Gy -Fd$(PDBFILE)

Configure arguments
--enable-application=browser --enable-update-channel=beta --enable-optimize --disable-debug --disable-tests --enable-update-packaging --enable-official-branding --enable-jemalloc
If I remove anything from this firefox works fine.
Component: General → SVG
Product: Firefox → Core
QA Contact: general → general
Version: unspecified → Trunk
Ever confirmed: true
Flags: wanted1.9+
This works for me on Windows. It is quite slow though, it takes several seconds to display the page, once it has displayed the browser seems OK provided it does not need to refresh the page. 

feTurbulence is not the fastest filter in the world and it gets slower as numOctaves increases; the default value is 1 and you are using 9.
This test case still doesn't work properly for me. I did test the lower numOctaves settings and it does seem to work upto about 7.

Using the test case I gave before the following happens (as specific as i can this time):
- load page and maximize.
- 5 sec loading (frozen state), 1 sec vista saying 'window not responding'.
- a few milliseconds to possibly click the restore button or something else.
- loop the above 2 steps many times (I have watched 10 cycles before getting the restore to work).

Also some more specific hardware and software:
- Vista Home Premium
- 2ghz core 2 duo
- 2gb ram
- 1440x900 on 256mb nvidia graphics card
- sidebar

At the very least I think there should be an option to cancel a filter that is taking a while to load.
Flags: wanted1.9.2+
Keywords: hang
Keywords: perf
Whiteboard: [external-report]
Depends on: 869496
Chrome is much faster (on Mac at least) when resizing the window with the attached testcase.
Summary: SVG filter in rectangle stretched using preserveAspectRatio="none" hangs firefox when maximized → SVG feTurbulence filter is far too slow
Whiteboard: [external-report] → [external-report][filters][chrome is much faster]
It looks like we're already using the D2D facilities for this (D2D1_TURBULENCE_NOISE) in FilterNodeD2D1.cpp.

We are not using the Skia API though:
OS: Windows Vista → Mac OS X

Following the reporter's steps I am able to confirm that the issues doesn't happen anymore on MacOS 10.15 on any of the current versions of Firefox Nightly 87.0a1 (2021-02-11), beta 86.0b9 and release 85.0.2. No crashes encountered during the tests.

Closing this issue as Resolved > Worksforme.
Feel free to re-open or file a new bug if this issue reoccurs again.

Closed: 7 months ago
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.