2016-05-11 8 views
0

トレースビューを使用して、いくつかの非同期イベントのパフォーマンスを測定したいと思います。非同期イベントは、以下のコードに似たコールバックで私に渡されます。すべての非同期イベントが「onStartEvent」コールで始まり、「onStopEvent」コールで終了しますandroid traceview非同期イベント

interface EventCallback { 

    void onStartEvent(String name); 

    void onStopEvent(String name); 
} 

イベントごとにトレースファイルを作成したいと思います。私のここでの読解(http://developer.android.com/tools/debugging/debugging-tracing.html#creatingtracefiles)から、呼び出しの順序付けは順序付けのような「スタック」で「構造化」されなければならないので、非同期イベントをトレースすることはできません。したがって、 "Debug.stopMethodTracing()"の呼び出しは、常に "Debug.startMethodTracing(" calc ");"への最新の呼び出しに適用されます。

したがって、次の順序でコールバックを受信した場合。

onStartEvent(A)

onStartEvent(B)

onStopEvent(A)

onStopEvent(B)

Debug.startMethodTracing(」と解釈されます

A ");

Debug.startMethodTracing( "B");

Debug.stopMethodTracing(); // "A"ではなく "B"に適用されます

Debug.stopMethodTracing(); // "B"ではなく "A"に適用されます

私は欲しいことをやろうとしていますか?つまり、非構造化された非同期イベントをトレースしますか?

答えて

1

traceviewが間違ったツールである可能性があります。本当にこのルートに行きたい場合は、「アクティブなイベント数」を維持し、イベントが処理されている間はトレースファイルを開いたままにしておくことができます。これにより、複数のイベントが同じトレースファイルに存在する可能性がありますが、VM内のメソッド呼び出しをトレースしているので、その周りに簡単な方法はありません。

イベントが異なるスレッドで発生した場合は、後処理ステップでイベントを切り離すことができます。これには、データを解析し、望ましくないレコードを取り除くために多少の努力が必要です。 (例えばthisまたはthisを参照してください)

あなたは実際に測定しようとしているとは言いません。たとえば、開始時刻と終了時刻だけを必要とする場合は、それらのログファイルを自分のログファイルに書き込んで、すべてのtraceviewの楽しみをスキップすることができます。

あなたが何をしているかによって、systraceの方が扱いが楽になるかもしれません。残念ながら、カスタムイベントクラス(Trace)は同期イベントAPIのみを公開します。非公開のインターフェイスにアクセスするためにリフレクションを使用しても構わない場合は、async eventsを生成することもできます。

+0

ありがとうございました。私はパフォーマンスをキャプチャすることに興味があります。私は、特定のイベントが他のイベントより長くかかることに気づいており、どれくらい時間がかかるのかだけでなく、問題の原因となっているものを把握したいと考えています。私はsystraceを試みましたが、トレースビューから必要な情報を私に与えるようには見えませんでした。 – Jon

+0

私は、すべてのイベントが同じ時間に行われることを期待していますが、何らかの理由で、一部のイベントにはかなりの時間がかかります。 "systrace"にトレースをロードしたとき、 "traceview"のようなプロファイリング情報が表示されませんでした。代わりに、私はそれぞれの「セクション」のタイムラインを描画し、どのようなシステムアクティビティが発生したかを表示します。 – Jon

+1

traceviewは、1つのアプリで各メソッドがどれくらい時間がかかるかを示します。 systraceは、どのスレッドがどのCPUコアでスケジュールされているかなど、システム全体で起こっていることをすべて表示します(例えば、http://bigflake.com/systrace/を参照)。 「長い」イベントと「短いイベント」をキャプチャした場合は、2つのイベントを比較して、遅いイベントが他のプロセスによって中断されたかどうか、または実行に長時間かかったかどうかを確認できます。プログラムのどの部分が常に使い果たされているのかを知りたいときにはtraceviewが使いやすくなりますが、systraceを使うとシステムをより深く見ることができます。 – fadden

関連する問題