| // Copyright 2012 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. |
| |
| #ifndef IOS_CHROME_APP_DEFERRED_INITIALIZATION_RUNNER_H_ |
| #define IOS_CHROME_APP_DEFERRED_INITIALIZATION_RUNNER_H_ |
| |
| #import <Foundation/Foundation.h> |
| |
| #include "base/ios/block_types.h" |
| |
| // A singleton object to run initialization code asynchronously. Blocks are |
| // scheduled to be run after a delay. The block is named when added to the |
| // singleton so that other code can force a deferred block to be run |
| // synchronously if necessary. |
| @interface DeferredInitializationRunner : NSObject |
| |
| // Returns singleton instance. |
| + (DeferredInitializationRunner*)sharedInstance; |
| |
| // Stores |block| under |name| to a queue of blocks to run. All blocks are run |
| // sequentially with a small delay before the first block and between each |
| // successive block. If a block is already registered under |name|, it is |
| // replaced with |block| unless it has already been run. |
| - (void)enqueueBlockNamed:(NSString*)name block:(ProceduralBlock)block; |
| |
| // Looks up a previously scheduled block of |name|. If block has not been |
| // run yet, run it synchronously now. |
| - (void)runBlockIfNecessary:(NSString*)name; |
| |
| // Cancels a previously scheduled block of |name|. This is a no-op if the |
| // block has already been executed. |
| - (void)cancelBlockNamed:(NSString*)name; |
| |
| // Number of blocks that have been registered but not executed yet. |
| // Exposed for testing. |
| @property(nonatomic, readonly) NSUInteger numberOfBlocksRemaining; |
| |
| @end |
| |
| @interface DeferredInitializationRunner (ExposedForTesting) |
| |
| // Time interval between two blocks. Default value is 200ms. |
| @property(nonatomic, assign) NSTimeInterval delayBetweenBlocks; |
| |
| // Time interval before running the first block. To override default value of |
| // 3s, set this property before the first call to |-enqueueBlockNamed:block:|. |
| @property(nonatomic, assign) NSTimeInterval delayBeforeFirstBlock; |
| |
| @end |
| |
| #endif // IOS_CHROME_APP_DEFERRED_INITIALIZATION_RUNNER_H_ |