Platform/Porting to unified sources
This page is here to help coordinate the effort around porting Gecko's build system to UNIFIED_SOURCES, a mechanism that enables faster builds by concatenating sources files to have fewer, larger translation units.
Ongoing porting projects
To avoid stepping on each other's toes while porting, please update this table when you start on porting a new source directory to UNIFIED_SOURCES, and remove it when it's landed.
Directory | Status | Owner | Bug |
---|---|---|---|
content/canvas/src | in progress | bjacob | bug 937886 |
gfx/layers | in progress | bjacob | bug 938970 |
content/svg | in progress | ehsan | bug 937908 |
layout/svg | in progress | ehsan | bug 938864 |
Script to track porting status
Here is a script; run it from the root of your source directory to generate a report on the porting status and number of cpp files under each source directory.
#!/bin/bash MOZBUILDFILES="`find . -name moz.build | grep -v \\./obj`" logfile="unified-conversion-status.log" filescount=`echo "$MOZBUILDFILES" | wc -l` fileindex=0 (while read -r mozbuildfile do fileindex=$((fileindex + 1)) mozbuilddir="`dirname "$mozbuildfile"`" numcpp=`find $mozbuilddir -name "*.cpp" -o -name "*.C" | wc -l` if [ $numcpp -eq 0 ] then continue fi if ! grep -q SOURCES "$mozbuildfile" then continue fi echo -ne "\r$((100 * fileindex / filescount))% $mozbuilddir\033[0K" \ 1>&2 outputline="$numcpp $mozbuilddir" unified_msg= if grep -q UNIFIED_SOURCES "$mozbuildfile" then outputline="$outputline \o/ UNIFIED_SOURCES \o/" fi echo "$outputline" done <<< "$MOZBUILDFILES") | sort -rn > "$logfile" echo -e "\rResults written to $logfile\033[0K"
Current porting status
This is just the output of the above script; use it to find a new directory to work on.
The first column is the number of cpp files below each directory, so the higher number hint loosely at greater potential benefits.
Directories that are already ported have \o/ UNIFIED_SOURCES \o/ written next to them.
586 ./gfx/skia 290 ./js/src 229 ./widget 167 ./content/media 143 ./content/svg/content/src \o/ UNIFIED_SOURCES \o/ 126 ./gfx/angle 109 ./gfx/layers 91 ./content/base/src 80 ./xpcom/tests 80 ./xpcom/reflect/xptcall/src 76 ./content/html/content/src 73 ./gfx/thebes 70 ./xpcom/reflect/xptcall/src/md/unix 64 ./netwerk/base/src 64 ./js/src/jsapi-tests 61 ./widget/windows 56 ./gfx/angle/src/libGLESv2 55 ./security/manager/ssl/src 53 ./content/canvas/src 50 ./content/media/webaudio 47 ./layout/style \o/ UNIFIED_SOURCES \o/ 47 ./gfx/2d 45 ./layout/generic \o/ UNIFIED_SOURCES \o/ 42 ./widget/gonk 41 ./layout/xul/base/src \o/ UNIFIED_SOURCES \o/ 40 ./netwerk/test 40 ./content/events/src 39 ./hal 38 ./content/xslt/src/xpath 37 ./xpcom/glue 37 ./dom/base 36 ./layout/base \o/ UNIFIED_SOURCES \o/ 36 ./ipc/ipdl/test/cxx 36 ./gfx/graphite2/src 35 ./layout/svg \o/ UNIFIED_SOURCES \o/ 33 ./parser/html \o/ UNIFIED_SOURCES \o/ 33 ./netwerk/protocol/http 33 ./build/stlport 32 ./js/xpconnect/src 32 ./dom/plugins/base 30 ./content/xslt/src/xslt 28 ./widget/xpwidgets \o/ UNIFIED_SOURCES \o/ 27 ./widget/gtk 26 ./widget/qt 26 ./content/xul/templates/src 25 ./xpcom/io 25 ./ipc/glue 25 ./gfx/gl 25 ./extensions/universalchardet/src/base 25 ./dom/plugins/ipc 24 ./xpcom/base 24 ./uriloader/exthandler 24 ./toolkit/xre 24 ./image/src 24 ./dom/system 24 ./dom/indexedDB 24 ./content/smil 24 ./accessible/src/base 23 ./storage/src 23 ./netwerk/protocol/rtsp 23 ./intl/locale/src 23 ./dom/bluetooth 22 ./xpcom/ds 22 ./layout/mathml \o/ UNIFIED_SOURCES \o/ 22 ./editor/libeditor/base \o/ UNIFIED_SOURCES \o/ 19 ./accessible/src/windows/msaa 19 ./accessible/src/atk 18 ./xpcom/string/src 18 ./widget/os2 18 ./widget/android 18 ./tools/profiler 18 ./layout/forms \o/ UNIFIED_SOURCES \o/ 18 ./content/media/webaudio/blink 17 ./toolkit/mozapps/update 17 ./toolkit/components/places 17 ./netwerk/cache 17 ./editor/libeditor/html \o/ UNIFIED_SOURCES \o/ 17 ./dom/system/gonk 17 ./dom/mobilemessage/src 17 ./dom/file 17 ./content/xbl/src 16 ./netwerk/cache2 16 ./intl/uconv/src \o/ UNIFIED_SOURCES \o/ 16 ./dom/workers 16 ./dom/camera 15 ./js/jsd 15 ./image/decoders 15 ./dom/ipc 14 ./rdf/base/src 13 ./widget/windows/winrt 13 ./parser/htmlparser/src \o/ UNIFIED_SOURCES \o/ 13 ./modules/libjar \o/ UNIFIED_SOURCES \o/ 13 ./media/omx-plugin 13 ./gfx/tests/gtest 13 ./gfx/src 13 ./extensions/spellcheck/hunspell/src 12 ./toolkit/crashreporter 12 ./toolkit/components/url-classifier 12 ./layout/tables \o/ UNIFIED_SOURCES \o/ 12 ./docshell/base 12 ./accessible/src/xul 12 ./accessible/src/windows/ia2 12 ./accessible/src/generic 11 ./xpcom/threads 11 ./xpcom/build 11 ./netwerk/streamconv/converters 11 ./gfx/ycbcr 11 ./dom/plugins/base/android 11 ./content/media/omx 10 ./toolkit/mozapps/update/updater 10 ./content/media/webspeech/synth 9 ./media/libsoundtouch/src \o/ UNIFIED_SOURCES \o/ 9 ./layout/xul/tree \o/ UNIFIED_SOURCES \o/ 9 ./layout/xul/grid \o/ UNIFIED_SOURCES \o/ 9 ./layout/inspector/src \o/ UNIFIED_SOURCES \o/ 9 ./dom/telephony 9 ./dom/network/src 9 ./content/media/webspeech/recognition 8 ./xpfe/appshell/src 8 ./js/src/gdb 8 ./image/decoders/icon 8 ./extensions/spellcheck/src 8 ./editor/composer/src \o/ UNIFIED_SOURCES \o/ 8 ./caps/src 8 ./browser/components 8 ./accessible/src/html 7 ./tools/jprof 7 ./security/sandbox 7 ./netwerk/wifi \o/ UNIFIED_SOURCES \o/ 7 ./mozglue/build 7 ./intl/lwbrk/src 7 ./content/media/directshow 7 ./content/html/document/src 6 ./xpcom/reflect/xptcall/src/md/win32 6 ./widget/gonk/nativewindow 6 ./uriloader/prefetch 6 ./tools/trace-malloc 6 ./toolkit/system/gnome 6 ./toolkit/components/maintenanceservice 6 ./security/manager/pki/src 6 ./security/manager/boot/src 6 ./netwerk/protocol/ftp 6 ./netwerk/ipc \o/ UNIFIED_SOURCES \o/ 6 ./mozglue/linker 6 ./modules/libjar/zipwriter/src \o/ UNIFIED_SOURCES \o/ 6 ./js/xpconnect/wrappers 6 ./extensions/cookie 6 ./extensions/auth 6 ./embedding/browser/webBrowser 6 ./editor/libeditor/text \o/ UNIFIED_SOURCES \o/ 6 ./dom/src/storage 6 ./dom/fmradio 6 ./content/xul/document/src 6 ./content/media/wmf 6 ./content/media/webrtc 5 ./widget/gonk/libdisplay 5 ./toolkit/crashreporter/client 5 ./toolkit/components/startup 5 ./other-licenses/skia-npapi 5 ./netwerk/protocol/wyciwyg \o/ UNIFIED_SOURCES \o/ 5 ./netwerk/protocol/about 5 ./netwerk/dns 5 ./modules/libpref/src 5 ./memory/mozalloc 5 ./layout/printing \o/ UNIFIED_SOURCES \o/ 5 ./intl/unicharutil/util \o/ UNIFIED_SOURCES \o/ 5 ./intl/unicharutil/src \o/ UNIFIED_SOURCES \o/ 5 ./intl/uconv/tests 5 ./intl/locale/src/unix 5 ./gfx/angle/src/libEGL 5 ./embedding/components/commandhandler/src 5 ./editor/txmgr/src \o/ UNIFIED_SOURCES \o/ 5 ./content/xslt/src/base 5 ./content/media/omx/mediaresourcemanager 5 ./content/media/mediasource 5 ./content/media/gstreamer 4 ./xpcom/reflect/xptinfo/src 4 ./xpcom/components 4 ./toolkit/components/downloads 4 ./toolkit/components/ctypes 4 ./startupcache 4 ./python/mozbuild/mozbuild/test/frontend/data/variable-passthru 4 ./python/mozbuild/mozbuild/test/backend/data/variable_passthru 4 ./netwerk/socket \o/ UNIFIED_SOURCES \o/ 4 ./netwerk/protocol/websocket \o/ UNIFIED_SOURCES \o/ 4 ./netwerk/protocol/device \o/ UNIFIED_SOURCES \o/ 4 ./netwerk/cookie 4 ./mozglue/android 4 ./layout/tools/layout-debug/src \o/ UNIFIED_SOURCES \o/ 4 ./intl/locale/src/windows 4 ./intl/locale/src/os2 4 ./gfx/cairo/cairo/src 4 ./extensions/pref/autoconfig/src 4 ./embedding/components/printingui/src/win 4 ./dom/time 4 ./dom/quota 4 ./dom/media 4 ./dom/fmradio/ipc 4 ./dom/encoding 4 ./dom/audiochannel 4 ./docshell/shistory/src 4 ./content/xml/document/src 4 ./content/xml/content/src 4 ./content/media/plugins 4 ./content/media/ogg 4 ./chrome/src 4 ./accessible/src/xpcom 3 ./xpcom/sample 3 ./widget/shared 3 ./tools/trace-malloc/lib 3 ./toolkit/system/dbus 3 ./toolkit/library 3 ./toolkit/components/remote 3 ./toolkit/components/ctypes/tests 3 ./testing/gtest 3 ./rdf/tests/dsds 3 ./parser/xml/src 3 ./netwerk/protocol/data \o/ UNIFIED_SOURCES \o/ 3 ./mobile/android/components/build 3 ./mobile/android/components 3 ./layout/style/test 3 ./layout/build 3 ./js/xpconnect/tests/components/native 3 ./js/xpconnect/loader 3 ./js/src/shell 3 ./js/ipc 3 ./ipc/testshell 3 ./ipc/dbus 3 ./intl/locale/src/mac 3 ./intl/hyphenation/src 3 ./gfx/ipc 3 ./embedding/tests/winEmbed 3 ./embedding/components/windowwatcher/src 3 ./embedding/components/printingui/src/unixshared 3 ./embedding/components/printingui/src/os2 3 ./editor/txtsvc/src \o/ UNIFIED_SOURCES \o/ 3 ./dom/wifi 3 ./dom/power 3 ./dom/gamepad 3 ./dom/devicestorage 3 ./content/xul/content/src 3 ./content/media/webm 3 ./content/media/encoder 3 ./build/win32 3 ./browser/components/shell/src 3 ./accessible/src/windows/sdn 2 ./xpcom/reflect/xptcall/src/md/test 2 ./widget/qt/faststartupqt 2 ./view/src 2 ./uriloader/base 2 ./toolkit/xre/test/win 2 ./toolkit/system/unixproxy 2 ./toolkit/mozapps/update/tests 2 ./toolkit/mozapps/plugins/tests 2 ./toolkit/crashreporter/test 2 ./toolkit/components/mediasniffer 2 ./toolkit/components/autocomplete 2 ./toolkit/components/alerts 2 ./testing/tools/screenshot 2 ./security/manager/ssl/tests/unit/tlsserver/lib 2 ./rdf/datasource/src 2 ./profile/dirserviceprovider/src 2 ./netwerk/system/qt 2 ./netwerk/streamconv/test 2 ./netwerk/protocol/viewsource \o/ UNIFIED_SOURCES \o/ 2 ./netwerk/protocol/file \o/ UNIFIED_SOURCES \o/ 2 ./mozglue/tests 2 ./layout/ipc \o/ UNIFIED_SOURCES \o/ 2 ./ipc/app 2 ./intl/unicharutil/tests 2 ./intl/strres/src 2 ./intl/chardet/src 2 ./extensions/universalchardet/src/xpcom 2 ./extensions/permissions 2 ./embedding/components/printingui/src/mac 2 ./embedding/components/find/src 2 ./dom/system/unix 2 ./dom/system/android 2 ./dom/src/notification 2 ./dom/src/geolocation 2 ./dom/promise 2 ./dom/plugins/ipc/hangui 2 ./dom/indexedDB/ipc 2 ./content/xslt/src/xml 2 ./content/media/webspeech/synth/pico 2 ./content/media/wave 2 ./content/media/raw 2 ./content/media/apple 2 ./content/mathml/content/src 2 ./build/unix/elfhack 2 ./browser/metro/shell/commandexecutehandler 2 ./accessible/src/other 1 ./xulrunner/tools/redit 1 ./xulrunner/stub 1 ./xulrunner/examples/simple/components/src 1 ./xulrunner/app 1 ./xpfe/components/windowds 1 ./xpfe/components/directory 1 ./xpfe/components/build 1 ./xpcom/windbgdlg 1 ./xpcom/tests/external 1 ./xpcom/tests/component_no_aslr 1 ./xpcom/tests/component 1 ./xpcom/tests/bug656331_component 1 ./xpcom/sample/program 1 ./xpcom/reflect/xptinfo/tests 1 ./xpcom/reflect/xptcall/tests 1 ./xpcom/reflect/xptcall/src/md/os2 1 ./xpcom/glue/tests/gtest 1 ./xpcom/glue/standalone 1 ./webapprt/win 1 ./webapprt/gtk2 1 ./uriloader/exthandler/tests 1 ./tools/jprof/stub 1 ./toolkit/system/windowsproxy 1 ./toolkit/system/androidproxy 1 ./toolkit/profile 1 ./toolkit/library/winvccorlib 1 ./toolkit/identity 1 ./toolkit/devtools/server 1 ./toolkit/crashreporter/injector 1 ./toolkit/components/typeaheadfind 1 ./toolkit/components/telemetry 1 ./toolkit/components/statusfilter 1 ./toolkit/components/satchel 1 ./toolkit/components/reflect 1 ./toolkit/components/perf 1 ./toolkit/components/parentalcontrols 1 ./toolkit/components/jsdownloads/src 1 ./toolkit/components/intl 1 ./toolkit/components/find 1 ./toolkit/components/finalizationwitness 1 ./toolkit/components/filepicker 1 ./toolkit/components/diskspacewatcher 1 ./toolkit/components/commandlines 1 ./toolkit/components/build 1 ./testing/mochitest/ssltunnel 1 ./storage/build 1 ./services/crypto/component 1 ./security/sandbox/win/src/sandboxbroker 1 ./security/sandbox/linux 1 ./security/manager/ssl/tests/unit/tlsserver/cmd 1 ./security/manager/ssl/tests/gtest 1 ./rdf/util/src 1 ./rdf/tests/triplescat 1 ./rdf/tests/rdfpoll 1 ./rdf/tests/rdfcat 1 ./rdf/build 1 ./netwerk/system/win32 1 ./netwerk/system/android 1 ./netwerk/streamconv/src 1 ./netwerk/sctp/src 1 ./netwerk/sctp/datachannel 1 ./netwerk/protocol/res 1 ./netwerk/protocol/app 1 ./netwerk/mime 1 ./netwerk/build 1 ./memory/replace/dmd 1 ./media/omx-plugin/lib/ics/libutils 1 ./media/omx-plugin/lib/ics/libstagefright 1 ./media/omx-plugin/lib/hc/libstagefright 1 ./media/omx-plugin/lib/gb235/libstagefright 1 ./media/omx-plugin/lib/gb/libutils 1 ./media/omx-plugin/lib/gb/libstagefright_color_conversion 1 ./media/omx-plugin/lib/gb/libstagefright 1 ./media/omx-plugin/lib/froyo/libstagefright 1 ./media/omx-plugin/hc 1 ./media/omx-plugin/gb235 1 ./media/omx-plugin/gb 1 ./media/omx-plugin/froyo 1 ./media/libspeex_resampler/src 1 ./media/libcubeb/src 1 ./js/xpconnect/shell 1 ./js/ductwork/debugger 1 ./ipc/unixsocket 1 ./ipc/ril 1 ./ipc/nfc 1 ./ipc/netd 1 ./ipc/keystore 1 ./ipc/ipdl/test/cxx/app 1 ./intl/build 1 ./image/encoders/png 1 ./image/encoders/jpeg 1 ./image/encoders/ico 1 ./image/encoders/bmp 1 ./image/decoders/icon/win 1 ./image/decoders/icon/qt 1 ./image/decoders/icon/os2 1 ./image/decoders/icon/gtk 1 ./image/decoders/icon/android 1 ./image/build 1 ./extensions/widgetutils/src 1 ./extensions/gnomevfs 1 ./extensions/gio 1 ./embedding/components/webbrowserpersist/src 1 ./embedding/components/build 1 ./embedding/components/appstartup/src 1 ./embedding/browser/build 1 ./dom/voicemail 1 ./dom/system/windows 1 ./dom/src/offline 1 ./dom/src/jsurl 1 ./dom/src/json 1 ./dom/src/events 1 ./dom/nfc 1 ./dom/media/bridge 1 ./dom/icc/src 1 ./dom/cellbroadcast/src 1 ./dom/browser-element 1 ./dom/battery 1 ./dom/apps/src 1 ./dom/alarm 1 ./dom/activities/src 1 ./docshell/build 1 ./content/svg/document/src 1 ./config 1 ./build/win32/vmwarerecordinghelper 1 ./build/win32/crashinjectdll 1 ./build/unix/stdc++compat 1 ./browser/metro/shell/testing 1 ./browser/metro/shell/linktool 1 ./browser/components/migration/src 1 ./browser/components/feeds/src 1 ./browser/components/dirprovider 1 ./browser/components/build 1 ./browser/components/about 1 ./browser/app 1 ./b2g/gaia 1 ./b2g/app 1 ./accessible/src/windows/uia