You've reached the Gfx team! This page aims to give useful information to get started as a contributor in the Gfx team.
What we are doing
Gfx stands for Graphics. This is the part of the browser engine (Gecko) that concerns itself with the final stages of the rendering of web pages, when we actually draw the contents of the page: text, images, canvas, video... Whenever possible, we use the GPU, via OpenGL or DirectX, to accelerate the drawing.
The Meet the Gfx team page presents us and explains who's working on what.
Get started
To get started, you need to do these few things, in any order:
- Make your own build of Firefox, from the source code of the development version (mozilla-central). This page explains how to do that.
- Find a mentored bug: Find a task to work on. Use this search to find a mentored bug to work on. See below the list of current projects.
- Register an account on Bugzilla.
Contact
- IRC channel: #gfx on Mozilla IRC (irc.mozilla.org). The Meet the Gfx team page helps making sense of IRC nicknames.
- Weekly conference calls: we have weekly team meetings taking place over the phone/videoconference, usually on Mondays 2:30 pm Pacific time. Everyone is welcome to attend them. Dial-in details, agendas and minutes are given on each meeting's page, on that page. If you want to talk about something, please first edit the agenda.
- Mentors: Once you've found a mentored bug that you would like to work on, adding a comment on that bug is a good way to get in contact with the mentor.
- Montly Gfx team contact: For the month of November, the Monthly Gfx team contact is Benoit Jacob
- Development discussion: mostly happens on Bugzilla.
- Mailing list: The mailing list to use for serious discussion that doesn't fit on Bugzilla, is dev-platform.
- Gfx Team: Don't miss the Meet the Gfx team page!
Tools
Here's a quick overview of the tools we're using:
- Bugzilla is where most development discussion takes place. Here's some Bugzilla documentation.
- Mercurial is the SCM (source code management) tool we're using for Mozilla source code.
- Mercurial Queues is not mandatory, but is a very useful tool to work with patches.
- Languages: Gecko source code is C++, the build-system is GNU Makefiles, unit tests are typically JavaScript/HTML.
- Compilers: we currently use Visual Studio on Windows, and GCC on other platforms. We have a plan to start building with Clang/LLVM wherever we can, starting on Mac.
- Patch review: Once you have made a patch for a bug, attach it to the bug and request review for it. It's just a matter of setting 'review?' on it and selecting an appropriate reviewer.
Current projects
Here are the projects on which we're currently focusing. Help with these is welcome!
OpenGL-accelerated Layers on Mobile
Firefox Mobile is the version of Firefox for cell phones and tablets. It uses the same Gecko as desktop Firefox, but has different requirements, so specific work is required in Gecko to make Firefox Mobile faster and more beautiful.
The two Mobile platforms we're currently targeting are Android and Meego. To be clear, Android is the current priority of Mozilla Corporation, but other community members are working actively on Meego support, and much of the code is shared between these two platforms.
Content acceleration
WebGL
WebGL is a DOM API exposing OpenGL ES 2.0 functionality to web pages, allowing for fast 3D graphics.
Work is ongoing on conformance with the WebGL specification, and on performance.
Contacts: Benoit Jacob and Jeff Gilbert.
Mentored bugs: (TODO: none yet)
Files:
- content/canvas/src is where most of the source code is.
- dom/interfaces/canvas/nsIDOMWebGLRenderingContext.idl is the IDL for the WebGL context.
- content/canvas/test/webgl is our copy of the conformance tests. There is also content/canvas/test/crossorigin.
- gfx/angle is our copy of the ANGLE library, providing the shader translator on all platforms and the OpenGL-on-Direct3D implementation on Windows.
OpenGL-accelerated Layers on desktop Linux
Color management improvements
Other areas of the code base
Here are some other areas of the code base that are useful to know about, but that aren't the main projects we're working on at the moment.
Driver Blacklisting
We blacklist bad/old graphics drivers to steer clear of driver bugs. The implement this in an interface, GfxInfo, that is accessible to privileged pages such as about:support.
See the tracking bug for blacklisting improvements.
Contacts: Joe Drew, Benoit Jacob, Jeff Muizelaar, Ali Juma
Files:
- widget/src/xpwidgets has the cross-platform code, see GfxInfoBase.* and GfxDriverInfo.* in this directory.
- widget/public/nsIGfxInfo.idl is the IDL.
- widget/src/windows/GfxInfo.cpp is the Windows-specific code.
- widget/src/cocoa/GfxInfo.mm is the Mac-specific code.
- widget/src/xpwidgets/GfxInfoX11.cpp is the X11-specific code, using data generated by the separate "glxtest" process implemented in toolkit/xre/glxtest.cpp.