• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "cc/base/unique_notifier.h"
6 
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/location.h"
10 #include "base/sequenced_task_runner.h"
11 
12 namespace cc {
13 
UniqueNotifier(base::SequencedTaskRunner * task_runner,const base::Closure & closure)14 UniqueNotifier::UniqueNotifier(base::SequencedTaskRunner* task_runner,
15                                const base::Closure& closure)
16     : task_runner_(task_runner),
17       closure_(closure),
18       notification_pending_(false),
19       weak_ptr_factory_(this) {
20 }
21 
~UniqueNotifier()22 UniqueNotifier::~UniqueNotifier() {
23 }
24 
Schedule()25 void UniqueNotifier::Schedule() {
26   if (notification_pending_)
27     return;
28 
29   task_runner_->PostTask(
30       FROM_HERE,
31       base::Bind(&UniqueNotifier::Notify, weak_ptr_factory_.GetWeakPtr()));
32   notification_pending_ = true;
33 }
34 
Notify()35 void UniqueNotifier::Notify() {
36   // Note that the order here is important in case closure schedules another
37   // run.
38   notification_pending_ = false;
39   closure_.Run();
40 }
41 
42 }  // namespace cc
43