Add trace points (RPC and signal)
This commit is contained in:
parent
17eb342156
commit
a4066c358e
|
@ -46,6 +46,8 @@
|
||||||
static void serve(SERVER &server, Server_args &args, RET &ret) { \
|
static void serve(SERVER &server, Server_args &args, RET &ret) { \
|
||||||
::Genode::Meta::call_member<RET, SERVER, Server_args> \
|
::Genode::Meta::call_member<RET, SERVER, Server_args> \
|
||||||
(ret, server, args, &SERVER::func_name); } \
|
(ret, server, args, &SERVER::func_name); } \
|
||||||
|
\
|
||||||
|
static const char* name() { return #func_name; } \
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#define _INCLUDE__BASE__RPC_CLIENT_H_
|
#define _INCLUDE__BASE__RPC_CLIENT_H_
|
||||||
|
|
||||||
#include <base/ipc.h>
|
#include <base/ipc.h>
|
||||||
|
#include <base/trace/events.h>
|
||||||
|
|
||||||
namespace Genode {
|
namespace Genode {
|
||||||
|
|
||||||
|
@ -120,9 +121,17 @@ namespace Genode {
|
||||||
ipc_client << opcode;
|
ipc_client << opcode;
|
||||||
_marshal_args(ipc_client, args);
|
_marshal_args(ipc_client, args);
|
||||||
|
|
||||||
|
{
|
||||||
|
Trace::Rpc_call trace_event(IF::name(), call_buf);
|
||||||
|
}
|
||||||
|
|
||||||
/* perform RPC, unmarshal return value */
|
/* perform RPC, unmarshal return value */
|
||||||
ipc_client << IPC_CALL >> ret;
|
ipc_client << IPC_CALL >> ret;
|
||||||
|
|
||||||
|
{
|
||||||
|
Trace::Rpc_returned trace_event(IF::name(), reply_buf);
|
||||||
|
}
|
||||||
|
|
||||||
/* unmarshal RPC output arguments */
|
/* unmarshal RPC output arguments */
|
||||||
_unmarshal_results(ipc_client, args);
|
_unmarshal_results(ipc_client, args);
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <base/object_pool.h>
|
#include <base/object_pool.h>
|
||||||
#include <base/lock.h>
|
#include <base/lock.h>
|
||||||
#include <base/printf.h>
|
#include <base/printf.h>
|
||||||
|
#include <base/trace/events.h>
|
||||||
#include <cap_session/cap_session.h>
|
#include <cap_session/cap_session.h>
|
||||||
|
|
||||||
namespace Genode {
|
namespace Genode {
|
||||||
|
@ -123,6 +124,10 @@ namespace Genode {
|
||||||
/* read arguments from istream */
|
/* read arguments from istream */
|
||||||
_read_args(is, args.data());
|
_read_args(is, args.data());
|
||||||
|
|
||||||
|
{
|
||||||
|
Trace::Rpc_dispatch trace_event(This_rpc_function::name());
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dispatch call to matching RPC base class, using
|
* Dispatch call to matching RPC base class, using
|
||||||
* 'This_rpc_function' and the list of its exceptions to
|
* '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>());
|
exc = _do_serve(args.data(), ret, Overload_selector<This_rpc_function, Exceptions>());
|
||||||
os << ret;
|
os << ret;
|
||||||
|
|
||||||
|
{
|
||||||
|
Trace::Rpc_reply trace_event(This_rpc_function::name());
|
||||||
|
}
|
||||||
|
|
||||||
/* write results to ostream 'os' */
|
/* write results to ostream 'os' */
|
||||||
_write_results(os, args.data());
|
_write_results(os, args.data());
|
||||||
|
|
||||||
|
|
|
@ -62,38 +62,32 @@ struct Genode::Trace::Rpc_returned
|
||||||
struct Genode::Trace::Rpc_dispatch
|
struct Genode::Trace::Rpc_dispatch
|
||||||
{
|
{
|
||||||
char const *rpc_name;
|
char const *rpc_name;
|
||||||
Rpc_object_base const &obj;
|
|
||||||
Msgbuf_base const &msg;
|
|
||||||
|
|
||||||
Rpc_dispatch(char const *rpc_name, Rpc_object_base const &obj,
|
Rpc_dispatch(char const *rpc_name)
|
||||||
Msgbuf_base const &msg)
|
|
||||||
:
|
:
|
||||||
rpc_name(rpc_name), obj(obj), msg(msg)
|
rpc_name(rpc_name)
|
||||||
{
|
{
|
||||||
Thread_base::trace(this);
|
Thread_base::trace(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t generate(Policy_module &policy, char *dst) const {
|
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
|
struct Genode::Trace::Rpc_reply
|
||||||
{
|
{
|
||||||
char const *rpc_name;
|
char const *rpc_name;
|
||||||
Rpc_object_base const &obj;
|
|
||||||
Msgbuf_base const &msg;
|
|
||||||
|
|
||||||
Rpc_reply(char const *rpc_name, Rpc_object_base const &obj,
|
Rpc_reply(char const *rpc_name)
|
||||||
Msgbuf_base const &msg)
|
|
||||||
:
|
:
|
||||||
rpc_name(rpc_name), obj(obj), msg(msg)
|
rpc_name(rpc_name)
|
||||||
{
|
{
|
||||||
Thread_base::trace(this);
|
Thread_base::trace(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t generate(Policy_module &policy, char *dst) const {
|
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
|
struct Genode::Trace::Signal_received
|
||||||
{
|
{
|
||||||
Signal const &signal;;
|
Signal_context const &signal_context;
|
||||||
|
unsigned const num;
|
||||||
|
|
||||||
Signal_received(Signal const &signal) : signal(signal)
|
Signal_received(Signal_context const &signal_context, unsigned num)
|
||||||
{ Thread_base::trace(this); }
|
:
|
||||||
|
signal_context(signal_context), num(num)
|
||||||
|
{
|
||||||
|
Thread_base::trace(this);
|
||||||
|
}
|
||||||
|
|
||||||
size_t generate(Policy_module &policy, char *dst) const {
|
size_t generate(Policy_module &policy, char *dst) const {
|
||||||
return policy.signal_received(dst, signal); }
|
return policy.signal_received(dst, signal_context, num); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
namespace Genode {
|
namespace Genode {
|
||||||
|
|
||||||
class Msgbuf_base;
|
class Msgbuf_base;
|
||||||
class Signal;
|
class Signal_context;
|
||||||
class Rpc_object_base;
|
class Rpc_object_base;
|
||||||
|
|
||||||
namespace Trace { class Policy_module; }
|
namespace Trace { class Policy_module; }
|
||||||
|
@ -37,7 +37,7 @@ struct Genode::Trace::Policy_module
|
||||||
size_t (*rpc_dispatch) (char *, char const *);
|
size_t (*rpc_dispatch) (char *, char const *);
|
||||||
size_t (*rpc_reply) (char *, char const *);
|
size_t (*rpc_reply) (char *, char const *);
|
||||||
size_t (*signal_submit) (char *, unsigned 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_ */
|
#endif /* _INCLUDE__BASE__TRACE__POLICY_H_ */
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
#include <base/signal.h>
|
#include <base/signal.h>
|
||||||
#include <base/thread.h>
|
#include <base/thread.h>
|
||||||
|
#include <base/trace/events.h>
|
||||||
#include <signal_session/connection.h>
|
#include <signal_session/connection.h>
|
||||||
|
|
||||||
using namespace Genode;
|
using namespace Genode;
|
||||||
|
@ -204,6 +205,9 @@ Signal::Signal(Signal::Data data) : _data(data)
|
||||||
|
|
||||||
void Signal_transmitter::submit(unsigned cnt)
|
void Signal_transmitter::submit(unsigned cnt)
|
||||||
{
|
{
|
||||||
|
{
|
||||||
|
Trace::Signal_submit trace_event(cnt);
|
||||||
|
}
|
||||||
signal_connection()->submit(_context, cnt);
|
signal_connection()->submit(_context, cnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,6 +339,8 @@ Signal Signal_receiver::wait_for_signal()
|
||||||
if (result.num == 0)
|
if (result.num == 0)
|
||||||
PWRN("returning signal with num == 0");
|
PWRN("returning signal with num == 0");
|
||||||
|
|
||||||
|
Trace::Signal_received trace_event(*context, result.num);
|
||||||
|
|
||||||
/* return last received signal */
|
/* return last received signal */
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue