// Copyright 2017 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 "public/platform/WebScopedVirtualTimePauser.h"

#include "base/trace_event/trace_event.h"
#include "platform/scheduler/main_thread/main_thread_scheduler.h"

namespace blink {

WebScopedVirtualTimePauser::WebScopedVirtualTimePauser()
    : scheduler_(nullptr) {}

WebScopedVirtualTimePauser::WebScopedVirtualTimePauser(
    scheduler::RendererSchedulerImpl* scheduler,
    VirtualTaskDuration duration)
    : duration_(duration),
      scheduler_(scheduler),
      trace_id_(WebScopedVirtualTimePauser::next_trace_id_++) {}

WebScopedVirtualTimePauser::~WebScopedVirtualTimePauser() {
  if (paused_ && scheduler_)
    DecrementVirtualTimePauseCount();
}

WebScopedVirtualTimePauser::WebScopedVirtualTimePauser(
    WebScopedVirtualTimePauser&& other) {
  virtual_time_when_paused_ = other.virtual_time_when_paused_;
  paused_ = other.paused_;
  duration_ = other.duration_;
  scheduler_ = std::move(other.scheduler_);
  other.scheduler_ = nullptr;
  trace_id_ = other.trace_id_;
}

WebScopedVirtualTimePauser& WebScopedVirtualTimePauser::operator=(
    WebScopedVirtualTimePauser&& other) {
  if (scheduler_ && paused_)
    DecrementVirtualTimePauseCount();
  virtual_time_when_paused_ = other.virtual_time_when_paused_;
  paused_ = other.paused_;
  duration_ = other.duration_;
  scheduler_ = std::move(other.scheduler_);
  trace_id_ = other.trace_id_;
  other.scheduler_ = nullptr;
  return *this;
}

void WebScopedVirtualTimePauser::PauseVirtualTime(bool paused) {
  if (paused == paused_ || !scheduler_)
    return;

  paused_ = paused;
  if (paused_) {
    TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(
        "renderer.scheduler", "WebScopedVirtualTimePauser::PauseVirtualTime",
        trace_id_);
    virtual_time_when_paused_ = scheduler_->IncrementVirtualTimePauseCount();
  } else {
    TRACE_EVENT_NESTABLE_ASYNC_END0(
        "renderer.scheduler", "WebScopedVirtualTimePauser::PauseVirtualTime",
        trace_id_);
    DecrementVirtualTimePauseCount();
  }
}

void WebScopedVirtualTimePauser::DecrementVirtualTimePauseCount() {
  scheduler_->DecrementVirtualTimePauseCount();
  if (duration_ == VirtualTaskDuration::kNonInstant) {
    scheduler_->MaybeAdvanceVirtualTime(virtual_time_when_paused_ +
                                        base::TimeDelta::FromMilliseconds(10));
  }
}

int WebScopedVirtualTimePauser::next_trace_id_ = 0;

}  // namespace blink
