// Copyright 2020 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.

#ifndef CONTENT_COMMON_TRACE_UTILS_H_
#define CONTENT_COMMON_TRACE_UTILS_H_

#include <string>

#include "base/trace_event/traced_value.h"

namespace content {

// This can't be a struct since in C++14 static constexpr structure members
// have external linkage. This has been fixed in C++17.
namespace tracing_category {
static constexpr const char kNavigation[] = "navigation";
}

// Class which facilitates annotating with traces all possible return paths
// from a function or a method. Setting the return reason is enforced by a
// CHECK at runtime to ensure that no return branches have been missed.
// Template usage is necessary since the tracing code requires the category to
// be constant at compile time.
//
// Example usage:
//
// void SomeMethod() {
//   TraceReturnReason<tracing_category::kNavigation> trace_return("Method");
//
//   if (condition) {
//     trace_return.set_return_reason("foo");
//     trace_return.traced_value()->SetBoolean("condition", true);
//     return;
//   }
//
//   trace_return.set_return_reason("default return");
//   return;
// }
//
template <const char* category>
class TraceReturnReason {
 public:
  explicit TraceReturnReason(const char* const name)
      : name_(name),
        traced_value_(std::make_unique<base::trace_event::TracedValue>()) {
    TRACE_EVENT_BEGIN0(category, name_);
  }

  ~TraceReturnReason() {
    CHECK(reason_set_);
    TRACE_EVENT_END1(category, name_, "return", std::move(traced_value_));
  }

  void set_return_reason(const std::string& reason) {
    reason_set_ = true;
    traced_value_->SetString("reason", reason);
  }

  // This method exposes the internal TracedValue member so usage of this
  // class allows easy addition of more data to the end of the event.
  base::trace_event::TracedValue* traced_value() { return traced_value_.get(); }

 private:
  const char* const name_;
  bool reason_set_ = false;
  std::unique_ptr<base::trace_event::TracedValue> traced_value_;
};

}  // namespace content

#endif  // CONTENT_COMMON_TRACE_UTILS_H_
