lkml.org 
[lkml]   [2015]   [Nov]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/25] perf stat record: Write stat round events on record
    Date
    Writing stat round events on 'perf stat record' for
    each interval round. In non interval mode we store
    round event after the last stat event.

    Tested-by: Kan Liang <kan.liang@intel.com>
    Link: http://lkml.kernel.org/n/tip-a43rs4c6szofeuo2gjlcpm0h@git.kernel.org
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    tools/perf/builtin-stat.c | 20 ++++++++++++++++++++
    1 file changed, 20 insertions(+)

    diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
    index 1567c5337941..16f6fe2f3435 100644
    --- a/tools/perf/builtin-stat.c
    +++ b/tools/perf/builtin-stat.c
    @@ -210,6 +210,16 @@ static int process_synthesized_event(struct perf_tool *tool __maybe_unused,
    return 0;
    }

    +static int write_stat_round_event(u64 time, u64 type)
    +{
    + return perf_event__synthesize_stat_round(NULL, time, type,
    + process_synthesized_event,
    + NULL);
    +}
    +
    +#define WRITE_STAT_ROUND_EVENT(time, interval) \
    + write_stat_round_event(time, PERF_STAT_ROUND_TYPE__ ## interval)
    +
    #define SID(e, x, y) xyarray__entry(e->sample_id, x, y)

    static int
    @@ -285,6 +295,11 @@ static void process_interval(void)
    clock_gettime(CLOCK_MONOTONIC, &ts);
    diff_timespec(&rs, &ts, &ref_time);

    + if (STAT_RECORD) {
    + if (WRITE_STAT_ROUND_EVENT(rs.tv_sec * NSECS_PER_SEC + rs.tv_nsec, INTERVAL))
    + pr_err("failed to write stat round event\n");
    + }
    +
    print_counters(&rs, 0, NULL);
    }

    @@ -1622,6 +1637,11 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused)
    if (STAT_RECORD) {
    int fd = perf_data_file__fd(&perf_stat.file);

    + if (!interval) {
    + if (WRITE_STAT_ROUND_EVENT(walltime_nsecs_stats.max, FINAL))
    + pr_err("failed to write stat round event\n");
    + }
    +
    if (!perf_stat.file.is_pipe) {
    perf_stat.session->header.data_size += perf_stat.bytes_written;
    perf_session__write_header(perf_stat.session, evsel_list, fd, true);
    --
    2.4.3


    \
     
     \ /
      Last update: 2015-11-05 16:01    [W:2.264 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site