summaryrefslogtreecommitdiffstats
path: root/cpukit/sapi/src/profilingreportxml.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/sapi/src/profilingreportxml.c')
-rw-r--r--cpukit/sapi/src/profilingreportxml.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/cpukit/sapi/src/profilingreportxml.c b/cpukit/sapi/src/profilingreportxml.c
index d3fe7f7652..409fe3d7eb 100644
--- a/cpukit/sapi/src/profilingreportxml.c
+++ b/cpukit/sapi/src/profilingreportxml.c
@@ -20,6 +20,8 @@
#ifdef RTEMS_PROFILING
+#include <inttypes.h>
+
typedef struct {
rtems_profiling_printf printf_func;
void *printf_arg;
@@ -47,9 +49,96 @@ static void indent(context *ctx, uint32_t indentation_level)
}
}
+static void report_per_cpu(context *ctx, const rtems_profiling_per_cpu *per_cpu)
+{
+ rtems_profiling_printf printf_func = ctx->printf_func;
+ void *printf_arg = ctx->printf_arg;
+ int rv;
+
+ indent(ctx, 1);
+ rv = (*printf_func)(
+ printf_arg,
+ "<PerCPUProfilingReport processorIndex=\"%" PRIu32 "\">\n",
+ per_cpu->processor_index
+ );
+ update_retval(ctx, rv);
+
+ indent(ctx, 2);
+ rv = (*printf_func)(
+ printf_arg,
+ "<MaxThreadDispatchDisabledTime unit=\"ns\">%" PRIu32
+ "</MaxThreadDispatchDisabledTime>\n",
+ per_cpu->max_thread_dispatch_disabled_time
+ );
+ update_retval(ctx, rv);
+
+ indent(ctx, 2);
+ rv = (*printf_func)(
+ printf_arg,
+ "<ThreadDispatchDisabledCount>%" PRIu64 "</ThreadDispatchDisabledCount>\n",
+ per_cpu->thread_dispatch_disabled_count
+ );
+ update_retval(ctx, rv);
+
+ indent(ctx, 2);
+ rv = (*printf_func)(
+ printf_arg,
+ "<TotalThreadDispatchDisabledTime unit=\"ns\">%" PRIu64
+ "</TotalThreadDispatchDisabledTime>\n",
+ per_cpu->total_thread_dispatch_disabled_time
+ );
+ update_retval(ctx, rv);
+
+ indent(ctx, 2);
+ rv = (*printf_func)(
+ printf_arg,
+ "<MaxInterruptTime unit=\"ns\">%" PRIu32
+ "</MaxInterruptTime>\n",
+ per_cpu->max_interrupt_time
+ );
+ update_retval(ctx, rv);
+
+ indent(ctx, 2);
+ rv = (*printf_func)(
+ printf_arg,
+ "<MaxInterruptDelay unit=\"ns\">%" PRIu32 "</MaxInterruptDelay>\n",
+ per_cpu->max_interrupt_delay
+ );
+ update_retval(ctx, rv);
+
+ indent(ctx, 2);
+ rv = (*printf_func)(
+ printf_arg,
+ "<InterruptCount>%" PRIu64 "</InterruptCount>\n",
+ per_cpu->interrupt_count
+ );
+ update_retval(ctx, rv);
+
+ indent(ctx, 2);
+ rv = (*printf_func)(
+ printf_arg,
+ "<TotalInterruptTime unit=\"ns\">%" PRIu64 "</TotalInterruptTime>\n",
+ per_cpu->total_interrupt_time
+ );
+ update_retval(ctx, rv);
+
+ indent(ctx, 1);
+ rv = (*printf_func)(
+ printf_arg,
+ "</PerCPUProfilingReport>\n"
+ );
+ update_retval(ctx, rv);
+}
+
static void report(void *arg, const rtems_profiling_data *data)
{
context *ctx = arg;
+
+ switch (data->header.type) {
+ case RTEMS_PROFILING_PER_CPU:
+ report_per_cpu(ctx, &data->per_cpu);
+ break;
+ }
}
#endif /* RTEMS_PROFILING */