Language Selection

English French German Italian Portuguese Spanish

Mozilla: Rust, WebRender, AV1

Filed under
Moz/FF
  • Splash 2018 Mid-Week Report

    I really enjoyed this talk by Felienne Hermans entitled “Explicit Direct Instruction in Programming Education”. The basic gist of the talk was that, when we teach programming, we often phrase it in terms of “exploration” and “self-expression”, but that this winds up leaving a lot of folks in the cold and may be at least partly responsible for the lack of diversity in computer science today. She argued that this is like telling kids that they should just be able to play a guitar and create awesome songs without first practicing their chords1 – it kind of sets them up to fail.

    The thing that really got me excited about this was that it seemed very connected to mentoring and open source. If you watched the Rust Conf keynote this year, you’ll remember Aaron talking about “OSS by Serendipity” – this idea that we should just expect people to come and produce PRs. This is in contrast to the “OSS by Design” that we’ve been trying to practice and preach, where there are explicit in-roads for people to get involved in the project through mentoring, as well as explicit priorities and goals (created, of course, through open processes like the roadmap and so forth). It seems to me that the things like working groups, intro bugs, quest issues, etc, are all ways for people to “practice the basics” of a project before they dive into creating major new features.

  • WebRender newsletter #29

    To introduce this week’s newsletter I’ll write about culling. Culling refers to discarding invisible content and is performed at several stages of the rendering pipeline. During frame building on the CPU we go through all primitives and discard the ones that are off-screen by computing simple rectangle intersections. As a result we avoid transferring a lot of data to the GPU and we can skip processing them as well.

    Unfortunately this isn’t enough. Web page are typically built upon layers and layers of elements stacked on top of one another. The traditional way to render web pages is to draw each element in back-to-front order, which means that for a given pixel on the screen we may have rendered many primitives. This is frustrating because there are a lot of opaque primitives that completely cover the work we did on that pixel for element beneath it, so there is a lot of shading work and memory bandwidth that goes to waste, and memory bandwidth is a very common bottleneck, even on high end hardware.

    Drawing on the same pixels multiple times is called overdraw, and overdraw is not our friend, so a lot effort goes into reducing it.
    In its early days, to mitigate overdraw WebRender divided the screen in tiles and all primitives were assigned to the tiles they covered (primitives that overlap several tiles would be split into a primitive for each tile), and when an opaque primitive covered an entire tile we could simply discard everything that was below it. This tiling approach was good at reducing overdraw with large occluders and also made the batching blended primitives easier (I’ll talk about batching in another episode). It worked quite well for axis-aligned rectangles which is the vast majority of what web pages are made of, but it was hard to split transformed primitives.

  • Into the Depths: The Technical Details Behind AV1

    Since AOMedia officially cemented the AV1 v1.0.0 specification earlier this year, we’ve seen increasing interest from the broadcasting industry. Starting with the NAB Show (National Association of Broadcasters) in Las Vegas earlier this year, and gaining momentum through IBC (International Broadcasting Convention) in Amsterdam, and more recently the NAB East Show in New York, AV1 keeps picking up steam. Each of these industry events attract over 100,000 media professionals. Mozilla attended these shows to demonstrate AV1 playback in Firefox, and showed that AV1 is well on its way to being broadly adopted in web browsers.

More in Tux Machines

today's howtos

Ditching Out-of-Date Documentation Infrastructure

Long ago, the Linux kernel started using 00-Index files to list the contents of each documentation directory. This was intended to explain what each of those files documented. Henrik Austad recently pointed out that those files have been out of date for a very long time and were probably not used by anyone anymore. This is nothing new. Henrik said in his post that this had been discussed already for years, "and they have since then grown further out of date, so perhaps it is time to just throw them out." He counted hundreds of instances where the 00-index file was out of date or not present when it should have been. He posted a patch to rip them all unceremoniously out of the kernel. Joe Perches was very pleased with this. He pointed out that .rst files (the kernel's native documentation format) had largely taken over the original purpose of those 00-index files. He said the oo-index files were even misleading by now. Read more

Mozilla: Rust 1.32.0, Privacy, UX and Firefox Nightly

  • Announcing Rust 1.32.0
    The Rust team is happy to announce a new version of Rust, 1.32.0. Rust is a programming language that is empowering everyone to build reliable and efficient software.
  • Rust 1.32 Released With New Debugger Macro, Jemalloc Disabled By Default
    For fans of Rustlang, it's time to fire up rustup: Rust 1.32 is out today as the latest feature update for this increasingly popular programming language. The Rust 1.32 release brings dbg!() as a new debug macro to print the value of a variable as well as its file/line-number and it works with more than just variables but also commands.
  • Julien Vehent: Maybe don't throw away your VPN just yet...
    At Mozilla, we've long adopted single sign on, first using SAML, nowadays using OpenID Connect (OIDC). Most of our applications, both public facing and internal, require SSO to protect access to privileged resources. We never trust the network and always require strong authentication. And yet, we continue to maintain VPNs to protect our most sensitive admin panels. "How uncool", I hear you object, "and here we thought you were all about DevOps and shit". And you would be correct, but I'm also pragmatic, and I can't count the number of times we've had authentication bugs that let our red team or security auditors bypass authentication. The truth is, even highly experienced programmers and operators make mistakes and will let a bug disable or fail to protect part of that one super sensitive page you never want to leave open to the internet. And I never blame them because SSO/OAuth/OIDC are massively complex protocols that require huge libraries that fail in weird and unexpected ways. I've never reached the point where I fully trust our SSO, because we find one of those auth bypass every other month. Here's the catch: they never lead to major security incidents because we put all our admin panels behind a good old VPN.
  • Reflections on a co-design workshop
    Co-design workshops help designers learn first-hand the language of the people who use their products, in addition to their pain points, workflows, and motivations. With co-design methods [1] participants are no longer passive recipients of products. Rather, they are involved in the envisioning and re-imagination of them. Participants show us what they need and want through sketching and design exercises. The purpose of a co-design workshop is not to have a pixel-perfect design to implement, rather it’s to learn more about the people who use or will use the product, and to involve them in generating ideas about what to design. We ran a co-design workshop at Mozilla to inform our product design, and we’d like to share our experience with you. [...] Our UX team was tasked with improving the Firefox browser extension experience. When people create browser extensions, they use a form to submit their creations. They submit their code and all the metadata about the extension (name, description, icon, etc.). The metadata provided in the submission form is used to populate the extension’s product page on addons.mozilla.org.
  • Firefox Nightly: These Weeks in Firefox: Issue 51

Mesa 18.3.2

Mesa 18.3.2 is now available. In this release candidate we have added more PCI IDs for AMD Vega devices and a number of fixes for the RADV Vulkan drivers. On the Intel side we have a selection ranging from quad swizzles support for ICL to compiler fixes. The nine state tracker has also seen some love as do the Broadcom drivers. To top it all up, we have a healthy mount of build system fixes. Alex Deucher (3): pci_ids: add new vega10 pci ids pci_ids: add new vega20 pci id pci_ids: add new VegaM pci id Alexander von Gluck IV (1): egl/haiku: Fix reference to disp vs dpy Andres Gomez (2): glsl: correct typo in GLSL compilation error message glsl/linker: specify proper direction in location aliasing error Axel Davy (3): st/nine: Fix volumetexture dtor on ctor failure st/nine: Bind src not dst in nine_context_box_upload st/nine: Add src reference to nine_context_range_upload Bas Nieuwenhuizen (5): radv: Do a cache flush if needed before reading predicates. radv: Implement buffer stores with less than 4 components. anv/android: Do not reject storage images. radv: Fix rasterization precision bits. spirv: Fix matrix parameters in function calls. Caio Marcelo de Oliveira Filho (3): nir: properly clear the entry sources in copy_prop_vars nir: properly find the entry to keep in copy_prop_vars nir: remove dead code from copy_prop_vars Dave Airlie (2): radv/xfb: fix counter buffer bounds checks. virgl/vtest: fix front buffer flush with protocol version 0. Dylan Baker (6): meson: Fix ppc64 little endian detection meson: Add support for gnu hurd meson: Add toggle for glx-direct meson: Override C++ standard to gnu++11 when building with altivec on ppc64 meson: Error out if building nouveau and using LLVM without rtti autotools: Remove tegra vdpau driver Emil Velikov (13): docs: add sha256 checksums for 18.3.1 bin/get-pick-list.sh: rework handing of sha nominations bin/get-pick-list.sh: warn when commit lists invalid sha cherry-ignore: meson: libfreedreno depends upon libdrm (for fence support) glx: mandate xf86vidmode only for "drm" dri platforms meson: don't require glx/egl/gbm with gallium drivers pipe-loader: meson: reference correct library TODO: glx: meson: build dri based glx tests, only with -Dglx=dri glx: meson: drop includes from a link-only library glx: meson: wire up the dispatch-index-check test glx/test: meson: assorted include fixes Update version to 18.3.2 docs: add release notes for 18.3.2 Eric Anholt (6): v3d: Fix a leak of the transfer helper on screen destroy. vc4: Fix a leak of the transfer helper on screen destroy. v3d: Fix a leak of the disassembled instruction string during debug dumps. v3d: Make sure that a thrsw doesn't split a multop from its umul24. v3d: Add missing flagging of SYNCB as a TSY op. gallium/ttn: Fix setup of outputs_written. Erik Faye-Lund (2): virgl: wrap vertex element state in a struct virgl: work around bad assumptions in virglrenderer Francisco Jerez (5): intel/fs: Handle source modifiers in lower_integer_multiplication(). intel/fs: Implement quad swizzles on ICL+. intel/fs: Fix bug in lower_simd_width while splitting an instruction which was already split. intel/eu/gen7: Fix brw_MOV() with DF destination and strided source. intel/fs: Respect CHV/BXT regioning restrictions in copy propagation pass. Ian Romanick (2): i965/vec4/dce: Don't narrow the write mask if the flags are used Revert "nir/lower_indirect: Bail early if modes == 0" Jan Vesely (1): clover: Fix build after clang r348827 Jason Ekstrand (6): nir/constant_folding: Fix source bit size logic intel/blorp: Be more conservative about copying clear colors spirv: Handle any bit size in vector_insert/extract anv/apply_pipeline_layout: Set the cursor in lower_res_reindex_intrinsic spirv: Sign-extend array indices intel/peephole_ffma: Fix swizzle propagation Karol Herbst (1): nv50/ir: fix use-after-free in ConstantFolding::visit Kirill Burtsev (1): loader: free error state, when checking the drawable type Lionel Landwerlin (5): anv: don't do partial resolve on layer > 0 i965: include draw_params/derived_draw_params for VF cache workaround i965: add CS stall on VF invalidation workaround anv: explictly specify format for blorp ccs/mcs op anv: flush fast clear colors into compressed surfaces Marek Olšák (1): st/mesa: don't leak pipe_surface if pipe_context is not current Mario Kleiner (1): radeonsi: Fix use of 1- or 2- component GL_DOUBLE vbo's. Nicolai Hähnle (1): meson: link LLVM 'native' component when LLVM is available Rhys Perry (3): radv: don't set surf_index for stencil-only images ac/nir,radv,radeonsi/nir: use correct indices for interpolation intrinsics ac: split 16-bit ssbo loads that may not be dword aligned Rob Clark (2): freedreno/drm: fix memory leak mesa/st/nir: fix missing nir_compact_varyings Samuel Pitoiset (1): radv: switch on EOP when primitive restart is enabled with triangle strips Timothy Arceri (2): tgsi/scan: fix loop exit point in tgsi_scan_tess_ctrl() tgsi/scan: correctly walk instructions in tgsi_scan_tess_ctrl() Vinson Lee (2): meson: Fix typo. meson: Fix libsensors detection. Read more Also: Mesa 18.3.2 Released With Many Fixes As Users Encouraged To Upgrade