text: // 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 BASE_TRACE_EVENT_TASK_EXECUTION_MACROS_H_
  #define BASE_TRACE_EVENT_TASK_EXECUTION_MACROS_H_
  
  #include "base/location.h"
  #include "base/trace_event/heap_profiler.h"
  #include "base/trace_event/interned_args_helper.h"
  #include "base/trace_event/typed_macros.h"
  #include "third_party/perfetto/protos/perfetto/trace/track_event/log_message.pbzero.h"
  #include "third_party/perfetto/protos/perfetto/trace/track_event/task_execution.pbzero.h"
  
  // Implementation detail: internal macro to trace a log message, with the source
  // location of the log statement.
  #define INTERNAL_TRACE_LOG_MESSAGE(file, message, line)                      \
    TRACE_EVENT_INSTANT("log", "LogMessage", [&](perfetto::EventContext ctx) { \
      perfetto::protos::pbzero::LogMessage* log =                              \
          ctx.event()->set_log_message();                                      \
      log->set_source_location_iid(                                            \
          base::trace_event::InternedSourceLocation::Get(                      \
              &ctx, base::trace_event::TraceSourceLocation(                    \
                        /*function_name=*/nullptr, file, line)));              \
      log->set_body_iid(base::trace_event::InternedLogMessage::Get(            \
          &ctx, std::string(message)));                                        \
    });
  
  #endif  // BASE_TRACE_EVENT_TASK_EXECUTION_MACROS_H_
  