author Nicholas D. Matsakis <>
Thu, 24 Jan 2013 21:12:44 -0800
changeset 129727 ace1e79d65d90f12ec5644eee5ceecce25c90649
parent 128920 ec072cee05025335f0637de7e1dab95623fe8a56
child 130353 95bec0e5a600654c34f4b9f280e4293c71055885
child 130503 729d655f29f6fe09bd65ba1fe861b1051da480d4
permissions -rwxr-xr-x
Bug 825714: Refactor JS allocation routines to enable allocation on parallel threads, and move various ion fields into per-thread-data. r=billm More detailed: - A new routine JSObject::parExtendDenseArray() that permits parallel code to allocate a dense array on its own Allocator. - Create an allocation path in the GC for loading a fresh arena as needed (ArenaLists::parallelAllocate()). - Ensure that if GC is triggered during parallel execution, parallel execution is aborted and the request is deferred until parallel execution terminates. - Updates to the ForkJoin/ThreadPool so that they create their own Allocators as well as other misc API changes. - Moves some of the ion-related fields (e.g., |ionTop|) into perThreadData. - Remove out-of-date malloc tracking fields.

#!/usr/bin/env 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

from __future__ import print_function, unicode_literals

import os
import platform
import sys

# Ensure we are running Python 2.7+. We put this check here so we generate a
# user-friendly error message rather than a cryptic stack trace on module
# import.
if sys.version_info[0] == 2 and sys.version_info[1] < 7:
    print('Python 2.7 or above is required to run mach.')
    print('You are running', platform.python_version())

# TODO Bug 794506 Integrate with the in-tree virtualenv configuration.

# Individual files providing mach commands.

our_dir = os.path.dirname(os.path.abspath(__file__))

    import mach.main
except ImportError:
    sys.path[0:0] = [os.path.join(our_dir, path) for path in SEARCH_PATHS]

    import mach.main

# All of the code is in a module because EVERYTHING IS A LIBRARY.
mach = mach.main.Mach(our_dir)

for path in MACH_MODULES:
    mach.load_commands_from_file(os.path.join(our_dir, path))