contrib/memory.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Sat, 18 Feb 2023 04:10:08 +0100
changeset 50155 cdbd5f990596
parent 48966 6000f5b25c9b
permissions -rw-r--r--
dirstate: requires being in a `changing_parents` `context to set_parents` Enforcing proper operation scoping on all methods that mutate the dirstate will tighten correctness and reduce the risk of bugs. The context to use for this method is obvious, and all code was already compliant ☺

# memory.py - track memory usage
#
# Copyright 2009 Olivia Mackall <olivia@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

'''helper extension to measure memory usage

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


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


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