perf scripting: Add scripting_context__update()

Move scripting_context update to a separate function and add
the arguments of ->process_event() to it.

This prepares the way for adding more methods to the perf_trace_context
module, by providing the context information that they will need.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: https://lore.kernel.org/r/20210530192308.7382-4-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Adrian Hunter 2021-05-30 22:22:58 +03:00 committed by Arnaldo Carvalho de Melo
parent 6337bd0c91
commit cac30400a6
4 changed files with 38 additions and 7 deletions

View File

@ -371,9 +371,6 @@ static void perl_process_tracepoint(struct perf_sample *sample,
s = nsecs / NSEC_PER_SEC; s = nsecs / NSEC_PER_SEC;
ns = nsecs - s * NSEC_PER_SEC; ns = nsecs - s * NSEC_PER_SEC;
scripting_context->event_data = data;
scripting_context->pevent = evsel->tp_format->tep;
ENTER; ENTER;
SAVETMPS; SAVETMPS;
PUSHMARK(SP); PUSHMARK(SP);
@ -457,8 +454,9 @@ static void perl_process_event(union perf_event *event,
struct perf_sample *sample, struct perf_sample *sample,
struct evsel *evsel, struct evsel *evsel,
struct addr_location *al, struct addr_location *al,
struct addr_location *addr_al __maybe_unused) struct addr_location *addr_al)
{ {
scripting_context__update(scripting_context, event, sample, evsel, al, addr_al);
perl_process_tracepoint(sample, evsel, al); perl_process_tracepoint(sample, evsel, al);
perl_process_event_generic(event, sample, evsel); perl_process_event_generic(event, sample, evsel);
} }

View File

@ -897,9 +897,6 @@ static void python_process_tracepoint(struct perf_sample *sample,
s = nsecs / NSEC_PER_SEC; s = nsecs / NSEC_PER_SEC;
ns = nsecs - s * NSEC_PER_SEC; ns = nsecs - s * NSEC_PER_SEC;
scripting_context->event_data = data;
scripting_context->pevent = evsel->tp_format->tep;
context = _PyCapsule_New(scripting_context, NULL, NULL); context = _PyCapsule_New(scripting_context, NULL, NULL);
PyTuple_SetItem(t, n++, _PyUnicode_FromString(handler_name)); PyTuple_SetItem(t, n++, _PyUnicode_FromString(handler_name));
@ -1403,6 +1400,8 @@ static void python_process_event(union perf_event *event,
{ {
struct tables *tables = &tables_global; struct tables *tables = &tables_global;
scripting_context__update(scripting_context, event, sample, evsel, al, addr_al);
switch (evsel->core.attr.type) { switch (evsel->core.attr.type) {
case PERF_TYPE_TRACEPOINT: case PERF_TYPE_TRACEPOINT:
python_process_tracepoint(sample, evsel, al, addr_al); python_process_tracepoint(sample, evsel, al, addr_al);

View File

@ -12,10 +12,31 @@
#include "debug.h" #include "debug.h"
#include "trace-event.h" #include "trace-event.h"
#include "event.h"
#include "evsel.h"
#include <linux/zalloc.h> #include <linux/zalloc.h>
struct scripting_context *scripting_context; struct scripting_context *scripting_context;
void scripting_context__update(struct scripting_context *c,
union perf_event *event,
struct perf_sample *sample,
struct evsel *evsel,
struct addr_location *al,
struct addr_location *addr_al)
{
c->event_data = sample->raw_data;
if (evsel->tp_format)
c->pevent = evsel->tp_format->tep;
else
c->pevent = NULL;
c->event = event;
c->sample = sample;
c->evsel = evsel;
c->al = al;
c->addr_al = addr_al;
}
static int flush_script_unsupported(void) static int flush_script_unsupported(void)
{ {
return 0; return 0;

View File

@ -11,6 +11,7 @@ union perf_event;
struct perf_tool; struct perf_tool;
struct thread; struct thread;
struct tep_plugin_list; struct tep_plugin_list;
struct evsel;
struct trace_event { struct trace_event {
struct tep_handle *pevent; struct tep_handle *pevent;
@ -101,8 +102,20 @@ void setup_python_scripting(void);
struct scripting_context { struct scripting_context {
struct tep_handle *pevent; struct tep_handle *pevent;
void *event_data; void *event_data;
union perf_event *event;
struct perf_sample *sample;
struct evsel *evsel;
struct addr_location *al;
struct addr_location *addr_al;
}; };
void scripting_context__update(struct scripting_context *scripting_context,
union perf_event *event,
struct perf_sample *sample,
struct evsel *evsel,
struct addr_location *al,
struct addr_location *addr_al);
int common_pc(struct scripting_context *context); int common_pc(struct scripting_context *context);
int common_flags(struct scripting_context *context); int common_flags(struct scripting_context *context);
int common_lock_depth(struct scripting_context *context); int common_lock_depth(struct scripting_context *context);