On Wed, Dec 24, 2014 at 04:15:12PM +0900, Namhyung Kim wrote:

SNIP

>               .func = NULL,
>       },
>  };
> diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
> index 43ac17780629..1090337f63e5 100644
> --- a/tools/perf/tests/tests.h
> +++ b/tools/perf/tests/tests.h
> @@ -52,6 +52,7 @@ int test__switch_tracking(void);
>  int test__fdarray__filter(void);
>  int test__fdarray__add(void);
>  int test__thread_comm(void);
> +int test__thread_lookup_time(void);
>  
>  #if defined(__x86_64__) || defined(__i386__) || defined(__arm__)
>  #ifdef HAVE_DWARF_UNWIND_SUPPORT
> diff --git a/tools/perf/tests/thread-lookup-time.c 
> b/tools/perf/tests/thread-lookup-time.c
> new file mode 100644
> index 000000000000..6237ecf8caae
> --- /dev/null
> +++ b/tools/perf/tests/thread-lookup-time.c
> @@ -0,0 +1,174 @@
> +#include "tests.h"
> +#include "machine.h"
> +#include "thread.h"
> +#include "map.h"
> +#include "debug.h"
> +
> +static int thread__print_cb(struct thread *th, void *arg __maybe_unused)
> +{
> +     printf("thread: %d, start time: %"PRIu64" %s\n",
> +            th->tid, th->start_time, th->dead ? "(dead)" : "");
> +     return 0;
> +}
> +
> +static int lookup_with_timestamp(struct machine *machine)
> +{
> +     struct thread *t1, *t2, *t3;
> +     union perf_event fork = {
> +             .fork = {
> +                     .pid = 0,
> +                     .tid = 0,
> +                     .ppid = 1,
> +                     .ptid = 1,
> +             },

I've got following output from the test:

test child forked, pid 18483
========= after t1 created ==========
thread: 0, start time: 0 
========= after t1 set comm ==========
thread: 0, start time: 20000 
========= after t2 forked ==========
thread: 0, start time: 50000 
thread: 1, start time: 0 
thread: 0, start time: 10000 
thread: 0, start time: 20000 (dead)
========= after t3 forked ==========
thread: 0, start time: 60000 
thread: 1, start time: 0 
thread: 0, start time: 10000 
thread: 0, start time: 50000 (dead)
thread: 0, start time: 20000 (dead)
test child finished with 0

'after t2 forked' data shows 'thread 0 with time 50000' and
newly added parent 'thread: 1, start time: 0'

this makes me wonder if you wanted switch 0 and 1 for pid and ppid
in above sample init and follow with forked pid 1 ... but not sure
because you're using the same sample for fork 3 ;-)

my question is if that was intentional, because I've got
confused in here

> +     };
> +     struct perf_sample sample = {
> +             .time = 50000,
> +     };
> +
> +     /* start_time is set to 0 */
> +     t1 = machine__findnew_thread(machine, 0, 0);
> +
> +     if (verbose > 1) {
> +             printf("========= after t1 created ==========\n");
> +             machine__for_each_thread(machine, thread__print_cb, NULL);
> +     }
> +
> +     TEST_ASSERT_VAL("wrong start time of old thread", t1->start_time == 0);
> +
> +     TEST_ASSERT_VAL("cannot find current thread",
> +                     machine__find_thread(machine, 0, 0) == t1);
> +
> +     TEST_ASSERT_VAL("cannot find current thread with time",
> +                     machine__findnew_thread_time(machine, 0, 0, 10000) == 
> t1);
> +
> +     /* start_time is overwritten to new value */
> +     thread__set_comm(t1, "/usr/bin/perf", 20000);
> +
> +     if (verbose > 1) {
> +             printf("========= after t1 set comm ==========\n");
> +             machine__for_each_thread(machine, thread__print_cb, NULL);
> +     }
> +
> +     TEST_ASSERT_VAL("failed to update start time", t1->start_time == 20000);
> +
> +     TEST_ASSERT_VAL("should not find passed thread",
> +                     /* this will create yet another dead thread */
> +                     machine__findnew_thread_time(machine, 0, 0, 10000) != 
> t1);

also this comment say that calling machine__findnew_thread_time will
create another dead thread, which actually did not happened based on
above test output

thanks,
jirka
--
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