contrib/memory.py
author Martin Geisler <mg@lazybytes.net>
Sun, 20 Dec 2009 17:18:02 +0100
changeset 10101 155fe35534d3
parent 10017 253d0da256b2
child 10264 d6512b3e9ac0
permissions -rw-r--r--
patch: propagate eolmode down to patchfile The old code mapped the value of eolmode ('strict', 'crlf' or 'lf') to eol (None, '\r\n' or '\n') at the entry point in internalpatch. The value of eol was then used directly as the desired EOL in patchfile. We now delay the mapping and let patchfile do it instead. This allows for more complicated behavior where it does not make sense to map eolmode directly to the target EOLs.

# memory.py - track memory usage
#
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2, incorporated herein by reference.

'''helper extension to measure memory usage

Reads current and peak memory usage from ``/proc/self/status`` and
prints it to ``stderr`` on exit.
'''

import atexit

def memusage(ui):
    """Report memory usage of the current process."""
    status = None
    result = {'peak': 0, 'rss': 0}
    try:
        # This will only work on systems with a /proc file system
        # (like Linux).
        status = open('/proc/self/status', 'r')
        for line in status:
            parts = line.split()
            key = parts[0][2:-1].lower()
            if key in result:
                result[key] = int(parts[1])
    finally:
        if status is not None:
            status.close()
    ui.write_err(", ".join(["%s: %.1f MiB" % (key, value/1024.0)
                            for key, value in result.iteritems()]) + "\n")

def extsetup(ui):
    atexit.register(memusage, ui)