// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

{% from 'macros.tmpl' import source_files_for_generated_file %}
{{source_files_for_generated_file(template_file, input_files)}}

#ifndef {{header_guard}}
#define {{header_guard}}

#include "third_party/blink/renderer/platform/heap/heap_allocator.h"
{% for include in config["settings"]["includes"] %}
#include "{{include}}"
{% endfor %}

{% set export_symbol = config["settings"]["export_symbol"] %}
{% set sink_class = (name | to_singular) + "Sink" %}

namespace blink {

{% for forward_decl in file.forward_declarations %}
{{forward_decl}}
{% endfor %}

namespace probe {
{% for probe in file.declarations %}

{%- macro params_decl(probe) %}
{%- for param in probe.params %}
{{ param.type }}
{%- if param.default_value %} = {{ param.default_value }}
{%- endif %}
{%- if not loop.last %}, {% endif %}
{%- endfor %}
{%- endmacro -%}

{%- macro params_list(probe) %}
{%- for param in probe.params %}
{{param.type}} {{param.name}}
{%- if not loop.last %}, {% endif -%}
{%- endfor -%}
{%- endmacro %}

{% if probe.is_scoped %}

class {{export_symbol}} {{probe.name}} : public ProbeBase {
  STACK_ALLOCATED();

 public:
  explicit {{probe.name}}({{ params_decl(probe) }});
  ~{{probe.name}}();
  {{sink_class}}* probe_sink = nullptr;
{% for param in probe.params %}
  {{param.type}} {{param.name}};
{% endfor %}
};

{%- else %}

{{export_symbol}} void {{probe.name}}Impl({{ params_decl(probe) }});
inline void {{probe.name}}({{params_list(probe)}}) {
  if (!{{sink_class}}::HasAgentsGlobal(
    {%- for agent in probe.agents %}
    {% if not loop.first %} | {% endif -%}
    {{sink_class}}::k{{agent}}
    {%- endfor %}))
    return;

  {{probe.name}}Impl(
    {%- for param in probe.params %}
      {% if not loop.first %}, {% endif %}{{param.name}}
    {%- endfor %});
}

{%- endif %}
{%- endfor %}


} // namespace probe
} // namespace blink

#endif // {{header_guard}}
