Skip to content

Commit

Permalink
perf tools: Add call information to the database export API
Browse files Browse the repository at this point in the history
Make it possible for the database export API to use the enhanced thread
stack and export detailed information about paired calls and returns.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1414678188-14946-6-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Adrian Hunter authored and Arnaldo Carvalho de Melo committed Nov 3, 2014
1 parent c29414f commit 88f50d6
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 1 deletion.
52 changes: 51 additions & 1 deletion tools/perf/util/db-export.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "comm.h"
#include "symbol.h"
#include "event.h"
#include "thread-stack.h"
#include "db-export.h"

int db_export__init(struct db_export *dbe)
Expand All @@ -29,8 +30,10 @@ int db_export__init(struct db_export *dbe)
return 0;
}

void db_export__exit(struct db_export *dbe __maybe_unused)
void db_export__exit(struct db_export *dbe)
{
call_return_processor__free(dbe->crp);
dbe->crp = NULL;
}

int db_export__evsel(struct db_export *dbe, struct perf_evsel *evsel)
Expand Down Expand Up @@ -270,6 +273,13 @@ int db_export__sample(struct db_export *dbe, union perf_event *event,
&es.addr_sym_db_id, &es.addr_offset);
if (err)
return err;
if (dbe->crp) {
err = thread_stack__process(thread, comm, sample, al,
&addr_al, es.db_id,
dbe->crp);
if (err)
return err;
}
}

if (dbe->export_sample)
Expand Down Expand Up @@ -316,3 +326,43 @@ int db_export__branch_types(struct db_export *dbe)
}
return err;
}

int db_export__call_path(struct db_export *dbe, struct call_path *cp)
{
int err;

if (cp->db_id)
return 0;

if (cp->parent) {
err = db_export__call_path(dbe, cp->parent);
if (err)
return err;
}

cp->db_id = ++dbe->call_path_last_db_id;

if (dbe->export_call_path)
return dbe->export_call_path(dbe, cp);

return 0;
}

int db_export__call_return(struct db_export *dbe, struct call_return *cr)
{
int err;

if (cr->db_id)
return 0;

err = db_export__call_path(dbe, cr->cp);
if (err)
return err;

cr->db_id = ++dbe->call_return_last_db_id;

if (dbe->export_call_return)
return dbe->export_call_return(dbe, cr);

return 0;
}
12 changes: 12 additions & 0 deletions tools/perf/util/db-export.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ struct comm;
struct dso;
struct perf_sample;
struct addr_location;
struct call_return_processor;
struct call_path;
struct call_return;

struct export_sample {
union perf_event *event;
Expand Down Expand Up @@ -57,6 +60,10 @@ struct db_export {
int (*export_branch_type)(struct db_export *dbe, u32 branch_type,
const char *name);
int (*export_sample)(struct db_export *dbe, struct export_sample *es);
int (*export_call_path)(struct db_export *dbe, struct call_path *cp);
int (*export_call_return)(struct db_export *dbe,
struct call_return *cr);
struct call_return_processor *crp;
u64 evsel_last_db_id;
u64 machine_last_db_id;
u64 thread_last_db_id;
Expand All @@ -65,6 +72,8 @@ struct db_export {
u64 dso_last_db_id;
u64 symbol_last_db_id;
u64 sample_last_db_id;
u64 call_path_last_db_id;
u64 call_return_last_db_id;
};

int db_export__init(struct db_export *dbe);
Expand All @@ -89,4 +98,7 @@ int db_export__sample(struct db_export *dbe, union perf_event *event,

int db_export__branch_types(struct db_export *dbe);

int db_export__call_path(struct db_export *dbe, struct call_path *cp);
int db_export__call_return(struct db_export *dbe, struct call_return *cr);

#endif

0 comments on commit 88f50d6

Please sign in to comment.