mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-08 11:55:24 +00:00
parent
e6c5e5e8b9
commit
8e252f79f8
@ -15,6 +15,7 @@
|
||||
#define _INCLUDE__BASE__LOG_H_
|
||||
|
||||
#include <base/output.h>
|
||||
#include <base/buffered_output.h>
|
||||
#include <base/mutex.h>
|
||||
#include <trace/timestamp.h>
|
||||
|
||||
@ -107,23 +108,29 @@ class Genode::Trace_output
|
||||
{
|
||||
private:
|
||||
|
||||
Mutex _mutex { };
|
||||
struct Write_trace_fn
|
||||
{
|
||||
void operator () (char const *);
|
||||
};
|
||||
|
||||
Output &_output;
|
||||
|
||||
void _acquire();
|
||||
void _release();
|
||||
/* cannot include log_session.h here because of recursion */
|
||||
enum { LOG_SESSION_MAX_STRING_LEN = 232 };
|
||||
typedef Buffered_output<LOG_SESSION_MAX_STRING_LEN,
|
||||
Write_trace_fn>
|
||||
Buffered_trace_output;
|
||||
|
||||
public:
|
||||
|
||||
Trace_output(Output &output) : _output(output) { }
|
||||
Trace_output() { }
|
||||
|
||||
template <typename... ARGS>
|
||||
void output(ARGS &&... args)
|
||||
{
|
||||
_acquire();
|
||||
Output::out_args(_output, args...);
|
||||
_release();
|
||||
Buffered_trace_output buffered_trace_output
|
||||
{ Write_trace_fn() };
|
||||
|
||||
Output::out_args(buffered_trace_output, args...);
|
||||
buffered_trace_output.out_string("\n");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -73,8 +73,7 @@ _ZN6Genode11Sliced_heapD2Ev T
|
||||
_ZN6Genode12Address_infoC1Em T
|
||||
_ZN6Genode12Address_infoC2Em T
|
||||
_ZN6Genode12Trace_output12trace_outputEv T
|
||||
_ZN6Genode12Trace_output8_acquireEv T
|
||||
_ZN6Genode12Trace_output8_releaseEv T
|
||||
_ZN6Genode12Trace_output14Write_trace_fnclEPKc T
|
||||
_ZN6Genode13Avl_node_base15_rotate_subtreeEPS0_bRNS0_6PolicyE T
|
||||
_ZN6Genode13Avl_node_base18_rebalance_subtreeEPS0_RNS0_6PolicyE T
|
||||
_ZN6Genode13Avl_node_base6_adoptEPS0_bRNS0_6PolicyE T
|
||||
|
@ -114,14 +114,6 @@ void Genode::init_log(Parent &parent)
|
||||
log_ptr = unmanaged_singleton<Log>(*buffered_log_output);
|
||||
|
||||
/* enable trace back end */
|
||||
struct Write_trace_fn { void operator () (char const *s) { Thread::trace(s); } };
|
||||
|
||||
typedef Buffered_output<Log_session::MAX_STRING_LEN, Write_trace_fn>
|
||||
Buffered_trace_output;
|
||||
|
||||
static Buffered_trace_output *buffered_trace_output =
|
||||
unmanaged_singleton<Buffered_trace_output>(Write_trace_fn());
|
||||
|
||||
trace_ptr = unmanaged_singleton<Trace_output>(*buffered_trace_output);
|
||||
trace_ptr = unmanaged_singleton<Trace_output>();
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/log.h>
|
||||
#include <base/thread.h>
|
||||
|
||||
using namespace Genode;
|
||||
|
||||
@ -61,18 +62,7 @@ void Raw::_release()
|
||||
}
|
||||
|
||||
|
||||
void Trace_output::_acquire()
|
||||
void Trace_output::Write_trace_fn::operator () (char const *s)
|
||||
{
|
||||
_mutex.acquire();
|
||||
}
|
||||
|
||||
|
||||
void Trace_output::_release()
|
||||
{
|
||||
/*
|
||||
* Add newline
|
||||
*/
|
||||
_output.out_string("\n");
|
||||
|
||||
_mutex.release();
|
||||
Thread::trace(s);
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ namespace Terminal {
|
||||
class Session_component;
|
||||
class Root_component;
|
||||
class Main;
|
||||
class Buffered_output;
|
||||
|
||||
using namespace Genode;
|
||||
};
|
||||
@ -32,7 +33,7 @@ namespace Terminal {
|
||||
/**
|
||||
* Utility for the buffered output of small successive write operations
|
||||
*/
|
||||
class Buffered_output
|
||||
class Terminal::Buffered_output
|
||||
{
|
||||
private:
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user