summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
Diffstat (limited to 'cesar')
-rw-r--r--cesar/lib/Config1
-rw-r--r--cesar/lib/src/trace.c10
2 files changed, 9 insertions, 2 deletions
diff --git a/cesar/lib/Config b/cesar/lib/Config
index 5135ab33be..b5b3218333 100644
--- a/cesar/lib/Config
+++ b/cesar/lib/Config
@@ -11,6 +11,7 @@ CONFIG_HEAP_LEFTIST = n
CONFIG_RND_BUFFER_OPTIMISE = n
CONFIG_TRACE = n
CONFIG_TRACE_ALL_SLOW = n
+CONFIG_TRACE_ALL_FAST = n
CONFIG_TRACE_ON_FATAL = n
CONFIG_PERF = n
CONFIG_STATS = y
diff --git a/cesar/lib/src/trace.c b/cesar/lib/src/trace.c
index f9c3fa0e88..ad0d54377a 100644
--- a/cesar/lib/src/trace.c
+++ b/cesar/lib/src/trace.c
@@ -33,6 +33,10 @@
/** Uninitialised trace data. */
#define TRACE_UNINITIALISED 0xffffffff
+#if CONFIG_TRACE_ALL_SLOW && CONFIG_TRACE_ALL_FAST
+# error "traces can not be slow and fast"
+#endif
+
/** Trace system context. */
struct trace_t
{
@@ -249,8 +253,8 @@ trace_buffer_add (trace_buffer_t *buf, const char *name, uint drop_level,
list_init_node (&buf->node);
buf->chunks_nb = preload;
buf->drop_level = drop_level;
- buf->preload = preload;
- buf->locked = locked && !CONFIG_TRACE_ALL_SLOW;
+ buf->preload = preload + (CONFIG_TRACE_ALL_FAST ? 4 : 0);
+ buf->locked = locked && !CONFIG_TRACE_ALL_SLOW || CONFIG_TRACE_ALL_FAST;
buf->bare = NULL;
buf->name = name;
buf->namespace = namespace;
@@ -652,6 +656,8 @@ static void
trace_printn_prepare (trace_buffer_t *buf, uint count)
{
dbg_assert (buf && buf->tail);
+ if (CONFIG_TRACE_ALL_FAST)
+ return;
trace_chunk_t *tail = buf->tail;
if (tail->tail_index + count > TRACE_CHUNK_SIZE)
{