Systrace中的VerifyClass是什么意思?

18
我正在查看由我的应用程序生成的 systrace ,并确定一个帧需要太长时间。 这是由于 RecyclerViewonCreateViewHolder 在充气我的项目视图时引起的。该项目视图尽可能平坦,使用了 ConstraintLayout。但是以下 systrace 报告有很多每个需要花费 17 毫秒的 VerifyClass 块。
那些 VerifyClass 块的含义是什么? enter image description here

1
你看到的跟踪日志很可能来自这里,所以这是一个ART问题。你可以尝试在logcat中查找与dex/oat/art相关的日志,看看是否指出了明显的错误可以修复,但如果没有,那么它可能只是一个框架问题,你可以尝试在问题跟踪器上报告一个bug。 - z153
2个回答

5

我不是一个精通于C++/Android Runtime internals的专家,无法清楚地解释/art/runtime/class_linker.h中定义并在/art/runtime/class_linker.cc中实现的VerifyClass方法的含义,但我不会过多关注它的CPU执行时间。

我会考虑你的RecyclerView项,其中包含ConstraintLayout,其膨胀会消耗CPU时间。

关于尝试发布版本的建议,这不会有任何区别 - 对本机VerifyClass方法的调用将为调试和发布版本都执行。


4

很难说VerifyClass到底做了什么,因为它不是Android Java SDK或ConstraintLayout的一部分。我找到的唯一提到它的地方是在SDK的C部分中:

http://www.androidpolice.com/android_aosp_changelogs/android-m-preview-2-to-android-7.0.0_r1-AOSP-changelog.html

但我有几个建议:

1)尝试以发布模式构建应用程序,并查看是否仍然存在FPS下降问题。我的假设是,对于调试构建,会执行此VerifyClass来基准测试某些内容,但这只是一个猜测。

2)虽然ConstraintLayout具有方便的API和扁平层次结构(这对绘图遍历产生积极影响),但其测量和布局过程仍然比其他Android布局慢得多。造成这种情况的原因是约束计算的复杂性。因此,在RecyclerView中使用它可能会在ViewHolder创建期间导致显著的性能损失。 如果列表单元格的层次结构足够简单,建议切换到一些普通的布局并检查其行为。


它的测量和布局过程仍然比其他 Android 布局要慢得多。除了 FrameLayout 之外,还有哪些布局呢?我想看看这个说法基于哪些数字。 - Eugen Pechanec
1
{btsdaf} - Dimezis
1
VerifyClass是Android平台的一部分,使用C++编写。调试版和发布版构建不会有影响。 - mhansen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接