diff --git a/base/include/base/rpc.h b/base/include/base/rpc.h index 8c55f342c..73e92559a 100644 --- a/base/include/base/rpc.h +++ b/base/include/base/rpc.h @@ -46,6 +46,8 @@ static void serve(SERVER &server, Server_args &args, RET &ret) { \ ::Genode::Meta::call_member \ (ret, server, args, &SERVER::func_name); } \ + \ + static const char* name() { return #func_name; } \ }; /** diff --git a/base/include/base/rpc_client.h b/base/include/base/rpc_client.h index f8b710d11..b070075e5 100644 --- a/base/include/base/rpc_client.h +++ b/base/include/base/rpc_client.h @@ -15,6 +15,7 @@ #define _INCLUDE__BASE__RPC_CLIENT_H_ #include +#include 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); diff --git a/base/include/base/rpc_server.h b/base/include/base/rpc_server.h index 02cdf58a9..534ddc413 100644 --- a/base/include/base/rpc_server.h +++ b/base/include/base/rpc_server.h @@ -20,6 +20,7 @@ #include #include #include +#include #include 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()); os << ret; + { + Trace::Rpc_reply trace_event(This_rpc_function::name()); + } + /* write results to ostream 'os' */ _write_results(os, args.data()); diff --git a/base/include/base/trace/events.h b/base/include/base/trace/events.h index 4d9703ad1..c73e8a9a1 100644 --- a/base/include/base/trace/events.h +++ b/base/include/base/trace/events.h @@ -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); } }; diff --git a/base/include/base/trace/policy.h b/base/include/base/trace/policy.h index 847cc6c51..c5d00d500 100644 --- a/base/include/base/trace/policy.h +++ b/base/include/base/trace/policy.h @@ -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_ */ diff --git a/base/src/base/signal/signal.cc b/base/src/base/signal/signal.cc index 8f4af501c..d6a1ff19c 100644 --- a/base/src/base/signal/signal.cc +++ b/base/src/base/signal/signal.cc @@ -13,6 +13,7 @@ #include #include +#include #include 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; }