// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/browser/scheduler/browser_task_priority.h"

#include "base/notreached.h"
#include "base/task/sequence_manager/sequence_manager.h"
#include "base/tracing/protos/chrome_track_event.pbzero.h"

namespace content::internal {

namespace {

using ProtoPriority = perfetto::protos::pbzero::SequenceManagerTask::Priority;

ProtoPriority ToProtoPriority(BrowserTaskPriority priority) {
  switch (priority) {
    case BrowserTaskPriority::kControlPriority:
      return ProtoPriority::CONTROL_PRIORITY;
    case BrowserTaskPriority::kHighestPriority:
      return ProtoPriority::HIGHEST_PRIORITY;
    case BrowserTaskPriority::kHighPriority:
      return ProtoPriority::HIGH_PRIORITY;
    case BrowserTaskPriority::kNormalPriority:
      return ProtoPriority::NORMAL_PRIORITY;
    case BrowserTaskPriority::kLowPriority:
      return ProtoPriority::LOW_PRIORITY;
    case BrowserTaskPriority::kBestEffortPriority:
      return ProtoPriority::BEST_EFFORT_PRIORITY;
    case BrowserTaskPriority::kPriorityCount:
      NOTREACHED();
  }
}

ProtoPriority TaskPriorityToProto(
    base::sequence_manager::TaskQueue::QueuePriority priority) {
  DCHECK_LT(static_cast<size_t>(priority),
            static_cast<size_t>(BrowserTaskPriority::kPriorityCount));
  return ToProtoPriority(static_cast<BrowserTaskPriority>(priority));
}

}  // namespace

base::sequence_manager::SequenceManager::PrioritySettings
CreateBrowserTaskPrioritySettings() {
  using base::sequence_manager::TaskQueue;
  base::sequence_manager::SequenceManager::PrioritySettings settings(
      BrowserTaskPriority::kPriorityCount,
      BrowserTaskPriority::kDefaultPriority);
  settings.SetProtoPriorityConverter(&TaskPriorityToProto);
  return settings;
}

}  // namespace content::internal
