について話しているのでprogrammatically
、楽器は考慮していません。
事前にリストされているいくつかの参照:
- iPhone アプリの fps (1 秒あたりのフレーム数) を計算する
- 画面上の iOS で FPS を表示する (Instruments なし)
- iOS UI はどのフレームレートでアニメーションを実行しますか?
1. CADisplayLink の使用
ドキュメントによると、
duration プロパティは、フレーム間の時間を提供します。アプリケーションでこの値を使用して、ディスプレイのフレームレートを計算できます...
私のデモ プロジェクトでは、UITrackingRunLoopMode の mainRunLoop に displayLink を追加します。
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(screenDidUpdated)];
[self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:UITrackingRunLoopMode];
duration
FPS の計算に使用します。しかし、私の予想外ではduration
、tableView がスムーズにスクロールするかどうかに関係なく、常に 0.016667 (~ FPS 60) です。
tableView ラグを作成する方法は、次のように 1 行追加することです- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
。
NSData *data = [NSData dataWithContentsOfURL:url];
それから私はに目を向けましたdisplayLink.timestamp
、そしてそれはうまくいきました。
2.観察drawRect:
?
私の2番目のアイデアは、を観察することですdrawRect:
。tableViewがスクロールdrawRect:
すると、フレームごとに呼び出され、呼び出し間の時間差に従ってFPSを計算できると思いましたdrawRect:
。
しかし、それは失敗しました。これは、drawRect:
が 1 回だけ呼び出されたためです (while セルが何度も)。この方法は に似てUsing CADisplayLink
いますが、観察するために間違った位置/方法 ( などdrawRect:
) を選択した可能性があります。観察するための推奨される方法はありますか?
質問:
- 計測器が FPS を正確に測定する方法は?
- ドキュメントは
using duration to calculate FPS
間違っていると言っていますか? - FPS を計算するために観察する正しい/最良の方法は何ですか?
ありがとう!