DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (cdf352f02ac4)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# 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 http://mozilla.org/MPL/2.0/.


@depends(target)
def jemalloc_default(target):
    return target.kernel in ('Darwin', 'Linux', 'WINNT')


js_option('--enable-jemalloc', env='MOZ_MEMORY', default=jemalloc_default,
          help='{Replace|Do not replace} memory allocator with jemalloc')


set_config('MOZ_MEMORY', True, when='--enable-jemalloc')
set_define('MOZ_MEMORY', True, when='--enable-jemalloc')
add_old_configure_assignment('MOZ_MEMORY', True, when='--enable-jemalloc')


@depends(milestone, build_project)
def replace_malloc_default(milestone, build_project):
    if build_project == 'memory':
        return True
    if milestone.is_early_beta_or_earlier and build_project != 'js':
        return True


js_option('--enable-replace-malloc', default=replace_malloc_default,
          when='--enable-jemalloc',
          help='{Enable|Disable} ability to dynamically replace the malloc implementation')


set_config('MOZ_REPLACE_MALLOC', True, when='--enable-replace-malloc')
set_define('MOZ_REPLACE_MALLOC', True, when='--enable-replace-malloc')


@depends(build_project, when='--enable-replace-malloc')
def replace_malloc_static(build_project):
    # Default to statically linking replace-malloc libraries that can be
    # statically linked, except when building with --enable-project=memory.
    if build_project != 'memory':
        return True


set_config('MOZ_REPLACE_MALLOC_STATIC', replace_malloc_static)

# PHC (Probabilistic Heap Checker)
# ==============================================================

# In general, it only makes sense for PHC to run on the platforms that have a
# crash reporter.
@depends(milestone, target, replace_malloc_default, '--enable-replace-malloc',
         when='--enable-jemalloc')
def phc_default(milestone, target, replace_malloc_default, replace_malloc):
    if not replace_malloc_default or \
       (replace_malloc.origin != 'default' and not replace_malloc):
        return False
    # Nightly or early beta only because PHC has a non-negligible performance cost.
    if not milestone.is_early_beta_or_earlier:
        return False
    # Both Linux32 and Win32 have frequent crashes when stack tracing (for
    # unclear reasons), so PHC is enabled only on 64-bit only in both cases.
    #
    # XXX: PHC is implemented but not yet enabled on Mac. Bug 1576515 is about
    #      enabling it on Mac, but it is blocked by bug 1035892.
    return (target.os == 'GNU' and target.kernel == 'Linux' and
            target.bitness == 64) or \
           (target.kernel == 'WINNT' and target.bitness == 64)


option('--enable-phc', env='MOZ_PHC', default=phc_default,
       when='--enable-jemalloc',
       help='{Enable|Disable} PHC (Probabilistic Memory Checker). '
            'Also enables replace-malloc and frame pointers')
imply_option('--enable-replace-malloc', True, when='--enable-phc')
imply_option('--enable-frame-pointers', True, when='--enable-phc')


set_config('MOZ_PHC', True, when='--enable-phc')