TaskTracer

From MozillaWiki
Revision as of 11:01, 7 November 2014 by Alive (talk | contribs)
Jump to navigation Jump to search

Introduction

TaskTracer aims at the correlation between Tasks and Runnables, across threads and processes.

By looking at a task, TaskTracer tells you:

  • The “source events” of this task.
    • IO events: touch events, key events, wifi daemon signal
  • Where it is dispatched from.

How to use Task Tracer

mozilla-central

1. Build and flash (built-in)

cd B2G
export MOZ_TASK_TRACER=1; ./build.sh gecko
./flash.sh gecko

2. Start profiling

./profile.sh start -f tasktracer

3. Get result

3.1. Capture current result

./profile.sh capture

3.2. Get Task Tracer Converter

git clone https://github.com/ginayeh/task-tracer-converter -b v2.0

3.3. Convert result

mv profile_*.txt task-tracer-converter/log/
cd task-tracer-converter/
./tasktracer.sh get_mmaps
./task_tracer_converter.py -sp $B2G/objdir/dist/bin/libxul.so \
                           -np $B2G/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/x86_64-linux/bin/nm

v1.3T

1. Get the source code of Task Tracer.

git clone https://github.com/shellylin/gecko-dev/tree/tt-1.3t

2. Build and flash to a real device.

cd B2G
export MOZ_TASK_TRACER=1; ./build.sh gecko
./flash.sh gecko

3. Get the source code of data retriever and data converter.

git clone https://github.com/ginayeh/task-tracer-converter

4. Start profiling.

cd task-tracer-converter
./tasktracer.sh start

5. Stop profiling.

 ./tasktracer.sh stop

The raw log is written into task_tracer_data.logcat.

6. Get memory maps from the real device.

mkdir mmaps
./tasktracer.sh get_mmaps

The memory maps pulled out from the real device are put under mmaps directory automatically.

7. Prepare data for extracting class/task name.

./prepare-data.sh mmaps $objdir

Two intermediate files are generated for later use: mem_offset, symbol.

8. Convert raw log to JSON format.

python task_tracer_converter.py -i task_tracer_data.logcat [-o task_tracer_data.json] [-w]

Default output filename: task_tracer_data.json.

How to read the profile using Nephthys

Import the json file to Nephthys, http://alivedise.github.io/nephthys/

Reference links

TODO

  • Integrate with built-in profiler
    • Timestamp
    • Start/Stop
  • Thread pool
  • CpuTime
  • Integrate with Cleopatra
  • Nested loop
  • Ruler