summaryrefslogtreecommitdiffstats
path: root/cpukit/libmisc/capture/capture-cli.c
diff options
context:
space:
mode:
authorJennifer Averett <jennifer.averett@oarcorp.com>2014-11-06 08:26:38 -0600
committerJennifer Averett <jennifer.averett@oarcorp.com>2014-11-24 14:04:53 -0600
commit04a13bdf74dec998626d6e4e8f96d57b95d47aa2 (patch)
treed1c8d32007f54e02cfc48d988168164e11f1027c /cpukit/libmisc/capture/capture-cli.c
parentcapture: Move logging of task record to occur after filter check. (diff)
downloadrtems-04a13bdf74dec998626d6e4e8f96d57b95d47aa2.tar.bz2
capture: Move print methods out of cli for reuse.
Methods to print the data were moved from capture-cli into a support area and are no longer static so that they can be shared by test routines, or application code that wants to use the capture engine without the shell interface.
Diffstat (limited to 'cpukit/libmisc/capture/capture-cli.c')
-rw-r--r--cpukit/libmisc/capture/capture-cli.c215
1 files changed, 5 insertions, 210 deletions
diff --git a/cpukit/libmisc/capture/capture-cli.c b/cpukit/libmisc/capture/capture-cli.c
index ad53ccc3cc..d790b850cf 100644
--- a/cpukit/libmisc/capture/capture-cli.c
+++ b/cpukit/libmisc/capture/capture-cli.c
@@ -5,7 +5,7 @@
All rights reserved Objective Design Systems Pty Ltd, 2002
Chris Johns (ccj@acm.org)
- COPYRIGHT (c) 1989-1998.
+ COPYRIGHT (c) 1989-2014.
On-Line Applications Research Corporation (OAR).
The license and distribution terms for this file may be
@@ -34,6 +34,7 @@
#include <rtems.h>
#include <rtems/capture-cli.h>
+#include <rtems/captureimpl.h>
#include <rtems/monitor.h>
#include <rtems/cpuuse.h>
#
@@ -209,31 +210,6 @@ rtems_capture_cli_disable (int argc RC_UNUSED,
fprintf (stdout, "capture engine disabled.\n");
}
-/*
- * rtems_catpure_cli_print_uptime
- *
- * DESCRIPTION:
- *
- * This function prints the nanosecond uptime to stdout.
- */
-static void
-rtems_capture_cli_print_timestamp (uint64_t uptime)
-{
- uint32_t hours;
- uint32_t minutes;
- uint32_t seconds;
- uint32_t nanosecs;
-
- seconds = uptime / 1000000000LLU;
- minutes = seconds / 60;
- hours = minutes / 60;
- minutes = minutes % 60;
- seconds = seconds % 60;
- nanosecs = uptime % 1000000000;
-
- fprintf (stdout, "%5lu:%02lu:%02lu.%09lu", hours, minutes, seconds, nanosecs);
-}
-
static void
rtems_capture_cli_print_task (rtems_tcb *tcb)
{
@@ -273,47 +249,6 @@ rtems_capture_cli_print_task (rtems_tcb *tcb)
}
fprintf (stdout, "\n");
}
-static void
-rtems_caputure_cli_print_record_std(rtems_capture_record_t* rec, uint64_t diff)
-{
- uint32_t event;
- int e;
-
- event = rec->events >> RTEMS_CAPTURE_EVENT_START;
-
- for (e = RTEMS_CAPTURE_EVENT_START; e < RTEMS_CAPTURE_EVENT_END; e++)
- {
- if (event & 1)
- {
- rtems_capture_cli_print_timestamp (rec->time);
- fprintf (stdout, " %9" PRId64 " ", diff);
- rtems_monitor_dump_id (rec->task_id);
- fprintf(stdout, " %3" PRId32 " %3" PRId32 " %s\n",
- (rec->events >> RTEMS_CAPTURE_REAL_PRIORITY_EVENT) & 0xff,
- (rec->events >> RTEMS_CAPTURE_CURR_PRIORITY_EVENT) & 0xff,
- rtems_capture_event_text (e));
- }
- event >>= 1;
- }
-}
-
-static void
-rtems_caputre_cli_print_record_task(rtems_capture_record_t* rec)
-{
- rtems_capture_task_record_t* task_rec = (rtems_capture_task_record_t*) rec;
-
- rtems_capture_cli_print_timestamp (rec->time);
- fprintf (stdout, " ");
- rtems_monitor_dump_id (rec->task_id);
- fprintf (stdout, " %c%c%c%c",
- (char) (task_rec->name >> 24) & 0xff,
- (char) (task_rec->name >> 16) & 0xff,
- (char) (task_rec->name >> 8) & 0xff,
- (char) (task_rec->name >> 0) & 0xff);
- fprintf (stdout, " %3" PRId32 " %3" PRId32 "\n",
- task_rec->start_priority,
- task_rec->stack_size);
-}
/*
* rtems_capture_cli_count_tasks
@@ -355,7 +290,7 @@ rtems_capture_cli_task_list (int argc RC_UNUSED,
rtems_iterate_over_all_threads (rtems_capture_cli_count_tasks);
fprintf (stdout, "uptime: ");
- rtems_capture_cli_print_timestamp (uptime);
+ rtems_capture_print_timestamp (uptime);
fprintf (stdout, "\ntotal %i\n", rtems_capture_cli_task_count);
rtems_iterate_over_all_threads (rtems_capture_cli_print_task);
}
@@ -375,79 +310,7 @@ rtems_capture_cli_watch_list (int argc RC_UNUSED,
const rtems_monitor_command_arg_t* command_arg RC_UNUSED,
bool verbose RC_UNUSED)
{
- rtems_capture_control_t* control = rtems_capture_get_control_list ();
- rtems_task_priority ceiling = rtems_capture_watch_get_ceiling ();
- rtems_task_priority floor = rtems_capture_watch_get_floor ();
-
- fprintf (stdout, "watch priority ceiling is %" PRId32 "\n", ceiling);
- fprintf (stdout, "watch priority floor is %" PRId32 "\n", floor);
- fprintf (stdout, "global watch is %s\n",
- rtems_capture_watch_global_on () ? "enabled" : "disabled");
- fprintf (stdout, "total %" PRId32 "\n", rtems_capture_control_count ());
-
- while (control)
- {
- uint32_t flags;
- int f;
- int fshowed;
- int lf;
-
- fprintf (stdout, " ");
- rtems_monitor_dump_id (rtems_capture_control_id (control));
- fprintf (stdout, " ");
- rtems_monitor_dump_name (rtems_capture_control_name (control));
- flags = rtems_capture_control_flags (control);
- fprintf (stdout, " %c%c ",
- rtems_capture_watch_global_on () ? 'g' : '-',
- flags & RTEMS_CAPTURE_WATCH ? 'w' : '-');
- flags = rtems_capture_control_to_triggers (control);
- fprintf (stdout, " T:%c%c%c%c%c%c%c",
- flags & RTEMS_CAPTURE_SWITCH ? 'S' : '-',
- flags & RTEMS_CAPTURE_CREATE ? 'C' : '-',
- flags & RTEMS_CAPTURE_START ? 'S' : '-',
- flags & RTEMS_CAPTURE_RESTART ? 'R' : '-',
- flags & RTEMS_CAPTURE_DELETE ? 'D' : '-',
- flags & RTEMS_CAPTURE_BEGIN ? 'B' : '-',
- flags & RTEMS_CAPTURE_EXITTED ? 'E' : '-');
- flags = rtems_capture_control_from_triggers (control);
- fprintf (stdout, " F:%c%c%c%c%c",
- flags & RTEMS_CAPTURE_SWITCH ? 'S' : '-',
- flags & RTEMS_CAPTURE_CREATE ? 'C' : '-',
- flags & RTEMS_CAPTURE_START ? 'S' : '-',
- flags & RTEMS_CAPTURE_RESTART ? 'R' : '-',
- flags & RTEMS_CAPTURE_DELETE ? 'D' : '-');
-
- for (f = 0, fshowed = 0, lf = 1; f < RTEMS_CAPTURE_TRIGGER_TASKS; f++)
- {
- if (rtems_capture_control_by_valid (control, f))
- {
- if (lf && ((fshowed % 3) == 0))
- {
- fprintf (stdout, "\n");
- lf = 0;
- }
-
- fprintf (stdout, " %2i:", f);
- rtems_monitor_dump_name (rtems_capture_control_by_name (control, f));
- fprintf (stdout, "/");
- rtems_monitor_dump_id (rtems_capture_control_by_id (control, f));
- flags = rtems_capture_control_by_triggers (control, f);
- fprintf (stdout, ":%c%c%c%c%c",
- flags & RTEMS_CAPTURE_SWITCH ? 'S' : '-',
- flags & RTEMS_CAPTURE_CREATE ? 'C' : '-',
- flags & RTEMS_CAPTURE_START ? 'S' : '-',
- flags & RTEMS_CAPTURE_RESTART ? 'R' : '-',
- flags & RTEMS_CAPTURE_DELETE ? 'D' : '-');
- fshowed++;
- lf = 1;
- }
- }
-
- if (lf)
- fprintf (stdout, "\n");
-
- control = rtems_capture_next_control (control);
- }
+ rtems_capture_print_watch_list();
}
/*
@@ -1154,16 +1017,9 @@ rtems_capture_cli_trace_records (int argc,
const rtems_monitor_command_arg_t* command_arg RC_UNUSED,
bool verbose RC_UNUSED)
{
- rtems_status_code sc;
bool csv = false;
static int dump_total = 22;
- int total;
- int count;
- uint32_t read;
- rtems_capture_record_t* rec;
- uint8_t* ptr;
int arg;
- rtems_capture_time_t last_t = 0;
for (arg = 1; arg < argc; arg++)
{
@@ -1192,68 +1048,7 @@ rtems_capture_cli_trace_records (int argc,
}
}
- total = dump_total;
-
- while (total)
- {
- sc = rtems_capture_read (0, 0, &read, &rec);
-
- if (sc != RTEMS_SUCCESSFUL)
- {
- fprintf (stdout, "error: trace read failed: %s\n", rtems_status_text (sc));
- rtems_capture_flush (0);
- return;
- }
-
- /*
- * If we have no records then just exist. We still need to release
- * the reader lock.
- */
-
- if (read == 0)
- {
- rtems_capture_release (read);
- break;
- }
-
- count = total < read ? total : read;
- ptr = (uint8_t *) rec;
- while (count--)
- {
- rec = (rtems_capture_record_t*) ptr;
-
- if (csv)
- fprintf (stdout, "%08" PRIu32 ",%03" PRIu32
- ",%03" PRIu32 ",%04" PRIx32 ",%" PRId64 "\n",
- rec->task_id,
- (rec->events >> RTEMS_CAPTURE_REAL_PRIORITY_EVENT) & 0xff,
- (rec->events >> RTEMS_CAPTURE_CURR_PRIORITY_EVENT) & 0xff,
- (rec->events >> RTEMS_CAPTURE_EVENT_START),
- (uint64_t) rec->time);
- else {
- if ((rec->events >> RTEMS_CAPTURE_EVENT_START) == 0)
- rtems_caputre_cli_print_record_task( rec );
- else {
- uint64_t diff = 0;
- if (last_t)
- diff = rec->time - last_t;
- last_t = rec->time;
-
- rtems_caputure_cli_print_record_std( rec, diff );
- }
- }
- ptr += rec->size;
- }
-
- count = total < read ? total : read;
-
- if (count < total)
- total -= count;
- else
- total = 0;
-
- rtems_capture_release (count);
- }
+ rtems_capture_print_trace_records( dump_total, csv );
}
/*