Home | History | Annotate | Download | only in base
      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 #ifndef CC_BASE_UNIQUE_NOTIFIER_H_
      6 #define CC_BASE_UNIQUE_NOTIFIER_H_
      7 
      8 #include "base/callback.h"
      9 #include "base/memory/weak_ptr.h"
     10 #include "cc/base/cc_export.h"
     11 
     12 namespace base {
     13 class SequencedTaskRunner;
     14 }  // namespace base
     15 
     16 namespace cc {
     17 
     18 class CC_EXPORT UniqueNotifier {
     19  public:
     20   // Configure this notifier to issue the |closure| notification when scheduled.
     21   UniqueNotifier(base::SequencedTaskRunner* task_runner,
     22                  const base::Closure& closure);
     23 
     24   // Destroying the notifier will ensure that no further notifications will
     25   // happen from this class.
     26   ~UniqueNotifier();
     27 
     28   // Schedule a notification to be run. If another notification is already
     29   // pending, then only one notification will take place.
     30   void Schedule();
     31 
     32  private:
     33   void Notify();
     34 
     35   base::SequencedTaskRunner* task_runner_;
     36   base::Closure closure_;
     37   bool notification_pending_;
     38 
     39   base::WeakPtrFactory<UniqueNotifier> weak_ptr_factory_;
     40 };
     41 
     42 }  // namespace cc
     43 
     44 #endif  // CC_BASE_UNIQUE_NOTIFIER_H_
     45