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

#include "mojo/environment/default_task_tracker.h"

#include "base/logging.h"
#include "mojo/common/task_tracker.h"
#include "mojo/public/cpp/environment/task_tracker.h"

namespace mojo {
namespace internal {
namespace {

bool g_enabled = false;

TaskTrackingId StartTracking(const char* function_name,
                             const char* file_name,
                             int line_number,
                             const void* program_counter) {
  if (!g_enabled)
    return TaskTrackingId(0);

  return common::TaskTracker::StartTracking(function_name, file_name,
                                            line_number, program_counter);
}

void EndTracking(const TaskTrackingId id) {
  if (!g_enabled) {
    DCHECK_EQ(0, id);
    return;
  }

  common::TaskTracker::EndTracking(id);
}

void SetEnabled(bool enabled) {
  g_enabled = enabled;
}

}  // namespace

const TaskTracker kDefaultTaskTracker = {&StartTracking,
                                         &EndTracking,
                                         &SetEnabled};

}  // namespace internal
}  // namespace mojo
