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