lkml.org 
[lkml]   [2020]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH v8 07/13] perf stat: factor out event handling loop into dispatch_events()
    From
    Date

    Consolidate event dispatching loops for fork, attach and system
    wide monitoring use cases into common dispatch_events() function.

    Signed-off-by: Alexey Budankov <alexey.budankov@linux.intel.com>
    ---
    tools/perf/builtin-stat.c | 35 ++++++++++++++++++++++++-----------
    1 file changed, 24 insertions(+), 11 deletions(-)

    diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
    index 3bc538576607..39749c290508 100644
    --- a/tools/perf/builtin-stat.c
    +++ b/tools/perf/builtin-stat.c
    @@ -557,6 +557,27 @@ static bool is_target_alive(struct target *_target,
    return false;
    }

    +static int dispatch_events(bool forks, int timeout, int interval, int *times, struct timespec *ts)
    +{
    + bool stop = false;
    + int child = 0, status = 0;
    +
    + while (1) {
    + if (forks)
    + child = waitpid(child_pid, &status, WNOHANG);
    + else
    + child = !is_target_alive(&target, evsel_list->core.threads) ? 1 : 0;
    +
    + if (done || stop || child)
    + break;
    +
    + nanosleep(ts, NULL);
    + stop = process_timeout(timeout, interval, times);
    + }
    +
    + return status;
    +}
    +
    enum counter_recovery {
    COUNTER_SKIP,
    COUNTER_RETRY,
    @@ -628,7 +649,6 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
    struct affinity affinity;
    int i, cpu;
    bool second_pass = false;
    - bool stop = false;

    if (interval) {
    ts.tv_sec = interval / USEC_PER_MSEC;
    @@ -797,12 +817,8 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
    perf_evlist__start_workload(evsel_list);
    enable_counters();

    - if (interval || timeout) {
    - while (!stop && !waitpid(child_pid, &status, WNOHANG)) {
    - nanosleep(&ts, NULL);
    - stop = process_timeout(timeout, interval, &times);
    - }
    - }
    + if (interval || timeout)
    + status = dispatch_events(forks, timeout, interval, &times, &ts);
    if (child_pid != -1) {
    if (timeout)
    kill(child_pid, SIGTERM);
    @@ -819,10 +835,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
    psignal(WTERMSIG(status), argv[0]);
    } else {
    enable_counters();
    - while (!done && !stop && is_target_alive(&target, evsel_list->core.threads)) {
    - nanosleep(&ts, NULL);
    - stop = process_timeout(timeout, interval, &times);
    - }
    + dispatch_events(forks, timeout, interval, &times, &ts);
    }

    disable_counters();
    --
    2.24.1

    \
     
     \ /
      Last update: 2020-06-17 10:41    [W:3.975 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site