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