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:
parent
6337bd0c91
commit
cac30400a6
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user