Commit 4387a131 authored by Karel Král's avatar Karel Král Committed by Commit Bot

Implement tracing of mojo sync response parameters

Add support for tracing of mojo sync response parameters in
auto-generated methods. Thus provide more information for the developers
who are debugging.

Bug: 1103623
Change-Id: Ie0edadbe6007f0156d4c291775dba2e8777a2ed9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2332819
Commit-Queue: Karel Král <karelkral@google.com>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#797263}
parent be731de2
...@@ -122,7 +122,8 @@ bool {{proxy_name}}::{{method.name}}( ...@@ -122,7 +122,8 @@ bool {{proxy_name}}::{{method.name}}(
{%- set qualified_method_name = "%s::%s::%s" % (namespace_as_string, {%- set qualified_method_name = "%s::%s::%s" % (namespace_as_string,
class_name, method.name) %} class_name, method.name) %}
{{interface_macros.trace_event("param_", method.parameters, {{interface_macros.trace_event("param_", method.parameters,
qualified_method_name)}} qualified_method_name,
trace_event_type='_BEGIN')}}
#endif #endif
const bool kExpectsResponse = true; const bool kExpectsResponse = true;
const bool kIsSync = true; const bool kIsSync = true;
...@@ -133,13 +134,13 @@ bool {{proxy_name}}::{{method.name}}( ...@@ -133,13 +134,13 @@ bool {{proxy_name}}::{{method.name}}(
{%- for param in method.parameters -%} {%- for param in method.parameters -%}
, std::move(param_{{param.name}}) , std::move(param_{{param.name}})
{%- endfor %}); {%- endfor %});
{%- else %} {%- else %} {#- if method|method_supports_lazy_serialization #}
{{interface_macros.build_message_flags(False, "kIsSync", "kExpectsResponse", {{interface_macros.build_message_flags(False, "kIsSync", "kExpectsResponse",
"kFlags")}} "kFlags")}}
{{interface_macros.build_serialized_message( {{interface_macros.build_serialized_message(
message_name, "param_%s", params_struct, params_description, "kFlags", message_name, "param_%s", params_struct, params_description, "kFlags",
"message")}} "message")}}
{%- endif %} {%- endif %} {#- if method|method_supports_lazy_serialization #}
#if defined(ENABLE_IPC_FUZZER) #if defined(ENABLE_IPC_FUZZER)
message.set_interface_name({{class_name}}::Name_); message.set_interface_name({{class_name}}::Name_);
...@@ -154,10 +155,15 @@ bool {{proxy_name}}::{{method.name}}( ...@@ -154,10 +155,15 @@ bool {{proxy_name}}::{{method.name}}(
, out_param_{{param.name}} , out_param_{{param.name}}
{%- endfor %})); {%- endfor %}));
ignore_result(receiver_->AcceptWithResponder(&message, std::move(responder))); ignore_result(receiver_->AcceptWithResponder(&message, std::move(responder)));
// TODO(karelkral) Trace the out_ parameters here #if BUILDFLAG(MOJO_TRACE_ENABLED)
{{interface_macros.trace_event("out_param_", method.response_parameters,
qualified_method_name,
trace_event_type='_END',
dereference_parameters=True)}}
#endif
return result; return result;
} }
{%- endif %} {%- endif %} {#- if method.sync #}
void {{proxy_name}}::{{method.name}}( void {{proxy_name}}::{{method.name}}(
{{interface_macros.declare_request_params("in_", method)}}) { {{interface_macros.declare_request_params("in_", method)}}) {
......
...@@ -24,29 +24,59 @@ base::OnceCallback<void( ...@@ -24,29 +24,59 @@ base::OnceCallback<void(
{%- endif -%} {%- endif -%}
{%- endmacro -%} {%- endmacro -%}
{%- macro trace_event(prefix, method_parameters, qualified_method_name) -%} {%- macro trace_event(prefix, method_parameters, qualified_method_name,
trace_event_type='', dereference_parameters=False) -%}
{#- This macro assumes that the argument names are the ones declared by -#} {#- This macro assumes that the argument names are the ones declared by -#}
{#- |declare_request_params|. Namely the |prefix| should be the same here as -#} {#- |declare_request_params/declare_sync_method_params|. Namely the |prefix| -#}
{#- in |declare_request_params|. -#} {#- must be the same here as in -#}
{#- |declare_request_params/declare_sync_method_params|. -#}
{#- |trace_event_type| can be set to: -#}
{#- '' just standalone trace. -#}
{#- Parameter names must match |declare_request_params|. -#}
{#- '_BEGIN' input parameters to be later merged, must be before the _END. -#}
{#- Parameter names must match |declare_request_params|. -#}
{#- '_END' merge corresponding sync response parameters. -#}
{#- Parameter names must match |declare_sync_method_params|. -#}
{#- |dereference_parameters| the parameters type is actually |kind*|. -#}
{%- if method_parameters -%} {%- if method_parameters -%}
TRACE_EVENT1( TRACE_EVENT{{trace_event_type}}1(
"mojom", "{{qualified_method_name}}", "input_parameters", {%- if trace_event_type=='' or trace_event_type=='_BEGIN' -%}
{%- set parameter_group = 'input_parameters' -%}
{%- else -%}
{%- set parameter_group = 'response_parameters' -%}
{%- endif %}
"mojom", "{{qualified_method_name}}", "{{parameter_group}}",
[&](){ [&](){
auto value = std::make_unique<base::trace_event::TracedValue>(); auto value = std::make_unique<base::trace_event::TracedValue>();
base::trace_event::TracedValue* raw_value = value.get(); base::trace_event::TracedValue* raw_value = value.get();
{%- for param in method_parameters %} {%- for param in method_parameters %}
{%- for line in param.kind|write_input_param_for_tracing( {%- if dereference_parameters -%}
parameter_name=param.name, {%- set cpp_parameter_ptr = prefix + param.name %}
cpp_parameter_name=prefix+param.name, {%- set cpp_parameter_name = "(*%s)" % cpp_parameter_ptr %}
value='raw_value') %} if ({{cpp_parameter_ptr}}) {
{%- for line in param.kind|write_input_param_for_tracing(
parameter_name=param.name,
cpp_parameter_name=cpp_parameter_name,
value='raw_value') %}
{{line}}
{%- endfor %}
} else {
raw_value->SetString("{{param.name}}", "nullptr");
}
{%- else %} {#- if dereference_parameters #}
{%- for line in param.kind|write_input_param_for_tracing(
parameter_name=param.name,
cpp_parameter_name=prefix+param.name,
value='raw_value') %}
{{line}} {{line}}
{%- endfor -%} {%- endfor %}
{%- endif %} {#- if dereference_parameters #}
{%- endfor %} {%- endfor %}
return value; return value;
}()); }());
{%- else -%} {%- else -%} {#- if method_parameters -#}
TRACE_EVENT0("mojom", "{{qualified_method_name}}"); TRACE_EVENT{{trace_event_type}}0("mojom", "{{qualified_method_name}}");
{%- endif %} {%- endif %} {#- if method_parameters #}
{%- endmacro -%} {%- endmacro -%}
{%- macro declare_sync_method_params(prefix, method) -%} {%- macro declare_sync_method_params(prefix, method) -%}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment