【问题标题】:What does VerifyClass inside Systrace mean?Systrace 中的 VerifyClass 是什么意思?
【发布时间】:2018-03-23 22:19:53
【问题描述】:

我正在查看我的应用程序生成的 systrace,我发现了一个耗时过长的帧。 这是由 RecyclerViewonCreateViewHolder 在放大我的项目视图时引起的。项目视图与ConstraintLayout 一样平坦。但是下面的 systrace 报告有很多 VerifyClass 块,每个块需要 17 毫秒。

VerifyClass 块是什么意思?

【问题讨论】:

  • 您看到的跟踪日志很可能来自 here,因此这是一个 ART 问题。您可能想尝试在 logcat 中查找与 dex/oat/art 相关的日志,以查看它是否指出了您可以修复的明显错误,但如果不是,则可能只是框架问题,您可以尝试在issue tracker

标签: android android-layout android-recyclerview layout-inflater systrace


【解决方案1】:

不是真正的C++/Android 运行时内部专家来清楚地解释在/art/runtime/class_linker.h 中定义并在/art/runtime/class_linker.cc 中实现的VerifyClass 方法的含义,但我不会太在意到它的 CPU 执行时间。

我要考虑的是您的 RecyclerView 项目包含 ConstraintLayout 并且其膨胀消耗了 CPU 时间。

关于尝试发布版本的建议,它不会有任何区别 - 对本机 VerifyClass 方法的调用将在调试和发布版本中完成。

【讨论】:

    【解决方案2】:

    很难说 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 创建期间导致显着的性能下降。 如果列表单元格的层次结构足够简单,我建议切换到一些香草布局并检查行为。

    【讨论】:

    • it still has much slower measuring and layout process than other Android Layouts 哪些布局(显然是 FrameLayout 除外)?我想看看这个声明所依据的一些数字。
    • @EugenPechanec 嵌套线性布局(可能带有权重)和非嵌套相对布局。这是基于我的基准,更重要的是,谷歌基准:github.com/googlesamples/android-constraint-layout-performance。但是,请注意,这个基准中的“传统”布局非常效率低下,并且有多个冗余和无用的 RelativeLayouts 人为地降低了性能。如果您使用嵌套的 LinearLayouts(即使使用权重)重写此布局,您将看到巨大的性能差异。
    • VerifyClass 是 android 平台的一部分,使用 C++。调试与发布版本无关紧要。
    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2011-04-18
    相关资源
    最近更新 更多