From: "Vladislav Valtchev (VMware)" <vladislav.valtchev@gmail.com>
To: rostedt@goodmis.org
Cc: linux-kernel@vger.kernel.org, y.karadz@gmail.com,
"Vladislav Valtchev (VMware)" <vladislav.valtchev@gmail.com>
Subject: [PATCH v2 10/10] trace-cmd: Fork record_trace() for the extract case
Date: Thu, 30 Nov 2017 15:19:57 +0200 [thread overview]
Message-ID: <20171130131957.21617-11-vladislav.valtchev@gmail.com> (raw)
In-Reply-To: <20171130131957.21617-1-vladislav.valtchev@gmail.com>
This patch inlines record_trace() into trace_extract() by removing the code not
related to extract, by replacing IS_EXTRACT(ctx) with true and then removing the
dead code, as well as the if statements when their condition always evalutates
to true. The opposite change [IS_EXTRACT(ctx) evaluated as false] has been
applyed to record_trace().
The purpose of doing that is to reduce the amount of branches in both the cases
(extract and everything else), making the code simpler to understand and follow
but at the price of having some copy-pasted code.
Signed-off-by: Vladislav Valtchev (VMware) <vladislav.valtchev@gmail.com>
---
trace-record.c | 172 ++++++++++++++++++++++++++++++++++-----------------------
1 file changed, 102 insertions(+), 70 deletions(-)
diff --git a/trace-record.c b/trace-record.c
index 749c205..48426e5 100644
--- a/trace-record.c
+++ b/trace-record.c
@@ -4794,7 +4794,7 @@ static void finalize_record_trace(struct common_record_context *ctx)
/*
* This function contains common code for the following commands:
- * record, start, extract, stream, profile.
+ * record, start, stream, profile.
*/
static void record_trace(int argc, char **argv,
struct common_record_context *ctx)
@@ -4805,15 +4805,13 @@ static void record_trace(int argc, char **argv,
* If top_instance doesn't have any plugins or events, then
* remove it from being processed.
*/
- if (!IS_EXTRACT(ctx) && !__check_doing_something(&top_instance))
+ if (!__check_doing_something(&top_instance))
first_instance = buffer_instances;
else
ctx->topt = 1;
update_first_instance(ctx->instance, ctx->topt);
-
- if (!IS_EXTRACT(ctx))
- check_doing_something();
+ check_doing_something();
check_function_plugin();
if (ctx->output)
@@ -4831,43 +4829,35 @@ static void record_trace(int argc, char **argv,
ctx->instance->tracing_on_init_val = 1;
}
- /* Extracting data records all events in the system. */
- if (IS_EXTRACT(ctx) && !ctx->record_all)
- record_all_events();
-
- if (!IS_EXTRACT(ctx))
- make_instances();
+ make_instances();
if (ctx->events)
expand_event_list();
page_size = getpagesize();
- if (!IS_EXTRACT(ctx)) {
- fset = set_ftrace(!ctx->disable, ctx->total_disable);
- tracecmd_disable_all_tracing(1);
+ fset = set_ftrace(!ctx->disable, ctx->total_disable);
+ tracecmd_disable_all_tracing(1);
+ for_all_instances(ctx->instance)
+ set_clock(ctx->instance);
+
+ /* Record records the date first */
+ if (IS_RECORD(ctx) && ctx->date)
+ ctx->date2ts = get_date_to_ts();
+
+ for_all_instances(ctx->instance) {
+ set_funcs(ctx->instance);
+ set_mask(ctx->instance);
+ }
+
+ if (ctx->events) {
for_all_instances(ctx->instance)
- set_clock(ctx->instance);
-
- /* Record records the date first */
- if (IS_RECORD(ctx) && ctx->date)
- ctx->date2ts = get_date_to_ts();
-
- for_all_instances(ctx->instance) {
- set_funcs(ctx->instance);
- set_mask(ctx->instance);
- }
-
- if (ctx->events) {
- for_all_instances(ctx->instance)
- enable_events(ctx->instance);
- }
- set_buffer_size();
+ enable_events(ctx->instance);
}
+ set_buffer_size();
update_plugins(type);
-
set_options();
if (ctx->max_graph_depth) {
@@ -4882,53 +4872,36 @@ static void record_trace(int argc, char **argv,
signal(SIGINT, finish);
if (!latency)
start_threads(type, ctx->global);
- }
-
- if (IS_EXTRACT(ctx)) {
- flush_threads();
-
} else {
- if (!(type & (TRACE_TYPE_RECORD | TRACE_TYPE_STREAM))) {
- update_task_filter();
- tracecmd_enable_tracing();
- exit(0);
- }
-
- if (ctx->run_command)
- run_cmd(type, (argc - optind) - 1, &argv[optind + 1]);
- else {
- update_task_filter();
- tracecmd_enable_tracing();
- /* We don't ptrace ourself */
- if (do_ptrace && filter_pid >= 0)
- ptrace_attach(filter_pid);
- /* sleep till we are woken with Ctrl^C */
- printf("Hit Ctrl^C to stop recording\n");
- while (!finished)
- trace_or_sleep(type);
- }
+ update_task_filter();
+ tracecmd_enable_tracing();
+ exit(0);
+ }
- tracecmd_disable_tracing();
- if (!latency)
- stop_threads(type);
+ if (ctx->run_command)
+ run_cmd(type, (argc - optind) - 1, &argv[optind + 1]);
+ else {
+ update_task_filter();
+ tracecmd_enable_tracing();
+ /* We don't ptrace ourself */
+ if (do_ptrace && filter_pid >= 0)
+ ptrace_attach(filter_pid);
+ /* sleep till we are woken with Ctrl^C */
+ printf("Hit Ctrl^C to stop recording\n");
+ while (!finished)
+ trace_or_sleep(type);
}
+ tracecmd_disable_tracing();
+ if (!latency)
+ stop_threads(type);
+
record_stats();
if (!keep)
tracecmd_disable_all_tracing(0);
- /* extract records the date after extraction */
- if (IS_EXTRACT(ctx) && ctx->date) {
- /*
- * We need to start tracing, don't let other traces
- * screw with our trace_marker.
- */
- tracecmd_disable_all_tracing(1);
- ctx->date2ts = get_date_to_ts();
- }
-
- if (IS_RECORD(ctx) || IS_EXTRACT(ctx)) {
+ if (IS_RECORD(ctx)) {
record_data(ctx->date2ts, ctx->data_flags);
delete_thread_data();
} else
@@ -4950,9 +4923,68 @@ void trace_start(int argc, char **argv)
void trace_extract(int argc, char **argv)
{
struct common_record_context ctx;
+ enum trace_type type;
parse_record_options(argc, argv, CMD_extract, &ctx);
- record_trace(argc, argv, &ctx);
+
+ type = get_trace_cmd_type(ctx.curr_cmd);
+
+ update_first_instance(ctx.instance, 1);
+ check_function_plugin();
+
+ if (ctx.output)
+ output_file = ctx.output;
+
+ /* Save the state of tracing_on before starting */
+ for_all_instances(ctx.instance) {
+
+ if (!ctx.manual && ctx.instance->profile)
+ enable_profile(ctx.instance);
+
+ ctx.instance->tracing_on_init_val = read_tracing_on(ctx.instance);
+ /* Some instances may not be created yet */
+ if (ctx.instance->tracing_on_init_val < 0)
+ ctx.instance->tracing_on_init_val = 1;
+ }
+
+ /* Extracting data records all events in the system. */
+ if (!ctx.record_all)
+ record_all_events();
+
+ if (ctx.events)
+ expand_event_list();
+
+ page_size = getpagesize();
+ update_plugins(type);
+ set_options();
+
+ if (ctx.max_graph_depth) {
+ for_all_instances(ctx.instance)
+ set_max_graph_depth(ctx.instance, ctx.max_graph_depth);
+ free(ctx.max_graph_depth);
+ }
+
+ allocate_seq();
+ flush_threads();
+ record_stats();
+
+ if (!keep)
+ tracecmd_disable_all_tracing(0);
+
+ /* extract records the date after extraction */
+ if (ctx.date) {
+ /*
+ * We need to start tracing, don't let other traces
+ * screw with our trace_marker.
+ */
+ tracecmd_disable_all_tracing(1);
+ ctx.date2ts = get_date_to_ts();
+ }
+
+ record_data(ctx.date2ts, ctx.data_flags);
+ delete_thread_data();
+ destroy_stats();
+ finalize_record_trace(&ctx);
exit(0);
}
--
2.14.1
next prev parent reply other threads:[~2017-11-30 13:21 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-30 13:19 [PATCH v2 00/10] trace-cmd: Refactoring trace_record() Vladislav Valtchev (VMware)
2017-11-30 13:19 ` [PATCH v2 01/10] trace-cmd: Extract parse_record_options() from trace_record() Vladislav Valtchev (VMware)
2017-11-30 13:19 ` [PATCH v2 02/10] trace-cmd: Replacing cmd flags w/ a trace_cmd enum Vladislav Valtchev (VMware)
2017-11-30 13:19 ` [PATCH v2 03/10] trace-cmd: Extracting record_trace() Vladislav Valtchev (VMware)
2017-11-30 13:19 ` [PATCH v2 04/10] trace-cmd: Rename trace_profile() to do_trace_profile() Vladislav Valtchev (VMware)
2017-11-30 13:19 ` [PATCH v2 05/10] trace-cmd: Making start,extract,stream,profile separate funcs Vladislav Valtchev (VMware)
2017-11-30 13:19 ` [PATCH v2 06/10] trace-cmd: Extr. profile-specific code from record_trace Vladislav Valtchev (VMware)
2017-11-30 17:05 ` Steven Rostedt
2017-12-01 11:10 ` Vladislav Valtchev
2017-11-30 13:19 ` [PATCH v2 07/10] trace-cmd: Mov init_common_record_context in parse_record_options Vladislav Valtchev (VMware)
2017-11-30 17:07 ` Steven Rostedt
2017-12-01 11:20 ` Vladislav Valtchev
2017-11-30 13:19 ` [PATCH v2 08/10] trace-cmd: Introducing get_trace_cmd_type() Vladislav Valtchev (VMware)
2017-11-30 13:19 ` [PATCH v2 09/10] trace-cmd: Extract finalize_record_trace() Vladislav Valtchev (VMware)
2017-11-30 13:19 ` Vladislav Valtchev (VMware) [this message]
2017-11-30 21:37 ` [PATCH v2 00/10] trace-cmd: Refactoring trace_record() Steven Rostedt
2017-12-01 10:46 ` Vladislav Valtchev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171130131957.21617-11-vladislav.valtchev@gmail.com \
--to=vladislav.valtchev@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=y.karadz@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®