author James Teh <>
Mon, 25 May 2020 14:15:57 +0000
changeset 532094 da2c7b0ac9a44e44000a6be1cea9d753c33784d4
parent 508663 c3a720bc6323effd54d327cadc0de0cfecf9191d
permissions -rwxr-xr-x
Bug 1638238: Cache previous column header for each cell to make TableCellAccessible::ColHeaders faster. r=eeejay Previously, to get the column headers for a cell when there weren't explicit headers, we walked over all previous cells in the column looking for headers. For large tables with thousands of rows, this was very expensive, particularly when Windows screen readers rendered virtual buffers, fetching headers for all cells. To speed this up, we now lazily cache the previous column header for each cell. We even cache whether there is no previous header, since that is quite common and we don't want to pointlessly walk in that case. Subsequent cells utilise the cached values (if any) for prior cells. We don't store the cache on individual TableCellAccessibles because that would require us to walk all cells to invalidate the cache, even if few or no cells had cached values. Instead, we store the cache as a hash table on the TableAccessible. This way, we can just clear the cache whenever a column header is added to the tree. We invalidate the cache whenever a column header is bound to its parent. We don't need to invalidate the cache for removals because we instead just ignore defunct Accessibles in the cache. Differential Revision:

#! /bin/sh
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at


if test "$OS_ARCH" = "WINNT"; then
  if ! test "$HAVE_64BIT_BUILD"; then
    if test "$MOZ_UPDATE_CHANNEL" = "nightly" -o \
            "$MOZ_UPDATE_CHANNEL" = "nightly-try" -o \
            "$MOZ_UPDATE_CHANNEL" = "aurora" -o \
            "$MOZ_UPDATE_CHANNEL" = "beta" -o \
            "$MOZ_UPDATE_CHANNEL" = "release"; then
      if ! test "$MOZ_DEBUG"; then
        if ! test "$USE_STUB_INSTALLER"; then
          # Expect USE_STUB_INSTALLER from taskcluster for downstream task consistency
          echo "ERROR: STUB installer expected to be enabled but"
          echo "ERROR: USE_STUB_INSTALLER is not specified in the environment"
          exit 1


# MOZ_APP_DISPLAYNAME will be set by branding/
# MOZ_BRANDING_DIRECTORY is the default branding directory used when none is
# specified. It should never point to the "official" branding directory.
# For mozilla-beta, mozilla-release, or mozilla-central repositories, use
# "unofficial" branding.
# For the mozilla-aurora repository, use "aurora".


# Include the DevTools client, not just the server (which is the default)