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" -o -name "*.cc" -o -name "*.mm" -maxdepth 1 | wc -l` if [ $numcpp -eq 0 ] then continue fi if ! ( grep -wq SOURCES "$mozbuildfile" || grep -wq UNIFIED_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.
143 ./content/svg/content/src \o/ UNIFIED_SOURCES \o/ 91 ./content/base/src 76 ./content/html/content/src 74 ./gfx/thebes 70 ./xpcom/reflect/xptcall/src/md/unix 65 ./xpcom/tests 64 ./netwerk/base/src 64 ./js/src/jsapi-tests 55 ./security/manager/ssl/src 53 ./content/canvas/src 49 ./toolkit/crashreporter/google-breakpad/src/processor 47 ./widget/windows 46 ./layout/generic \o/ UNIFIED_SOURCES \o/ 44 ./layout/style \o/ UNIFIED_SOURCES \o/ 44 ./gfx/harfbuzz/src 41 ./layout/xul/base/src \o/ UNIFIED_SOURCES \o/ 40 ./netwerk/test 40 ./content/events/src 39 ./widget/cocoa 39 ./js/src 39 ./gfx/2d 38 ./content/xslt/src/xpath 38 ./content/media 37 ./dom/base 36 ./layout/base \o/ UNIFIED_SOURCES \o/ 36 ./gfx/graphite2/src 35 ./xpcom/glue 35 ./layout/svg \o/ UNIFIED_SOURCES \o/ 35 ./ipc/ipdl/test/cxx 33 ./parser/html \o/ UNIFIED_SOURCES \o/ 33 ./netwerk/protocol/http 32 ./js/xpconnect/src 31 ./gfx/ots/src 31 ./content/media/webaudio 30 ./content/xslt/src/xslt 28 ./widget/xpwidgets \o/ UNIFIED_SOURCES \o/ 27 ./widget/gtk 26 ./xpcom/io 26 ./tools/profiler 26 ./toolkit/xre 26 ./toolkit/crashreporter/google-breakpad/src/common 26 ./gfx/gl 26 ./content/xul/templates/src 25 ./ipc/glue 25 ./extensions/universalchardet/src/base 25 ./dom/plugins/ipc 24 ./xpcom/base 24 ./widget/qt 24 ./image/src 24 ./content/smil 24 ./accessible/src/base 23 ./storage/src 22 ./xpcom/ds 22 ./toolkit/crashreporter/google-breakpad/src/common/linux 22 ./layout/mathml \o/ UNIFIED_SOURCES \o/ 22 ./editor/libeditor/base \o/ UNIFIED_SOURCES \o/ 22 ./dom/indexedDB 21 ./dom/plugins/base 19 ./accessible/src/windows/msaa 19 ./accessible/src/atk 18 ./xpcom/string/src 18 ./widget/os2 18 ./widget/android 18 ./layout/forms \o/ UNIFIED_SOURCES \o/ 18 ./gfx/layers 18 ./gfx/angle/src/libGLESv2 18 ./dom/bluetooth 18 ./content/media/webaudio/blink 17 ./netwerk/cache 17 ./editor/libeditor/html \o/ UNIFIED_SOURCES \o/ 17 ./dom/system/gonk 17 ./dom/file 17 ./content/xbl/src 16 ./toolkit/components/places 16 ./netwerk/cache2 16 ./intl/uconv/src \o/ UNIFIED_SOURCES \o/ 16 ./dom/workers 16 ./dom/camera 15 ./js/jsd 15 ./dom/ipc 14 ./rdf/base/src 13 ./widget/windows/winrt 13 ./parser/htmlparser/src \o/ UNIFIED_SOURCES \o/ 13 ./gfx/src 13 ./extensions/spellcheck/hunspell/src 12 ./widget/gonk 12 ./toolkit/mozapps/update/updater 12 ./toolkit/crashreporter/google-breakpad/src/common/mac 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 ./toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer 11 ./toolkit/components/url-classifier 11 ./netwerk/streamconv/converters 11 ./gfx/ycbcr 11 ./dom/plugins/base/android 11 ./dom/mobilemessage/src 11 ./content/media/webspeech/recognition 10 ./accessible/src/mac 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/network/src 8 ./xpfe/appshell/src 8 ./uriloader/exthandler 8 ./python/mozbuild/mozbuild/test/frontend/data/variable-passthru 8 ./python/mozbuild/mozbuild/test/backend/data/variable_passthru 8 ./netwerk/wifi \o/ UNIFIED_SOURCES \o/ 8 ./extensions/spellcheck/src 8 ./editor/composer/src \o/ UNIFIED_SOURCES \o/ 8 ./caps/src 8 ./accessible/src/html 7 ./mozglue/build 7 ./modules/libjar \o/ UNIFIED_SOURCES \o/ 7 ./intl/lwbrk/src 7 ./intl/locale/src 7 ./image/decoders 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/jprof 6 ./toolkit/system/gnome 6 ./toolkit/crashreporter/client 6 ./toolkit/components/startup 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/telephony 6 ./dom/src/storage 6 ./content/xul/document/src 6 ./content/media/wmf 6 ./content/media/webspeech/synth 6 ./content/media/webrtc 6 ./content/media/omx 5 ./widget/gonk/libdisplay 5 ./toolkit/crashreporter/google-breakpad/src/client/solaris/handler 5 ./toolkit/crashreporter/google-breakpad/src/client/mac/handler 5 ./toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation 5 ./toolkit/components/downloads 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/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/crashreporter 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/fmradio/ipc 4 ./dom/encoding 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 ./widget/shared 3 ./tools/trace-malloc/lib 3 ./tools/trace-malloc 3 ./toolkit/system/dbus 3 ./toolkit/crashreporter/google-breakpad/src/common/solaris 3 ./toolkit/crashreporter/google-breakpad/src/client/linux/handler 3 ./toolkit/components/remote 3 ./toolkit/components/ctypes/tests 3 ./startupcache 3 ./rdf/tests/dsds 3 ./parser/xml/src 3 ./netwerk/protocol/data \o/ UNIFIED_SOURCES \o/ 3 ./mobile/android/components/build 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 ./image/decoders/icon 3 ./hal 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 ./embedding/components/printingui/src/mac 3 ./editor/txtsvc/src \o/ UNIFIED_SOURCES \o/ 3 ./dom/wifi 3 ./dom/power 3 ./dom/media 3 ./dom/gamepad 3 ./dom/devicestorage 3 ./dom/audiochannel 3 ./content/xul/content/src 3 ./content/media/webm 3 ./content/media/encoder 3 ./browser/components/shell/src 3 ./accessible/src/windows/sdn 2 ./xpcom/sample 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/library 2 ./toolkit/crashreporter/test 2 ./toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation 2 ./toolkit/crashreporter/google-breakpad/src/client 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/rtsp 2 ./netwerk/protocol/file \o/ UNIFIED_SOURCES \o/ 2 ./mozglue/tests 2 ./layout/ipc \o/ UNIFIED_SOURCES \o/ 2 ./js/xpconnect/shell 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/find/src 2 ./dom/system/unix 2 ./dom/system/android 2 ./dom/system 2 ./dom/src/notification 2 ./dom/src/geolocation 2 ./dom/promise 2 ./dom/plugins/ipc/interpose 2 ./dom/plugins/ipc/hangui 2 ./dom/indexedDB/ipc 2 ./dom/fmradio 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/reflect/xptcall/src 1 ./xpcom/glue/tests/gtest 1 ./xpcom/glue/standalone 1 ./webapprt/win 1 ./webapprt/mac 1 ./webapprt/gtk2 1 ./uriloader/exthandler/tests 1 ./tools/jprof/stub 1 ./toolkit/system/windowsproxy 1 ./toolkit/system/osxproxy 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/ctypes 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 ./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/mac 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/omx-plugin 1 ./media/libspeex_resampler/src 1 ./media/libcubeb/src 1 ./js/src/gdb 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/mac 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/system/mac 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 ./build/win32/vmwarerecordinghelper 1 ./build/win32/crashinjectdll 1 ./build/win32 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