KMCGeigerCounter

A framerate meter that clicks like a Geiger counter when your animation drops a frame

  • 所有者: kconner/KMCGeigerCounter
  • 平台:
  • 许可证: MIT License
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

KMCGeigerCounter

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.

  • If you're not consistently animating smoothly, you'll hear a rough, staticky noise.
  • If your app runs at a smooth 60 fps, you'll hear the occasional drops to 59 and 58.
  • You will hear dropped frames from occasional CPU spikes, like when custom table view cells enter the screen and require layout.

The meter shows two numbers:

  • The number of frames dropped in the past second
  • The number of frames drawn in the past second

The meter will be orange when you've dropped at least three frames in the past second.

Installation

pod 'KMCGeigerCounter'

Or copy these files into your project:

  • KMCGeigerCounter.h
  • KMCGeigerCounter.m
  • KMCGeigerCounter.aiff

If you're not using CocoaPods, you may need to add this framework to your Link Binary With Libraries build phase:

  • AudioToolbox.framework

Usage

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.

Known issue

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.

Notes

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

主要指标

概览
名称与所有者kconner/KMCGeigerCounter
主编程语言Objective-C
编程语言Objective-C (语言数: 3)
平台
许可证MIT License
所有者活动
创建于2014-10-22 16:41:29
推送于2022-07-23 17:48:46
最后一次提交2022-07-23 10:48:43
发布数7
最新版本名称0.3.0 (发布于 2018-09-01 19:24:35)
第一版名称0.1 (发布于 2014-10-22 13:09:36)
用户参与
星数2.2k
关注者数57
派生数272
提交数44
已启用问题?
问题数14
打开的问题数0
拉请求数6
打开的拉请求数0
关闭的拉请求数7
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?