Add trace points (RPC and signal)

This commit is contained in:
Josef Söntgen 2013-08-13 16:15:52 +02:00 committed by Norman Feske
parent 17eb342156
commit a4066c358e
6 changed files with 47 additions and 22 deletions

View File

@ -46,6 +46,8 @@
static void serve(SERVER &server, Server_args &args, RET &ret) { \
::Genode::Meta::call_member<RET, SERVER, Server_args> \
(ret, server, args, &SERVER::func_name); } \
\
static const char* name() { return #func_name; } \
};
/**

View File

@ -15,6 +15,7 @@
#define _INCLUDE__BASE__RPC_CLIENT_H_
#include <base/ipc.h>
#include <base/trace/events.h>
namespace Genode {
@ -120,9 +121,17 @@ namespace Genode {
ipc_client << opcode;
_marshal_args(ipc_client, args);
{
Trace::Rpc_call trace_event(IF::name(), call_buf);
}
/* perform RPC, unmarshal return value */
ipc_client << IPC_CALL >> ret;
{
Trace::Rpc_returned trace_event(IF::name(), reply_buf);
}
/* unmarshal RPC output arguments */
_unmarshal_results(ipc_client, args);

View File

@ -20,6 +20,7 @@
#include <base/object_pool.h>
#include <base/lock.h>
#include <base/printf.h>
#include <base/trace/events.h>
#include <cap_session/cap_session.h>
namespace Genode {
@ -123,6 +124,10 @@ namespace Genode {
/* read arguments from istream */
_read_args(is, args.data());
{
Trace::Rpc_dispatch trace_event(This_rpc_function::name());
}
/*
* Dispatch call to matching RPC base class, using
* 'This_rpc_function' and the list of its exceptions to
@ -135,6 +140,10 @@ namespace Genode {
exc = _do_serve(args.data(), ret, Overload_selector<This_rpc_function, Exceptions>());
os << ret;
{
Trace::Rpc_reply trace_event(This_rpc_function::name());
}
/* write results to ostream 'os' */
_write_results(os, args.data());

View File

@ -29,7 +29,7 @@ namespace Genode { namespace Trace {
struct Genode::Trace::Rpc_call
{
char const *rpc_name;
char const *rpc_name;
Msgbuf_base const &msg;
Rpc_call(char const *rpc_name, Msgbuf_base const &msg)
@ -45,7 +45,7 @@ struct Genode::Trace::Rpc_call
struct Genode::Trace::Rpc_returned
{
char const *rpc_name;
char const *rpc_name;
Msgbuf_base const &msg;
Rpc_returned(char const *rpc_name, Msgbuf_base const &msg)
@ -61,39 +61,33 @@ struct Genode::Trace::Rpc_returned
struct Genode::Trace::Rpc_dispatch
{
char const *rpc_name;
Rpc_object_base const &obj;
Msgbuf_base const &msg;
char const *rpc_name;
Rpc_dispatch(char const *rpc_name, Rpc_object_base const &obj,
Msgbuf_base const &msg)
Rpc_dispatch(char const *rpc_name)
:
rpc_name(rpc_name), obj(obj), msg(msg)
rpc_name(rpc_name)
{
Thread_base::trace(this);
}
size_t generate(Policy_module &policy, char *dst) const {
return policy.rpc_dispatch(dst, rpc_name, obj, msg); }
return policy.rpc_dispatch(dst, rpc_name); }
};
struct Genode::Trace::Rpc_reply
{
char const *rpc_name;
Rpc_object_base const &obj;
Msgbuf_base const &msg;
char const *rpc_name;
Rpc_reply(char const *rpc_name, Rpc_object_base const &obj,
Msgbuf_base const &msg)
Rpc_reply(char const *rpc_name)
:
rpc_name(rpc_name), obj(obj), msg(msg)
rpc_name(rpc_name)
{
Thread_base::trace(this);
}
size_t generate(Policy_module &policy, char *dst) const {
return policy.rpc_reply(dst, rpc_name, obj, msg); }
return policy.rpc_reply(dst, rpc_name); }
};
@ -111,13 +105,18 @@ struct Genode::Trace::Signal_submit
struct Genode::Trace::Signal_received
{
Signal const &signal;;
Signal_context const &signal_context;
unsigned const num;
Signal_received(Signal const &signal) : signal(signal)
{ Thread_base::trace(this); }
Signal_received(Signal_context const &signal_context, unsigned num)
:
signal_context(signal_context), num(num)
{
Thread_base::trace(this);
}
size_t generate(Policy_module &policy, char *dst) const {
return policy.signal_received(dst, signal); }
return policy.signal_received(dst, signal_context, num); }
};

View File

@ -19,7 +19,7 @@
namespace Genode {
class Msgbuf_base;
class Signal;
class Signal_context;
class Rpc_object_base;
namespace Trace { class Policy_module; }
@ -37,7 +37,7 @@ struct Genode::Trace::Policy_module
size_t (*rpc_dispatch) (char *, char const *);
size_t (*rpc_reply) (char *, char const *);
size_t (*signal_submit) (char *, unsigned const);
size_t (*signal_received) (char *, Signal const &);
size_t (*signal_received) (char *, Signal_context const &, unsigned const);
};
#endif /* _INCLUDE__BASE__TRACE__POLICY_H_ */

View File

@ -13,6 +13,7 @@
#include <base/signal.h>
#include <base/thread.h>
#include <base/trace/events.h>
#include <signal_session/connection.h>
using namespace Genode;
@ -204,6 +205,9 @@ Signal::Signal(Signal::Data data) : _data(data)
void Signal_transmitter::submit(unsigned cnt)
{
{
Trace::Signal_submit trace_event(cnt);
}
signal_connection()->submit(_context, cnt);
}
@ -335,6 +339,8 @@ Signal Signal_receiver::wait_for_signal()
if (result.num == 0)
PWRN("returning signal with num == 0");
Trace::Signal_received trace_event(*context, result.num);
/* return last received signal */
return result;
}