trace: method for getting buffer-wrap count
This commit is contained in:
parent
20883c52b5
commit
8b69d91c05
|
@ -30,6 +30,7 @@ class Genode::Trace::Buffer
|
||||||
|
|
||||||
unsigned volatile _head_offset; /* in bytes, relative to 'entries' */
|
unsigned volatile _head_offset; /* in bytes, relative to 'entries' */
|
||||||
unsigned volatile _size; /* in bytes */
|
unsigned volatile _size; /* in bytes */
|
||||||
|
unsigned volatile _wrapped; /* count of buffer wraps */
|
||||||
|
|
||||||
struct _Entry
|
struct _Entry
|
||||||
{
|
{
|
||||||
|
@ -41,6 +42,12 @@ class Genode::Trace::Buffer
|
||||||
|
|
||||||
_Entry *_head_entry() { return (_Entry *)((addr_t)_entries + _head_offset); }
|
_Entry *_head_entry() { return (_Entry *)((addr_t)_entries + _head_offset); }
|
||||||
|
|
||||||
|
void _buffer_wrapped()
|
||||||
|
{
|
||||||
|
_head_offset = 0;
|
||||||
|
_wrapped++;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The 'entries' member marks the beginning of the trace buffer
|
* The 'entries' member marks the beginning of the trace buffer
|
||||||
* entries. No other member variables must follow.
|
* entries. No other member variables must follow.
|
||||||
|
@ -60,6 +67,8 @@ class Genode::Trace::Buffer
|
||||||
size_t const header_size = (addr_t)&_entries - (addr_t)this;
|
size_t const header_size = (addr_t)&_entries - (addr_t)this;
|
||||||
|
|
||||||
_size = size - header_size;
|
_size = size - header_size;
|
||||||
|
|
||||||
|
_wrapped = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *reserve(size_t len)
|
char *reserve(size_t len)
|
||||||
|
@ -71,7 +80,7 @@ class Genode::Trace::Buffer
|
||||||
if (_head_offset + sizeof(_Entry) <= _size)
|
if (_head_offset + sizeof(_Entry) <= _size)
|
||||||
_head_entry()->len = 0;
|
_head_entry()->len = 0;
|
||||||
|
|
||||||
_head_offset = 0;
|
_buffer_wrapped();
|
||||||
|
|
||||||
return _head_entry()->data;
|
return _head_entry()->data;
|
||||||
}
|
}
|
||||||
|
@ -87,9 +96,11 @@ class Genode::Trace::Buffer
|
||||||
/* advance head offset, wrap when reaching buffer boundary */
|
/* advance head offset, wrap when reaching buffer boundary */
|
||||||
_head_offset += sizeof(_Entry) + len;
|
_head_offset += sizeof(_Entry) + len;
|
||||||
if (_head_offset == _size)
|
if (_head_offset == _size)
|
||||||
_head_offset = 0;
|
_buffer_wrapped();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned wrapped() const { return _wrapped; }
|
||||||
|
|
||||||
|
|
||||||
/********************************************
|
/********************************************
|
||||||
** Functions called from the TRACE client **
|
** Functions called from the TRACE client **
|
||||||
|
|
Loading…
Reference in New Issue
Block a user