diff options
author | Jeremy Cline <jeremy@jcline.org> | 2018-05-08 17:27:43 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2018-07-11 09:01:50 -0400 |
commit | 877cc639686b68c7de179a485544f4761e376b30 (patch) | |
tree | da8347f4ddf5a66806affae8ffd2f88660ea42fb /tools/perf/util/scripting-engines/trace-event-python.c | |
parent | 092150a25cb7bd6a79aa00bb1ad131063f58073d (diff) |
perf tools: Generate a Python script compatible with Python 2 and 3
When generating a Python script with "perf script -g python", produce
one that is compatible with Python 2 and 3. The difference between the
two generated scripts is:
--- python2-perf-script.py 2018-05-08 15:35:00.865889705 -0400
+++ python3-perf-script.py 2018-05-08 15:34:49.019789564 -0400
@@ -7,6 +7,8 @@
# be retrieved using Python functions of the form common_*(context).
# See the perf-script-python Documentation for the list of available functions.
+from __future__ import print_function
+
import os
import sys
@@ -18,10 +20,10 @@
def trace_begin():
- print "in trace_begin"
+ print("in trace_begin")
def trace_end():
- print "in trace_end"
+ print("in trace_end")
def raw_syscalls__sys_enter(event_name, context, common_cpu,
common_secs, common_nsecs, common_pid, common_comm,
@@ -29,26 +31,26 @@
print_header(event_name, common_cpu, common_secs, common_nsecs,
common_pid, common_comm)
- print "id=%d, args=%s" % \
- (id, args)
+ print("id=%d, args=%s" % \
+ (id, args))
- print 'Sample: {'+get_dict_as_string(perf_sample_dict['sample'], ', ')+'}'
+ print('Sample: {'+get_dict_as_string(perf_sample_dict['sample'], ', ')+'}')
for node in common_callchain:
if 'sym' in node:
- print "\t[%x] %s" % (node['ip'], node['sym']['name'])
+ print("\t[%x] %s" % (node['ip'], node['sym']['name']))
else:
- print " [%x]" % (node['ip'])
+ print(" [%x]" % (node['ip']))
- print "\n"
+ print()
def trace_unhandled(event_name, context, event_fields_dict, perf_sample_dict):
- print get_dict_as_string(event_fields_dict)
- print 'Sample: {'+get_dict_as_string(perf_sample_dict['sample'], ', ')+'}'
+ print(get_dict_as_string(event_fields_dict))
+ print('Sample: {'+get_dict_as_string(perf_sample_dict['sample'], ', ')+'}')
def print_header(event_name, cpu, secs, nsecs, pid, comm):
- print "%-20s %5u %05u.%09u %8u %-20s " % \
- (event_name, cpu, secs, nsecs, pid, comm),
+ print("%-20s %5u %05u.%09u %8u %-20s " % \
+ (event_name, cpu, secs, nsecs, pid, comm), end="")
def get_dict_as_string(a_dict, delimiter=' '):
return delimiter.join(['%s=%s'%(k,str(v))for k,v in sorted(a_dict.items())])
Signed-off-by: Jeremy Cline <jeremy@jcline.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Herton Krzesinski <herton@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/0100016341a7278a-d178c724-2b0f-49ca-be93-80a7d51aaa0d-000000@email.amazonses.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/scripting-engines/trace-event-python.c')
-rw-r--r-- | tools/perf/util/scripting-engines/trace-event-python.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index 46e9e19ab1ac..8b2eb6dbff4d 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c | |||
@@ -1627,6 +1627,7 @@ static int python_generate_script(struct pevent *pevent, const char *outfile) | |||
1627 | fprintf(ofp, "# See the perf-script-python Documentation for the list " | 1627 | fprintf(ofp, "# See the perf-script-python Documentation for the list " |
1628 | "of available functions.\n\n"); | 1628 | "of available functions.\n\n"); |
1629 | 1629 | ||
1630 | fprintf(ofp, "from __future__ import print_function\n\n"); | ||
1630 | fprintf(ofp, "import os\n"); | 1631 | fprintf(ofp, "import os\n"); |
1631 | fprintf(ofp, "import sys\n\n"); | 1632 | fprintf(ofp, "import sys\n\n"); |
1632 | 1633 | ||
@@ -1636,10 +1637,10 @@ static int python_generate_script(struct pevent *pevent, const char *outfile) | |||
1636 | fprintf(ofp, "from Core import *\n\n\n"); | 1637 | fprintf(ofp, "from Core import *\n\n\n"); |
1637 | 1638 | ||
1638 | fprintf(ofp, "def trace_begin():\n"); | 1639 | fprintf(ofp, "def trace_begin():\n"); |
1639 | fprintf(ofp, "\tprint \"in trace_begin\"\n\n"); | 1640 | fprintf(ofp, "\tprint(\"in trace_begin\")\n\n"); |
1640 | 1641 | ||
1641 | fprintf(ofp, "def trace_end():\n"); | 1642 | fprintf(ofp, "def trace_end():\n"); |
1642 | fprintf(ofp, "\tprint \"in trace_end\"\n\n"); | 1643 | fprintf(ofp, "\tprint(\"in trace_end\")\n\n"); |
1643 | 1644 | ||
1644 | while ((event = trace_find_next_event(pevent, event))) { | 1645 | while ((event = trace_find_next_event(pevent, event))) { |
1645 | fprintf(ofp, "def %s__%s(", event->system, event->name); | 1646 | fprintf(ofp, "def %s__%s(", event->system, event->name); |
@@ -1675,7 +1676,7 @@ static int python_generate_script(struct pevent *pevent, const char *outfile) | |||
1675 | "common_secs, common_nsecs,\n\t\t\t" | 1676 | "common_secs, common_nsecs,\n\t\t\t" |
1676 | "common_pid, common_comm)\n\n"); | 1677 | "common_pid, common_comm)\n\n"); |
1677 | 1678 | ||
1678 | fprintf(ofp, "\t\tprint \""); | 1679 | fprintf(ofp, "\t\tprint(\""); |
1679 | 1680 | ||
1680 | not_first = 0; | 1681 | not_first = 0; |
1681 | count = 0; | 1682 | count = 0; |
@@ -1736,31 +1737,31 @@ static int python_generate_script(struct pevent *pevent, const char *outfile) | |||
1736 | fprintf(ofp, "%s", f->name); | 1737 | fprintf(ofp, "%s", f->name); |
1737 | } | 1738 | } |
1738 | 1739 | ||
1739 | fprintf(ofp, ")\n\n"); | 1740 | fprintf(ofp, "))\n\n"); |
1740 | 1741 | ||
1741 | fprintf(ofp, "\t\tprint 'Sample: {'+" | 1742 | fprintf(ofp, "\t\tprint('Sample: {'+" |
1742 | "get_dict_as_string(perf_sample_dict['sample'], ', ')+'}'\n\n"); | 1743 | "get_dict_as_string(perf_sample_dict['sample'], ', ')+'}')\n\n"); |
1743 | 1744 | ||
1744 | fprintf(ofp, "\t\tfor node in common_callchain:"); | 1745 | fprintf(ofp, "\t\tfor node in common_callchain:"); |
1745 | fprintf(ofp, "\n\t\t\tif 'sym' in node:"); | 1746 | fprintf(ofp, "\n\t\t\tif 'sym' in node:"); |
1746 | fprintf(ofp, "\n\t\t\t\tprint \"\\t[%%x] %%s\" %% (node['ip'], node['sym']['name'])"); | 1747 | fprintf(ofp, "\n\t\t\t\tprint(\"\\t[%%x] %%s\" %% (node['ip'], node['sym']['name']))"); |
1747 | fprintf(ofp, "\n\t\t\telse:"); | 1748 | fprintf(ofp, "\n\t\t\telse:"); |
1748 | fprintf(ofp, "\n\t\t\t\tprint \"\t[%%x]\" %% (node['ip'])\n\n"); | 1749 | fprintf(ofp, "\n\t\t\t\tprint(\"\t[%%x]\" %% (node['ip']))\n\n"); |
1749 | fprintf(ofp, "\t\tprint \"\\n\"\n\n"); | 1750 | fprintf(ofp, "\t\tprint()\n\n"); |
1750 | 1751 | ||
1751 | } | 1752 | } |
1752 | 1753 | ||
1753 | fprintf(ofp, "def trace_unhandled(event_name, context, " | 1754 | fprintf(ofp, "def trace_unhandled(event_name, context, " |
1754 | "event_fields_dict, perf_sample_dict):\n"); | 1755 | "event_fields_dict, perf_sample_dict):\n"); |
1755 | 1756 | ||
1756 | fprintf(ofp, "\t\tprint get_dict_as_string(event_fields_dict)\n"); | 1757 | fprintf(ofp, "\t\tprint(get_dict_as_string(event_fields_dict))\n"); |
1757 | fprintf(ofp, "\t\tprint 'Sample: {'+" | 1758 | fprintf(ofp, "\t\tprint('Sample: {'+" |
1758 | "get_dict_as_string(perf_sample_dict['sample'], ', ')+'}'\n\n"); | 1759 | "get_dict_as_string(perf_sample_dict['sample'], ', ')+'}')\n\n"); |
1759 | 1760 | ||
1760 | fprintf(ofp, "def print_header(" | 1761 | fprintf(ofp, "def print_header(" |
1761 | "event_name, cpu, secs, nsecs, pid, comm):\n" | 1762 | "event_name, cpu, secs, nsecs, pid, comm):\n" |
1762 | "\tprint \"%%-20s %%5u %%05u.%%09u %%8u %%-20s \" %% \\\n\t" | 1763 | "\tprint(\"%%-20s %%5u %%05u.%%09u %%8u %%-20s \" %% \\\n\t" |
1763 | "(event_name, cpu, secs, nsecs, pid, comm),\n\n"); | 1764 | "(event_name, cpu, secs, nsecs, pid, comm), end=\"\")\n\n"); |
1764 | 1765 | ||
1765 | fprintf(ofp, "def get_dict_as_string(a_dict, delimiter=' '):\n" | 1766 | fprintf(ofp, "def get_dict_as_string(a_dict, delimiter=' '):\n" |
1766 | "\treturn delimiter.join" | 1767 | "\treturn delimiter.join" |