chromium/content/common/trace_utils.h

// Copyright 2020 The Chromium Authors
// 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[] =;
}

// 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 {};

}  // namespace content

#endif  // CONTENT_COMMON_TRACE_UTILS_H_