#!/usr/bin/python2.4 -E

import os
import re
import sys

def PrintUsage():
    print "Usage:" + sys.argv[0] + " dir"
    print "    dir: directory on the host to store profile results"

if (len(sys.argv) != 2):
    PrintUsage()
    sys.exit(1)

try:
    oprofile_event_dir = os.environ['OPROFILE_EVENTS_DIR']
except:
    print "OPROFILE_EVENTS_DIR not set. Run \". envsetup.sh\" first"
    sys.exit(1)

output_dir = sys.argv[1];

try:
    os.makedirs(output_dir)
except:
    if os.path.exists(output_dir):
        print "Directory already exists:", output_dir
    else:
        print "Cannot create", output_dir
    sys.exit(1)

# get the samples off the phone
result = os.system("adb pull /data/oprofile/samples " + output_dir + \
                   "/raw_samples > /dev/null 2>&1")
if result != 0:
    print "adb pull failure, exiting"
    sys.exit(1)

# enter the destination directory
os.chdir(output_dir)
stream = os.popen("find raw_samples -type f -name \*all")

# now all the sample files are on the host, we need to invoke opimport one at a
# time to convert the content from the ARM abi to x86 ABI

# break the full filename into:
# 1: leading dir: "raw_samples"
# 2: intermediate dirs: "/blah/blah/blah"
# 3: filename: e.g. "CPU_CYCLES.150000.0.all.all.all"
pattern = re.compile("(^raw_samples)(.*)/(.*)$")
for line in stream:
    match = pattern.search(line)
    leading_dir = match.group(1)
    middle_part = match.group(2)
    file_name = match.group(3)

    dir = "samples" + middle_part

    # if multiple events are collected the directory could have been setup
    if not os.path.exists(dir):
        os.makedirs(dir)

    cmd = oprofile_event_dir + "/bin/opimport -a " + oprofile_event_dir + \
          "/abi/arm_abi -o samples" + middle_part + "/" + file_name + " " + line
    os.system(cmd)

stream.close()

# short summary of profiling results
os.system(oprofile_event_dir + "/bin/opreport --session-dir=.")
