A framerate meter that clicks like a Geiger counter when your animation drops a frame
This tool is a framerate meter that clicks like a Geiger counter when your animation drops a frame.
A Geiger counter detects invisible particles and alerts you to what you can’t see. Dropped frames aren’t invisible, but it can be hard to tell the difference between 55 and 60 fps. KMCGeigerCounter makes each dropped frame obvious.
The meter shows two numbers:
The meter will be orange when you’ve dropped at least three frames in the past second.
pod 'KMCGeigerCounter'
Or copy these files into your project:
If you’re not using CocoaPods, you may need to add this framework to your Link Binary With Libraries build phase:
In your UIApplicationDelegate
, enable the tool:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// …
[self.window makeKeyAndVisible];
[KMCGeigerCounter sharedGeigerCounter].enabled = YES;
}
Build and run your app. Navigate through your app and listen for clicks.
Dropped frames on iOS can be divided into two types, which I’ll call CPU and GPU drops. CPU drops happen when main thread activity delays the preparation of your layer tree, like when Auto Layout evaluates a complex set of constraints. CPU drops are easy to measure by observing the delivery timing of regularly scheduled events on the main thread. GPU drops happen when the layer tree is expensive to draw, such as when there are too many blended layers. Due to the nature of iOS, GPU drops happen in a system process responsible for drawing. I haven’t found a way to measure them without adversely affecting the app’s framerate. The upshot is that only CPU drops can be detected by this library today. Fortunately, more powerful iOS devices have made GPU drops much less common than they used to be, and you can always use the Core Animation instrument to measure them faithfully.
Remember to turn off Silent mode, or you won’t hear anything.
You should remove KMCGeigerCounter before shipping to the App Store. It can’t be good for battery life.
The iOS Simulator doesn’t simulate device performance, so consider enabling the tool only for device builds:
#if !TARGET_IPHONE_SIMULATOR
[KMCGeigerCounter sharedGeigerCounter].enabled = YES;
#endif