10

について話しているのでprogrammatically楽器は考慮していません。

事前にリストされているいくつかの参照:

1. CADisplayLink の使用

ドキュメントによると、

duration プロパティは、フレーム間の時間を提供します。アプリケーションでこの値を使用して、ディスプレイのフレームレートを計算できます...

私のデモ プロジェクトでは、UITrackingRunLoopMode の mainRunLoop に displayLink を追加します。

self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(screenDidUpdated)];
[self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:UITrackingRunLoopMode];

durationFPS の計算に使用します。しかし、私の予想外では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:) を選択した可能性があります。観察するための推奨される方法はありますか?

質問:

  1. 計測器が FPS を正確に測定する方法は?
  2. ドキュメントusing duration to calculate FPS間違っていると言っていますか?
  3. FPS を計算するために観察する正しい/最良の方法は何ですか?

ありがとう!

4

2 に答える 2

2

CADisplayLinkのドキュメントに記載されているように、duration基本的には1 / maximumFramesPerSecond. ドロップ フレームを検出するにはtargetTimestamp、 との間の不一致を確認する必要があります。timestamp

duration プロパティは、 maximumFramesPerSecond でのフレーム間の時間を提供します。実際のフレーム期間を計算するには、targetTimestamp - タイムスタンプを使用します。

于 2017-10-03T09:47:02.640 に答える
1

これは機能しますが、セットアップが必要です。

  1. CADisplayLink を設定し、frameInterval をデフォルトのままにします (フレームごとに 1 回撮影します)。
  2. この CADisplayLink は実際に runLoop に追加され、#3 に到達するために少なくとも 1 回起動する必要があります
  3. コールバック後、またはコールバック内で、フレーム レートを取得できます。アイデアを提供するSwiftコードをdisplayLink次に示しますが、CADisplayLinkインスタンスはどこにありますか

    var framesPerSecond : Int {
        var retVal : Int = 60 // default value, just in case link.duration is still 0 
        if let link = displayLink where link.duration > 0 {
            retVal = Int(round(1000 / link.duration)/1000)
        }
        return retVal;
    }
    
于 2015-11-28T22:02:50.380 に答える