|
@@ -908,14 +908,11 @@ static void python_process_tracepoint(struct perf_sample *sample,
|
|
|
if (_PyTuple_Resize(&t, n) == -1)
|
|
|
Py_FatalError("error resizing Python tuple");
|
|
|
|
|
|
- if (!dict) {
|
|
|
+ if (!dict)
|
|
|
call_object(handler, t, handler_name);
|
|
|
- } else {
|
|
|
+ else
|
|
|
call_object(handler, t, default_handler_name);
|
|
|
- Py_DECREF(dict);
|
|
|
- }
|
|
|
|
|
|
- Py_XDECREF(all_entries_dict);
|
|
|
Py_DECREF(t);
|
|
|
}
|
|
|
|
|
@@ -1235,7 +1232,6 @@ static void python_process_general_event(struct perf_sample *sample,
|
|
|
|
|
|
call_object(handler, t, handler_name);
|
|
|
|
|
|
- Py_DECREF(dict);
|
|
|
Py_DECREF(t);
|
|
|
}
|
|
|
|
|
@@ -1627,6 +1623,7 @@ static int python_generate_script(struct pevent *pevent, const char *outfile)
|
|
|
fprintf(ofp, "# See the perf-script-python Documentation for the list "
|
|
|
"of available functions.\n\n");
|
|
|
|
|
|
+ fprintf(ofp, "from __future__ import print_function\n\n");
|
|
|
fprintf(ofp, "import os\n");
|
|
|
fprintf(ofp, "import sys\n\n");
|
|
|
|
|
@@ -1636,10 +1633,10 @@ static int python_generate_script(struct pevent *pevent, const char *outfile)
|
|
|
fprintf(ofp, "from Core import *\n\n\n");
|
|
|
|
|
|
fprintf(ofp, "def trace_begin():\n");
|
|
|
- fprintf(ofp, "\tprint \"in trace_begin\"\n\n");
|
|
|
+ fprintf(ofp, "\tprint(\"in trace_begin\")\n\n");
|
|
|
|
|
|
fprintf(ofp, "def trace_end():\n");
|
|
|
- fprintf(ofp, "\tprint \"in trace_end\"\n\n");
|
|
|
+ fprintf(ofp, "\tprint(\"in trace_end\")\n\n");
|
|
|
|
|
|
while ((event = trace_find_next_event(pevent, event))) {
|
|
|
fprintf(ofp, "def %s__%s(", event->system, event->name);
|
|
@@ -1675,7 +1672,7 @@ static int python_generate_script(struct pevent *pevent, const char *outfile)
|
|
|
"common_secs, common_nsecs,\n\t\t\t"
|
|
|
"common_pid, common_comm)\n\n");
|
|
|
|
|
|
- fprintf(ofp, "\t\tprint \"");
|
|
|
+ fprintf(ofp, "\t\tprint(\"");
|
|
|
|
|
|
not_first = 0;
|
|
|
count = 0;
|
|
@@ -1736,31 +1733,31 @@ static int python_generate_script(struct pevent *pevent, const char *outfile)
|
|
|
fprintf(ofp, "%s", f->name);
|
|
|
}
|
|
|
|
|
|
- fprintf(ofp, ")\n\n");
|
|
|
+ fprintf(ofp, "))\n\n");
|
|
|
|
|
|
- fprintf(ofp, "\t\tprint 'Sample: {'+"
|
|
|
- "get_dict_as_string(perf_sample_dict['sample'], ', ')+'}'\n\n");
|
|
|
+ fprintf(ofp, "\t\tprint('Sample: {'+"
|
|
|
+ "get_dict_as_string(perf_sample_dict['sample'], ', ')+'}')\n\n");
|
|
|
|
|
|
fprintf(ofp, "\t\tfor node in common_callchain:");
|
|
|
fprintf(ofp, "\n\t\t\tif 'sym' in node:");
|
|
|
- fprintf(ofp, "\n\t\t\t\tprint \"\\t[%%x] %%s\" %% (node['ip'], node['sym']['name'])");
|
|
|
+ fprintf(ofp, "\n\t\t\t\tprint(\"\\t[%%x] %%s\" %% (node['ip'], node['sym']['name']))");
|
|
|
fprintf(ofp, "\n\t\t\telse:");
|
|
|
- fprintf(ofp, "\n\t\t\t\tprint \"\t[%%x]\" %% (node['ip'])\n\n");
|
|
|
- fprintf(ofp, "\t\tprint \"\\n\"\n\n");
|
|
|
+ fprintf(ofp, "\n\t\t\t\tprint(\"\t[%%x]\" %% (node['ip']))\n\n");
|
|
|
+ fprintf(ofp, "\t\tprint()\n\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
fprintf(ofp, "def trace_unhandled(event_name, context, "
|
|
|
"event_fields_dict, perf_sample_dict):\n");
|
|
|
|
|
|
- fprintf(ofp, "\t\tprint get_dict_as_string(event_fields_dict)\n");
|
|
|
- fprintf(ofp, "\t\tprint 'Sample: {'+"
|
|
|
- "get_dict_as_string(perf_sample_dict['sample'], ', ')+'}'\n\n");
|
|
|
+ fprintf(ofp, "\t\tprint(get_dict_as_string(event_fields_dict))\n");
|
|
|
+ fprintf(ofp, "\t\tprint('Sample: {'+"
|
|
|
+ "get_dict_as_string(perf_sample_dict['sample'], ', ')+'}')\n\n");
|
|
|
|
|
|
fprintf(ofp, "def print_header("
|
|
|
"event_name, cpu, secs, nsecs, pid, comm):\n"
|
|
|
- "\tprint \"%%-20s %%5u %%05u.%%09u %%8u %%-20s \" %% \\\n\t"
|
|
|
- "(event_name, cpu, secs, nsecs, pid, comm),\n\n");
|
|
|
+ "\tprint(\"%%-20s %%5u %%05u.%%09u %%8u %%-20s \" %% \\\n\t"
|
|
|
+ "(event_name, cpu, secs, nsecs, pid, comm), end=\"\")\n\n");
|
|
|
|
|
|
fprintf(ofp, "def get_dict_as_string(a_dict, delimiter=' '):\n"
|
|
|
"\treturn delimiter.join"
|