On Thu, 23 Nov 2017 18:33:28 +0200
"Vladislav Valtchev (VMware)" <vladislav.valtc...@gmail.com> wrote:

> In this patch a huge part of trace_record(), dealing with parsing the command
> line options, has been extracted in a separate function. That allows the body
> of trace_record() to be focused only on the proper actions involved in a given
> type of tracing (record, stream, etc.) reducing, this way, the scope and the
> complexity of trace_record().

Hi Vladislav,

I applied patches 1-3.

> 
> Signed-off-by: Vladislav Valtchev (VMware) <vladislav.valtc...@gmail.com>
> ---
> +
> +static void parse_record_options(int argc,
> +                              char **argv,
> +                              struct common_record_context *ctx)
>  {
>       const char *plugin = NULL;
> -     const char *output = NULL;
>       const char *option;
>       struct event_list *event = NULL;
>       struct event_list *last_event = NULL;
> -     struct buffer_instance *instance = &top_instance;
> -     enum trace_type type = 0;
>       char *pids;
>       char *pid;
>       char *sav;
> -     char *date2ts = NULL;
> -     int record_all = 0;
> -     int total_disable = 0;
> -     int disable = 0;
> -     int events = 0;
> -     int record = 0;
> -     int extract = 0;
> -     int stream = 0;
> -     int profile = 0;
> -     int global = 0;
> -     int start = 0;
> -     int filtered = 0;
> -     int run_command = 0;
>       int neg_event = 0;
> -     int date = 0;
> -     int manual = 0;
> -     char *max_graph_depth = NULL;
> -     int topt = 0;
> -     int do_child = 0;
> -     int data_flags = 0;
> -
> -     int c;
> -
> -     init_instance(instance);
> -
> -     cpu_count = count_cpus();
> -
> -     if ((record = (strcmp(argv[1], "record") == 0)))
> -             ; /* do nothing */
> -     else if ((start = strcmp(argv[1], "start") == 0))
> -             ; /* do nothing */
> -     else if ((extract = strcmp(argv[1], "extract") == 0))
> -             ; /* do nothing */
> -     else if ((stream = strcmp(argv[1], "stream") == 0))
> -             ; /* do nothing */
> -     else if ((profile = strcmp(argv[1], "profile") == 0)) {
> -             handle_init = trace_init_profile;
> -             events = 1;
> -     } else
> -             usage(argv);
>  
>       for (;;) {
>               int option_index = 0;
>               int ret;
> +             int c;
>               const char *opts;
>               static struct option long_options[] = {
>                       {"date", no_argument, NULL, OPT_date},
> @@ -4431,7 +4419,7 @@ void trace_record(int argc, char **argv)
> 


+
> +static void init_common_record_context(struct common_record_context *ctx)
> +{
> +     memset(ctx, 0, sizeof(*ctx));
> +     ctx->instance = &top_instance;
> +     cpu_count = count_cpus();
> +}
> +
> +void trace_record(int argc, char **argv)
> +{
> +     struct common_record_context ctx;
> +     enum trace_type type = 0;
> +
> +     init_common_record_context(&ctx);
> +     init_instance(ctx.instance);

Is there a reason that init_instance() isn't called in
init_common_record_context()?

Also, why not just do the "init_common_record_context()" in
parse_record_options()?

-- Steve

> +
> +     if ((ctx.record = (strcmp(argv[1], "record") == 0)))
> +             ; /* do nothing */
> +     else if ((ctx.start = strcmp(argv[1], "start") == 0))
> +             ; /* do nothing */
> +     else if ((ctx.extract = strcmp(argv[1], "extract") == 0))
> +             ; /* do nothing */
> +     else if ((ctx.stream = strcmp(argv[1], "stream") == 0))
> +             ; /* do nothing */
> +     else if ((ctx.profile = strcmp(argv[1], "profile") == 0)) {
> +             handle_init = trace_init_profile;
> +             ctx.events = 1;
> +     } else
> +             usage(argv);
> +
> +
> +     parse_record_options(argc, argv, &ctx);
> +
> +
>       /*
>        * If this is a profile run, and no instances were set,
>        * then enable profiling on the top instance.
>        */

Reply via email to