Commit-ID:  b685ac22b436455db9c9c16b384d7aa4531cdd80
Gitweb:     http://git.kernel.org/tip/b685ac22b436455db9c9c16b384d7aa4531cdd80
Author:     Arnaldo Carvalho de Melo <a...@redhat.com>
AuthorDate: Wed, 22 Jul 2015 12:52:17 -0300
Committer:  Arnaldo Carvalho de Melo <a...@redhat.com>
CommitDate: Thu, 23 Jul 2015 11:28:35 -0300

perf symbols: Add front end cache for DSO symbol lookup

Acked-by: David Ahern <dsah...@gmail.com>
Cc: Adrian Hunter <adrian.hun...@intel.com>
Cc: Borislav Petkov <b...@suse.de>
Cc: Frederic Weisbecker <fweis...@gmail.com>
Cc: Jiri Olsa <jo...@redhat.com>
Cc: Namhyung Kim <namhy...@kernel.org>
Cc: Stephane Eranian <eran...@google.com>
Link: http://lkml.kernel.org/n/tip-voo94tow8wpkcc76mlkny...@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
---
 tools/perf/util/dso.h    | 4 ++++
 tools/perf/util/symbol.c | 7 ++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
index 2fe98bb..c73276d 100644
--- a/tools/perf/util/dso.h
+++ b/tools/perf/util/dso.h
@@ -137,6 +137,10 @@ struct dso {
        struct rb_node   rb_node;       /* rbtree node sorted by long name */
        struct rb_root   symbols[MAP__NR_TYPES];
        struct rb_root   symbol_names[MAP__NR_TYPES];
+       struct {
+               u64             addr;
+               struct symbol   *symbol;
+       } last_find_result[MAP__NR_TYPES];
        void             *a2l;
        char             *symsrc_filename;
        unsigned int     a2l_fails;
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 45c2e3a..725640f 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -444,7 +444,12 @@ static struct symbol *symbols__find_by_name(struct rb_root 
*symbols,
 struct symbol *dso__find_symbol(struct dso *dso,
                                enum map_type type, u64 addr)
 {
-       return symbols__find(&dso->symbols[type], addr);
+       if (dso->last_find_result[type].addr != addr) {
+               dso->last_find_result[type].addr   = addr;
+               dso->last_find_result[type].symbol = 
symbols__find(&dso->symbols[type], addr);
+       }
+
+       return dso->last_find_result[type].symbol;
 }
 
 struct symbol *dso__first_symbol(struct dso *dso, enum map_type type)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to