// Copyright 2019 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 "gpu/ipc/gpu_task_scheduler_helper.h"

#include "gpu/command_buffer/client/cmd_buffer_helper.h"
#include "gpu/ipc/command_buffer_task_executor.h"
#include "gpu/ipc/single_task_sequence.h"

namespace gpu {

GpuTaskSchedulerHelper::GpuTaskSchedulerHelper(
    std::unique_ptr<SingleTaskSequence> task_sequence)
    : using_command_buffer_(false),
      task_sequence_(std::move(task_sequence)),
      initialized_(true) {}

GpuTaskSchedulerHelper::GpuTaskSchedulerHelper(
    gpu::CommandBufferTaskExecutor* command_buffer_task_executor)
    : using_command_buffer_(true),
      task_sequence_(command_buffer_task_executor->CreateSequence()),
      initialized_(false) {}

GpuTaskSchedulerHelper::~GpuTaskSchedulerHelper() = default;

void GpuTaskSchedulerHelper::Initialize(
    gpu::CommandBufferHelper* command_buffer_helper) {
  DCHECK(using_command_buffer_);
  DCHECK(!initialized_);
  DCHECK(command_buffer_helper);
  command_buffer_helper_ = command_buffer_helper;
  initialized_ = true;
}

void GpuTaskSchedulerHelper::ScheduleGpuTask(
    base::OnceClosure callback,
    std::vector<gpu::SyncToken> sync_tokens) {
  // There are two places where this function is called: inside
  // SkiaOutputSurface, where |using_command_buffer_| is false, or by other
  // users when sharing with command buffer, where we should ahve
  // |command_buffer_helper_| already set up.
  DCHECK(!using_command_buffer_ || command_buffer_helper_);
  DCHECK(initialized_);
  if (command_buffer_helper_)
    command_buffer_helper_->Flush();

  task_sequence_->ScheduleTask(std::move(callback), std::move(sync_tokens));
}

void GpuTaskSchedulerHelper::ScheduleOrRetainGpuTask(
    base::OnceClosure task,
    std::vector<SyncToken> sync_tokens) {
  DCHECK(!using_command_buffer_);
  DCHECK(!command_buffer_helper_);
  task_sequence_->ScheduleOrRetainTask(std::move(task), sync_tokens);
}

SequenceId GpuTaskSchedulerHelper::GetSequenceId() {
  DCHECK(!using_command_buffer_);
  DCHECK(!command_buffer_helper_);
  return task_sequence_->GetSequenceId();
}

gpu::SingleTaskSequence* GpuTaskSchedulerHelper::GetTaskSequence() const {
  DCHECK(using_command_buffer_);
  return task_sequence_.get();
}

}  // namespace gpu
