ILLIXR: Illinois Extended Reality Testbed
|
Coalesces logs of the same type to be written back as a single-transaction. More...
#include <record_logger.hpp>
Public Member Functions | |
record_coalescer (std::shared_ptr< record_logger > logger_) | |
void | log (const record &r) |
Appends a log to the buffer, which will eventually be written. | |
void | maybe_flush () |
Use internal decision process, and possibly trigger flush. | |
void | flush () |
Flush buffer of logs to the underlying logger. | |
operator bool () const | |
Coalesces logs of the same type to be written back as a single-transaction.
Records should all be of the same type. TODO: remove this constraint. Use log<record_type>(Args... args)
and std::forward
.
In some backend-implementations, logging many logs of the same type is more efficient than logging them individually; However, the client often wants to produce one log-record at a time. This class resolves this mismatch by buffering logs from the client. Every time a new log is added, an internal decision process determines whether or not to flush the buffer, or keep accumulating and wait unitl later.
Currently this internal decision process is "is the oldest log in the buffer more than 1 second old?". I chose this because this frequency should have very little overhead, even if every component is also coalescing at 1 per second.
At destructor time, any remaining logs are flushed.
Use like: