android traceview异步事件



我想使用traceview来衡量几个异步事件的性能。异步事件在回调中传递给我,该回调看起来类似于下面的代码。

interface EventCallback {
    void onStartEvent(String name);
    void onStopEvent(String name);
}

其中每个异步事件将以"onStartEvent"调用开始,并以"onStopEvent"调用结束。

我想为每个事件创建跟踪文件。根据我在这里的阅读(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();//将适用于"B"而不是"A"

Debug.stopMethodTracing();//将适用于"A"而非"B"

使用traceview,是否可以执行我想要的操作?即跟踪"非结构化"异步事件?

traceview可能是错误的工具。如果你真的想走这条路,你可以保留一个"活动事件计数",只要有事件在处理,就可以打开跟踪文件。这可能会导致多个事件出现在同一个跟踪文件中,但您正在跟踪VM中的方法调用,因此没有简单的方法可以解决这一问题。

如果您的事件发生在不同的线程上,您可以通过后处理步骤将它们分离出来。这将需要一些努力来解析数据并去除不需要的记录。(例如,参见此或此。)

你并没有真正说出你想要衡量的东西。例如,如果你只想要开始/结束时间,你可以把它们写到自己的日志文件中,跳过所有traceview的乐趣。

根据你所追求的,systrace可能更容易使用。不幸的是,自定义事件类(Trace)只公开同步事件API——如果您不介意使用反射访问非公共接口,那么您也可以生成异步事件。

相关内容

  • 没有找到相关文章

最新更新