diff options
| author | 2019-08-23 11:35:39 +0200 | |
|---|---|---|
| committer | 2019-08-23 11:35:39 +0200 | |
| commit | 6f50fa2a6f1395ad5f59ce7b87730f1f3ea19d76 (patch) | |
| tree | f826145c5bf9c502c033e7b67bcefc30eb0f9eee /tools/perf/util/scripting-engines/trace-event-python.c | |
| parent | HID: logitech-dj: extend consumer usages range (diff) | |
| parent | Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid (diff) | |
| download | wireguard-linux-6f50fa2a6f1395ad5f59ce7b87730f1f3ea19d76.tar.xz wireguard-linux-6f50fa2a6f1395ad5f59ce7b87730f1f3ea19d76.zip | |
Merge branch 'master' into for-5.4/logitech
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@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 | 53 | 
1 files changed, 48 insertions, 5 deletions
| diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index 112bed65232f..25dc1d765553 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -113,6 +113,7 @@ struct tables {  	PyObject		*call_path_handler;  	PyObject		*call_return_handler;  	PyObject		*synth_handler; +	PyObject		*context_switch_handler;  	bool			db_export_mode;  }; @@ -1011,15 +1012,19 @@ static int python_export_thread(struct db_export *dbe, struct thread *thread,  	return 0;  } -static int python_export_comm(struct db_export *dbe, struct comm *comm) +static int python_export_comm(struct db_export *dbe, struct comm *comm, +			      struct thread *thread)  {  	struct tables *tables = container_of(dbe, struct tables, dbe);  	PyObject *t; -	t = tuple_new(2); +	t = tuple_new(5);  	tuple_set_u64(t, 0, comm->db_id);  	tuple_set_string(t, 1, comm__str(comm)); +	tuple_set_u64(t, 2, thread->db_id); +	tuple_set_u64(t, 3, comm->start); +	tuple_set_s32(t, 4, comm->exec);  	call_object(tables->comm_handler, t, "comm_table"); @@ -1233,6 +1238,34 @@ static int python_export_call_return(struct db_export *dbe,  	return 0;  } +static int python_export_context_switch(struct db_export *dbe, u64 db_id, +					struct machine *machine, +					struct perf_sample *sample, +					u64 th_out_id, u64 comm_out_id, +					u64 th_in_id, u64 comm_in_id, int flags) +{ +	struct tables *tables = container_of(dbe, struct tables, dbe); +	PyObject *t; + +	t = tuple_new(9); + +	tuple_set_u64(t, 0, db_id); +	tuple_set_u64(t, 1, machine->db_id); +	tuple_set_u64(t, 2, sample->time); +	tuple_set_s32(t, 3, sample->cpu); +	tuple_set_u64(t, 4, th_out_id); +	tuple_set_u64(t, 5, comm_out_id); +	tuple_set_u64(t, 6, th_in_id); +	tuple_set_u64(t, 7, comm_in_id); +	tuple_set_s32(t, 8, flags); + +	call_object(tables->context_switch_handler, t, "context_switch"); + +	Py_DECREF(t); + +	return 0; +} +  static int python_process_call_return(struct call_return *cr, u64 *parent_db_id,  				      void *data)  { @@ -1296,6 +1329,16 @@ static void python_process_event(union perf_event *event,  	}  } +static void python_process_switch(union perf_event *event, +				  struct perf_sample *sample, +				  struct machine *machine) +{ +	struct tables *tables = &tables_global; + +	if (tables->db_export_mode) +		db_export__switch(&tables->dbe, event, sample, machine); +} +  static void get_handler_name(char *str, size_t size,  			     struct perf_evsel *evsel)  { @@ -1511,6 +1554,7 @@ static void set_table_handlers(struct tables *tables)  	SET_TABLE_HANDLER(sample);  	SET_TABLE_HANDLER(call_path);  	SET_TABLE_HANDLER(call_return); +	SET_TABLE_HANDLER(context_switch);  	/*  	 * Synthesized events are samples but with architecture-specific data @@ -1620,9 +1664,7 @@ error:  static int python_flush_script(void)  { -	struct tables *tables = &tables_global; - -	return db_export__flush(&tables->dbe); +	return 0;  }  /* @@ -1831,6 +1873,7 @@ struct scripting_ops python_scripting_ops = {  	.flush_script		= python_flush_script,  	.stop_script		= python_stop_script,  	.process_event		= python_process_event, +	.process_switch		= python_process_switch,  	.process_stat		= python_process_stat,  	.process_stat_interval	= python_process_stat_interval,  	.generate_script	= python_generate_script, | 
