1

5秒ごとに実行されるアプリ内で関数をプロファイリングしています。しかし、私は、トレースビューの "Calls + Rec/Total"オプションでは、コールの半分しか表示されません。私はサンプリング間隔として1マイクロ秒のサンプルベースのプロファイリングを使用しています。私はこのサンプリングレートで試してみましたが、目に見える改善はありませんでした。たとえば、私が236秒間ビューを実行すると、「Call + Rec/Total」オプションで47回のコールを取得する必要がありますが、下の図に示すように20回しか表示されません。誰でも私が間違っていることをコメントできますか?Android Traceview(サンプリングベースのトレース)に実際の関数呼び出し数が反映されていません

Tested devices: 
Device 1: SmartWatch LG R (Android 6.0.1), observes this problem 
Device 2: Samsung Galaxy S2 (Android 5.0.1 Custom ROM), observes this problem 
Device 3: Samsung Galaxy S2 (Android 4.4, Custom ROM), works fine 

enter image description here

UPDATE: 私は@kwsと私の議論に基づいて、(元々のAndroid 5.1.1との)二サムスンでAndroid 4.4.4をインストールし、現在サンプルベースの方法がありますそれでうまくいく。しかし、Android 6.0.1を搭載したスマートウォッチは、まだトレースビューで古い方法で動作しています。

アップデート2: 私はそれは、これらの機能は、2つのサンプル間で実行され、それがこのプロファイラでは見逃されることが考えられますので、サンプリングに基づく方法は、非常に軽量な機能をキャプチャする解像度を持っていないと思います。サンプリング間隔としてマイクロ秒単位でデータを記録していますが、そのような詳細な粒度に到達できるかどうかは疑問です。この議論の背後にある理由は、非常に軽量な関数をテストしたときに、すべての呼び出しが3つのデバイスすべてで捕捉されたわけではないということです。

+0

それぞれのメソッド呼び出しを記録しましたか?実際のメソッドコールの数は何でしたか? – kws

+0

私は、プロファイラが各メソッド呼び出しを記録することを期待しています。この場合のメソッド呼び出しの実際の数は47でした。私は何度も実験を繰り返しましたが、同じ結果が私には分かりません。私のサンプリング間隔は1マイクロ秒と非常に小さいので、すべてのメソッド呼び出しをキャプチャする必要があります。さらに、さまざまなアンドロイドバージョンのさまざまなデバイスで動作が異なります。 – utengr

+0

ここではルート状態に何か役割があるかどうかは分かりません。 – utengr

答えて

1

私はいくつかのテストを行いましたが、私はここで同じ行動をしていました(KitkatとMarshmallowで実行)。サンプルベースのプロファイリングを使用し、サンプリングレートを低く設定すると、結果が不正確になるようです。サンプリングレートを上げると、より正確な結果が得られる可能性があります。 一方、トレースベースのプロファイリングを使用する場合、結果は正確です。

私はこれらのサンプルベースのプロファイリング結果は、プロファイラが実際のものではなくサンプル結果を返すことになっているので、受け入れられると思います。サンプリング間隔が1μsの場合は、デバイスにも依存します。たぶん、ハイエンドのデバイスでより良い結果が得られるかもしれません。

重要な点は、docsによれば、プロファイリングは絶対タイミングを生成するのではなく、コード最適化の結果をチェックすることです。

プロファイリングが有効になっていると解釈されるコードの実行速度が遅くなります。 を使用して、プロファイラの結果から絶対的なタイミングを生成しないでください( 「関数Xの実行に2.5秒かかる」など)。時刻は他のプロファイル出力との関係でのみ有効ですので、前回のプロファイリング実行に対して、 のコードが速くなったり遅くなったりしているかどうかを確認することができます。

EDIT

あなたはより正確な結果を望むなら、あなたは、トレースベースのプロファイリングのために行くのどちらか持っているか、あなたは、より正確なDebugクラスを使用する必要があります。後者を使用すると、コード内のトレース・データのロギングを開始および停止する場所を正確に指定できます。詳細情報here

+0

あなたはこれらの値が単なる指標であることは間違いありません。私は、サンプリングベースの方法は少し矛盾していますが、その結果のさまざまなデバイス間で一貫してより一貫しているので、私はトレースベースの方法に行くと思います。誰か他の人が別の説明をしたかどうかを見てみましょう。 – utengr

+0

サンプリングレートを1マイクロ秒から1000マイクロ秒に増やすと精度が向上することも正しいです。しかし、それを1000マイクロ秒以上に増やすと、それは下降し始める。その最適値のようです。私はちょうど恐れている、それはサンプリング間隔未満の実行時間で関数をキャッチしません。 – utengr

+0

編集した回答を確認してください。 – kws

関連する問題