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 // TODO(dcheng): How come this doesn't need to hold a ref to the task runner? 36 base::SequencedTaskRunner* task_runner_; 37 base::Closure closure_; 38 bool notification_pending_; 39 40 base::WeakPtrFactory<UniqueNotifier> weak_ptr_factory_; 41 }; 42 43 } // namespace cc 44 45 #endif // CC_BASE_UNIQUE_NOTIFIER_H_ 46