Sampling Profiler
该门户网站正在开发中。文档的完整版本请看这里.
集成依赖项到项目中
在您的 <project>/<app-module>/build.gradle
dependencies {
implementation "ru.ok.tracer:tracer-profiler-sampling:0.2.7"}
更多关于依赖项的详细说明,请参见"快速启动"页面。
SamplingProfilerConfiguration 描述
在您的 Application.kt
class MyApplication : Application(), HasTracerConfiguration {
override val tracerConfiguration: List<TracerConfiguration>
get() = listOf(
SamplingProfilerConfiguration.build {
// 您的选项
},
)
}
SamplingProfilerConfiguration.Builder 选项:
- setEnabled --- 启用/禁用性能分析。默认为启用状态。
SamplingProfilerConfiguration.Builder 的过时或危险选项:
-
setBufferSizeMb --- 请参阅 android.os.Debug.startMethodTracingSampling 的描述;
-
setSamplingIntervalUs --- 请参阅 android.os.Debug.startMethodTracingSampling的描述。默认值为5000;
-
setDurationMs --- 分析器的运行时间,以毫秒为单位;
-
addCondition --- 添加 Condition 以开始性能分析。
Condition 描述。Deprecated。
Condition 结构用于控制性能分析的启动和结果发送。使用示例:
Condition.appStart(10_000, 7_000)
以100%的概率在应用启动时启动分析器,并且如果应用启动时间超过7000毫秒,将其工作结果发送到服务器。
创建自定义事件:
val condition = Condition.build { // 您的选项 }
Condition.Builder 选项
-
setTag("my_tag") --- 将结果上传到 Tracer 的标签。
-
setTagLimit(n) --- 服务器每天接受该标签的最大报告数量。
-
setProbability(n) --- 发生 startEvent 事件时,启动分析器的概率(1/n)。
-
setStartEvent("my_event") --- 发生上述事件时,将启动分析器。
-
setInterestingEvent("my_other_event") --- 可选。如果存在,性能分析结果将仅在遇到此事件时发送到后端。
-
setInterestingDuration(n) --- 如果开始事件和感兴趣事件之间的时间超过此数值,性能分析结果将被发送到后端。
如果感兴趣的事件有自己的计数器,比较将与它进行。例如,app_freeze 有一个计数器 --- UI 线程挂起的时间。因此,如果 interestingEvent == "app_freeze" 并且 interestingDuration == 700,那么如果在分析器运行期间发生了超过 700 毫秒的冻结,则会发生发送。
手动性能分析
还可以在代码中标记性能分析的开始和结束。
SamplingProfiler.start() --- 启动分析器。接受参数:
-
context: Context --- 应用程序的 App context。
-
tag: String --- 结果将以此标签上传到追踪器。
-
duration: Long --- 分析器运行时间,以毫秒为单位。
SamplingProfiler.abort() --- 停止分析器并清除结果。
SamplingProfiler.commit() --- 停止分析器并将结果发送到后端。如果在调用时分析器尚未完成,那么最终标签将等于 <tag>_<tagSuffix>
- tagSuffix: String --- 可选。如果分析器提前停止,将添加到标签的后缀。
实例:
以1/100000的概率,分析器将开始其工作
if (Random.nextInt( 100 \_ 0 0 0 ) ==
0 ) {
SamplingProfiler.start(
context = appContext,
tag =
"stream_request" ,
duration = 10 _ 0 0 0 ,
)
}
// ... 代码。例如,加载信息流SamplingProfiler.commit( "loaded" )
"系统"事件描述
"系统"事件在 Condition 类和手动性能分析中使用:
-
TracerEvents.EVENT_APP_START_BEGIN --- "app_start_begin" --- 应用程序启动开始。
-
TracerEvents.EVENT_APP_START_END --- "app_start_end" --- Application.onCreate() 方法结束。
-
TracerEvents.EVENT_FIRST_ACTIVITY_CREATED --- "app_first_activity_created" --- 创建了第一个活动。
-
TracerEvents.EVENT_ACTIVITY_CREATED --- "activity_created" --- 任何活动进入 created 状态。
-
TracerEvents.EVENT_FREEZE --- "app_freeze" --- UI 线程挂起了 N 毫秒。如果该事件被用作 interesting event,那么 interesting duration 将与 N 进行比较。例如,如果 N == 500,那么如果在分析器运行期间 UI 线程挂起超过 500 毫秒,分析结果将被发送。
-
EVENT_ANR --- "app_anr" --- UI 线程挂起并未在分析器结束时恢复。从发现挂起到分析器结束,过去了 N 毫秒。如果该事件被用作 interesting event,那么 interesting duration 将与 N 进行比较。例如,如果 N == 5000,那么如果在分析器运行期间 UI 线程挂起超过 5000 毫秒,分析结果将被发送。
添加自定义事件:
TracerEvents.addEvent(eventName, duration)
-
eventName --- 事件名称。在 Condition 类的 startEvent 和 interestingEvent 方法中使用。
-
duration --- 与此事件相关联的时间。如果设置,interestingDuration 不是基于 startEvent 和 interestingEvent 之间的差异计算,而是与此事件的 duration 比较。