// Copyright 2014 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 "cc/base/unique_notifier.h"

#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/location.h"
#include "base/sequenced_task_runner.h"

namespace cc {

UniqueNotifier::UniqueNotifier(base::SequencedTaskRunner* task_runner,
                               base::RepeatingClosure closure)
    : task_runner_(task_runner),
      closure_(std::move(closure)),
      notification_pending_(false),
      weak_ptr_factory_(this) {}

UniqueNotifier::~UniqueNotifier() = default;

void UniqueNotifier::Cancel() {
  DCHECK(task_runner_->RunsTasksInCurrentSequence());
  base::AutoLock hold(lock_);
  notification_pending_ = false;
}

void UniqueNotifier::Schedule() {
  DCHECK(task_runner_->RunsTasksInCurrentSequence());
  base::AutoLock hold(lock_);
  if (notification_pending_)
    return;

  task_runner_->PostTask(
      FROM_HERE,
      base::BindOnce(&UniqueNotifier::Notify, weak_ptr_factory_.GetWeakPtr()));
  notification_pending_ = true;
}

void UniqueNotifier::Notify() {
  DCHECK(task_runner_->RunsTasksInCurrentSequence());
  // Scope to release |lock_| before running the closure.
  {
    base::AutoLock hold(lock_);
    if (!notification_pending_)
      return;

    // Note that the order here is important in case closure schedules another
    // run.
    notification_pending_ = false;
  }

  closure_.Run();
}

}  // namespace cc
