lkml.org 
[lkml]   [2015]   [Jul]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 14/47] perf tools: Add thread_map__new_event function
    Date
    Introducing thread_map__new_event function to create
    struct thread_map object from thread_map event.

    Link: http://lkml.kernel.org/n/tip-0gu5uv3g51p4mzul93bhh2yh@git.kernel.org
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    tools/perf/tests/thread-map.c | 14 ++++++++++++++
    tools/perf/util/thread_map.c | 27 +++++++++++++++++++++++++++
    tools/perf/util/thread_map.h | 3 +++
    3 files changed, 44 insertions(+)

    diff --git a/tools/perf/tests/thread-map.c b/tools/perf/tests/thread-map.c
    index 0facd9fa3458..da7b047d3ada 100644
    --- a/tools/perf/tests/thread-map.c
    +++ b/tools/perf/tests/thread-map.c
    @@ -47,10 +47,24 @@ static int process_event(struct perf_tool *tool __maybe_unused,
    struct machine *machine __maybe_unused)
    {
    struct thread_map_event *map = &event->thread_map;
    + struct thread_map *threads;

    TEST_ASSERT_VAL("wrong nr", map->nr == 1);
    TEST_ASSERT_VAL("wrong pid", map->data[0].pid == (u64) getpid());
    TEST_ASSERT_VAL("wrong comm", !strcmp(map->data[0].comm, "perf"));
    +
    + threads = thread_map__new_event(&event->thread_map);
    + TEST_ASSERT_VAL("failed to alloc map", threads);
    +
    + TEST_ASSERT_VAL("wrong nr", threads->nr == 1);
    + TEST_ASSERT_VAL("wrong pid",
    + thread_map__pid(threads, 0) == getpid());
    + TEST_ASSERT_VAL("wrong comm",
    + thread_map__comm(threads, 0) &&
    + !strcmp(thread_map__comm(threads, 0), "perf"));
    + TEST_ASSERT_VAL("wrong refcnt",
    + atomic_read(&threads->refcnt) == 1);
    + thread_map__put(threads);
    return 0;
    }

    diff --git a/tools/perf/util/thread_map.c b/tools/perf/util/thread_map.c
    index da7646d767fe..34d44df2fb1e 100644
    --- a/tools/perf/util/thread_map.c
    +++ b/tools/perf/util/thread_map.c
    @@ -13,6 +13,7 @@
    #include "thread_map.h"
    #include "util.h"
    #include "debug.h"
    +#include "event.h"

    /* Skip "." and ".." directories */
    static int filter(const struct dirent *dir)
    @@ -407,3 +408,29 @@ void thread_map__read_comms(struct thread_map *threads)
    for (i = 0; i < threads->nr; ++i)
    comm_init(threads, i);
    }
    +
    +static void thread_map__copy_event(struct thread_map *threads,
    + struct thread_map_event *event)
    +{
    + unsigned i;
    +
    + threads->nr = (int) event->nr;
    +
    + for (i = 0; i < event->nr; i++) {
    + thread_map__set_pid(threads, i, (pid_t) event->data[i].pid);
    + threads->map[i].comm = strndup(event->data[i].comm, 16);
    + }
    +
    + atomic_set(&threads->refcnt, 1);
    +}
    +
    +struct thread_map *thread_map__new_event(struct thread_map_event *event)
    +{
    + struct thread_map *threads;
    +
    + threads = thread_map__alloc(event->nr);
    + if (threads)
    + thread_map__copy_event(threads, event);
    +
    + return threads;
    +}
    diff --git a/tools/perf/util/thread_map.h b/tools/perf/util/thread_map.h
    index af679d8a50f8..85e4c7c4fbde 100644
    --- a/tools/perf/util/thread_map.h
    +++ b/tools/perf/util/thread_map.h
    @@ -16,11 +16,14 @@ struct thread_map {
    struct thread_map_data map[];
    };

    +struct thread_map_event;
    +
    struct thread_map *thread_map__new_dummy(void);
    struct thread_map *thread_map__new_by_pid(pid_t pid);
    struct thread_map *thread_map__new_by_tid(pid_t tid);
    struct thread_map *thread_map__new_by_uid(uid_t uid);
    struct thread_map *thread_map__new(pid_t pid, pid_t tid, uid_t uid);
    +struct thread_map *thread_map__new_event(struct thread_map_event *event);

    struct thread_map *thread_map__get(struct thread_map *map);
    void thread_map__put(struct thread_map *map);
    --
    2.4.3


    \
     
     \ /
      Last update: 2015-07-21 14:41    [W:4.027 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site