Usage
-----

These scripts are made to parse TCMalloc output in order to extract certain
info from them.

In particular, these scripts rely on the error logging system for ChromeOS in
order to extract information. In order to use a script (e.g. total_mem.py), you
just have the command:

./total_mem.py FILENAME

where FILENAME is the name of the log file to be parsed.

Codebase Changes
----------------

There are two ideas that motivate these changes:

1- Turn on TCMalloc sampling.
2- Use perf to collect the sample information.

The following files have to be changed:

in chrome/browser/metrics/perf_provider_chrome_os:

add:
    #include "third_party/tcmalloc/chromium/src/gperftools/malloc_extension.h"

Change the perf profiling interval to something small (60*1000 milliseconds).

inside DoPeriodicCollection, insert the following code:

    std::string output;
    char* chr_arr = new char[9999];
    MallocExtension::instance() ->GetHeapSample(&output);
    MallocExtension::instance() ->GetStats(chr_arr, 9999);
    LOG(ERROR) << "Output Heap Data: ";
    LOG(ERROR) << output;
    LOG(ERROR) << "Output Heap Stats: ";
    output = "";
    for (unsigned int i = 0; i < strlen(chr_arr); i++) {
        output += chr_arr[i];
    }
    LOG(ERROR) << output;
    delete[] chr_arr;