This version of init contains code to perform "bootcharting", i.e. generating log
files that can be later processed by the tools provided by www.bootchart.org.

To activate it, you need to define build 'init' with the INIT_BOOTCHART environment
variable defined to 'true', for example:

    touch system/init/init.c
    m INIT_BOOTCHART=true

On the emulator, use the new -bootchart <timeout> option to boot with bootcharting
activated for <timeout> seconds.

Otherwise, flash your device, and start it. Then create a file on the /data partition
with a command like the following:

  adb shell 'echo $TIMEOUT > /data/bootchart-start'

Where the value of $TIMEOUT corresponds to the wanted bootcharted period in seconds;
for example, to bootchart for 2 minutes, do:

  adb shell 'echo 120 > /data/bootchart-start'

Reboot your device, bootcharting will begin and stop after the period you gave.
You can also stop the bootcharting at any moment by doing the following:

  adb shell 'echo 1 > /data/bootchart-stop'

Note that /data/bootchart-stop is deleted automatically by init at the end of the
bootcharting. This is not the case of /data/bootchart-start, so don't forget to delete it
when you're done collecting data:

  adb shell rm /data/bootchart-start

The log files are placed in /data/bootchart/. you must run the script tools/grab-bootchart.sh
which will use ADB to retrieve them and create a bootchart.tgz file that can be used with
the bootchart parser/renderer, or even uploaded directly to the form located at:

  http://www.bootchart.org/download.html

NOTE: the bootchart.org webform doesn't seem to work at the moment, you can generate an
      image on your machine by doing the following:

         1/ download the sources from www.bootchart.org
         2/ unpack them
         3/ in the source directory, type 'ant' to build the bootchart program
         4/ type 'java -jar bootchart.jar /path/to/bootchart.tgz

technical note:

this implementation of bootcharting does use the 'bootchartd' script provided by
www.bootchart.org, but a C re-implementation that is directly compiled into our init
program.
