Android 代码插桩¶
有多种方法可以在 Android 上使用分析器。有一个“Java”分析器功能(通过 about:profiling),它可以启用 JVM 代码的分析。如果您正在分析 Android 设备,则预设很可能已将其打开。
除了采样之外,还可以创建标记来专门标记时间点或持续时间。这有助于理解前端的特定部分,或记录样本中通常不会显示的事件。
注意
本指南深入解释了 Android 标记。要详细了解如何在 C++、JavaScript 或 Rust 中添加标记,请分别查看其在 标记、JavaScript 代码插桩 或 Rust 代码插桩 中的文档。
GeckoView Java 代码库中的标记¶
如果您在 GeckoView 代码库中,则应该可以访问 GeckoRuntime
。 GeckoRuntime
有一个 getProfilerController
方法来获取 ProfilerController
。请参阅 ProfilerController Java 文件 (javadoc) 以查找可以用来为源代码添加插桩的方法。
以下是一个示例
// Simple marker
sGeckoRuntime.getProfilerController().addMarker("Marker Name");
// Simple marker with additional information
sGeckoRuntime.getProfilerController().addMarker("Marker Name", "info");
// Duration marker
Double startTime = sGeckoRuntime.getProfilerController().getProfilerTime();
// ...some code you want to measure...
sGeckoRuntime.getProfilerController().addMarker("Marker Name", startTime);
// Duration marker with additional information
sGeckoRuntime.getProfilerController().addMarker("Marker Name", startTime, "info");
您可以根据需要选择 addMarker
的各种重载。
如果您需要在将其添加到标记之前计算某些信息,建议使用 isProfilerActive if 检查来包装该代码,以确保它仅在分析器处于活动状态时才执行。以下是一个示例
ProfilerController profilerController = runtime.getProfilerController();
if (profilerController.isProfilerActive()) {
// Compute the information you want to include.
String info = ...
sGeckoRuntime.getProfilerController().addMarker("Marker Name", info);
}
Fenix 代码库中的标记¶
如果您在 Fenix 代码库中,则应该可以访问 Android 组件。Android 组件包括 此处提供的 Profiler 接口,以及其相应的 此处提供的实现。您应该能够使用 ProfilerController
执行所有操作。以下是如何调用它们的一个示例
// Simple marker
components.core.engine.profiler?.addMarker("Marker Name");
// Simple marker with additional information
components.core.engine.profiler?.addMarker("Marker Name", "info");
// Duration marker
val startTime = components.core.engine.profiler?.getProfilerTime()
// ...some code you want to measure...
components.core.engine.profiler?.addMarker("Marker Name", startTime, "additional info")
// Duration marker with additional information
components.core.engine.profiler?.addMarker("Marker Name", startTime, "info");
同样,您可以根据需要选择 addMarker
的各种重载。
与上面的 GeckoView 示例类似,如果您需要在将其添加到标记之前计算某些信息,建议使用 isProfilerActive if 检查来包装该代码,以确保它仅在分析器处于活动状态时才执行。以下是一个示例
if (components.core.engine.profiler?.isProfilerActive() == true) {
// Compute the information you want to include.
var info = ...
components.core.engine.profiler?.addMarker("Marker Name", info)
}