reporter: support reporting data buffers

Issue #1557
This commit is contained in:
Christian Helmuth 2015-06-09 13:14:57 +02:00
parent cec2dd3b3f
commit 178f2c0e88

View File

@ -48,6 +48,16 @@ class Genode::Reporter : Noncopyable
Lazy_volatile_object<Connection> _conn; Lazy_volatile_object<Connection> _conn;
/**
* Return size of report buffer
*/
size_t _size() const { return _enabled ? _conn->ds.size() : 0; }
/**
* Return pointer to report buffer
*/
char *_base() { return _enabled ? _conn->ds.local_addr<char>() : 0; }
public: public:
Reporter(char const *report_name, size_t buffer_size = 4096) Reporter(char const *report_name, size_t buffer_size = 4096)
@ -73,14 +83,21 @@ class Genode::Reporter : Noncopyable
Name name() const { return _name; } Name name() const { return _name; }
/** /**
* Return size of report buffer * Report data buffer
*
* \param data data buffer
* \param length number of bytes to report
*/ */
size_t size() const { return _enabled ? _conn->ds.size() : 0; } void report(void const *data, size_t length)
{
void *base = _base();
/** if (!base || length > _size())
* Return pointer to report buffer return;
*/
char *base() { return _enabled ? _conn->ds.local_addr<char>() : 0; } memcpy(base, data, length);
_conn->report.submit(length);
}
/** /**
* XML generator targeting a reporter * XML generator targeting a reporter
@ -90,8 +107,8 @@ class Genode::Reporter : Noncopyable
template <typename FUNC> template <typename FUNC>
Xml_generator(Reporter &reporter, FUNC const &func) Xml_generator(Reporter &reporter, FUNC const &func)
: :
Genode::Xml_generator(reporter.base(), Genode::Xml_generator(reporter._base(),
reporter.size(), reporter._size(),
reporter._name.string(), reporter._name.string(),
func) func)
{ {