diff --git a/repos/os/src/test/trace/main.cc b/repos/os/src/test/trace/main.cc index fd824b68f2..9ea793f8f4 100644 --- a/repos/os/src/test/trace/main.cc +++ b/repos/os/src/test/trace/main.cc @@ -20,6 +20,7 @@ #include #include #include +#include using namespace Genode; @@ -68,8 +69,8 @@ class Trace_buffer_monitor char _buf[MAX_ENTRY_BUF]; Region_map &_rm; Trace::Subject_id _id; - Trace::Buffer *_buffer; - Trace::Buffer::Entry _curr_entry; + Trace::Buffer *_buffer_raw; + Trace_buffer _buffer; const char *_terminate_entry(Trace::Buffer::Entry const &entry) { @@ -85,37 +86,30 @@ class Trace_buffer_monitor Trace::Subject_id id, Dataspace_capability ds_cap) : - _rm(rm), _id(id), _buffer(rm.attach(ds_cap)), - _curr_entry(_buffer->first()) + _rm(rm), _id(id), _buffer_raw(rm.attach(ds_cap)), + _buffer(*_buffer_raw) { log("monitor " "subject:", _id.id, " " - "buffer:", Hex((addr_t)_buffer)); + "buffer:", Hex((addr_t)_buffer_raw)); } ~Trace_buffer_monitor() { - if (_buffer) { _rm.detach(_buffer); } + if (_buffer_raw) { _rm.detach(_buffer_raw); } } Trace::Subject_id id() { return _id; }; void dump() { - log("overflows: ", _buffer->wrapped()); log("read all remaining events"); - - for (; !_curr_entry.head(); _curr_entry = _buffer->next(_curr_entry)) { - if (_curr_entry.last()) - _curr_entry = _buffer->first(); - - /* omit empty entries */ - if (_curr_entry.empty()) - continue; - - char const * const data = _terminate_entry(_curr_entry); + _buffer.for_each_new_entry([&] (Trace::Buffer::Entry &entry) { + char const * const data = _terminate_entry(entry); if (data) { log(data); } - } + + return true; + }); } };