// Copyright 2013 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 CC_BENCHMARKS_BENCHMARK_INSTRUMENTATION_H_
#define CC_BENCHMARKS_BENCHMARK_INSTRUMENTATION_H_

#include "base/trace_event/trace_event.h"
#include "cc/cc_export.h"
#include "cc/debug/rendering_stats.h"

namespace cc {
namespace benchmark_instrumentation {

// Please do not change the trace events in this file without updating
// tools/perf/measurements/rendering_stats.py accordingly.
// The benchmarks search for events and their arguments by name.

namespace internal {
constexpr const char* Category() {
  // Declared as a constexpr function to have an external linkage and to be
  // known at compile-time.
  return "cc,benchmark";
}
const char kBeginFrameId[] = "begin_frame_id";
}  // namespace internal

// TODO(khushalsagar): Fix these names for the telemetry benchmarks.
// See crbug/567993.
const char kSendBeginFrame[] = "ThreadProxy::ScheduledActionSendBeginMainFrame";
const char kDoBeginFrame[] = "ThreadProxy::BeginMainFrame";

class ScopedBeginFrameTask {
 public:
  ScopedBeginFrameTask(const char* event_name, unsigned int begin_frame_id)
      : event_name_(event_name) {
    TRACE_EVENT_BEGIN1(internal::Category(), event_name_,
                       internal::kBeginFrameId, begin_frame_id);
  }
  ScopedBeginFrameTask(const ScopedBeginFrameTask&) = delete;
  ~ScopedBeginFrameTask() {
    TRACE_EVENT_END0(internal::Category(), event_name_);
  }

  ScopedBeginFrameTask& operator=(const ScopedBeginFrameTask&) = delete;

 private:
  const char* event_name_;
};

void IssueImplThreadRenderingStatsEvent(const RenderingStats& stats);
void CC_EXPORT IssueDisplayRenderingStatsEvent();

}  // namespace benchmark_instrumentation
}  // namespace cc

#endif  // CC_BENCHMARKS_BENCHMARK_INSTRUMENTATION_H_
