ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Flutter 混合组合平台视图滚动性能基准测试:platform_views_layout_hybrid_composition 实战指南

Flutter 混合组合平台视图滚动性能基准测试:platform_views_layout_hybrid_composition 实战指南 Flutter 混合组合平台视图滚动性能基准测试platform_views_layout_hybrid_composition 实战指南【免费下载链接】flutterFlutter makes it easy and fast to build beautiful apps for mobile and beyond项目地址: https://gitcode.com/GitHub_Trending/flutter41/flutter本文围绕 Flutter 仓库中的dev/benchmarks/platform_views_layout_hybrid_composition基准工程完整讲解两类设备端性能测量流程使用flutter drive --profile运行平台视图列表滚动基准以及在真机/模拟器上测量应用启动时间。读完后你将掌握该基准工程的运行方式、输出文件位置与命名约定、驱动测试的滚动剧本与降噪技巧并能从源码层面理解“混合组合”hybrid composition模式下 AndroidViewSurface 的创建链路和 devicelab CI 任务如何复用同一套基准。基准工程是什么混合组合模式下的平台视图滚动负载该工程位于 dev/benchmarks/platform_views_layout_hybrid_composition其 pubspec.yaml 中的描述点明了定位A benchmark for platform views, using hybrid composition on android.也就是说它专门测量在 Android 混合组合hybrid composition / PlatformViewLink模式下嵌入原生视图时的滚动性能。与同级的platform_views_layout虚拟纹理模式基准不同这里每个列表项都会把真实原生视图叠加到 Flutter 合成器之上滚动压力来自原生视图的布局、绘制与 Flutter 层的交互叠加。从 lib/main.dart 的源码结构看负载由三部分组成一个 200 项的ListView.builder其滚动列表挂载在Key(platform-views-scroll)上这个 key 是驱动测试定位滚动容器的锚点每个列表项内嵌一个DummyPlatformView300×200 的原生视图占位iOS 走UiKitViewAndroid 走本工程自定义的AndroidPlatformView每个列表项还有一个RotationContainer即一个持续旋转的RotationTransition动画_rotationController.repeat()保证滚动期间 GPU 与渲染管线始终处于活跃状态模拟真实应用中“边滚动边动画”的复合负载。Android 侧的AndroidPlatformView实现见 lib/android_platform_view.dart它通过PlatformViewLink组合AndroidViewSurface命中测试策略为PlatformViewHitTestBehavior.opaque并在onCreatePlatformView回调里调用PlatformViewsService.initExpensiveAndroidView创建原生视图。这正是“混合组合”路径的典型写法——原生视图作为独立 surface 合成而不是纹理上传也是该基准与platform_views_layout虚拟纹理基准的核心区别。滚动基准命令、结果文件与命名约定README 给出的标准运行方式是在工程目录下对设备执行flutter drive --profile test_driver/scroll_perf.dart其中--profile保证以 profile 模式AOT 编译、关闭断言运行被测应用这是性能测量的前提test_driver/scroll_perf.dart是被测应用入口需启用enableFlutterDriverExtension()见 test_driver/android_view_scroll_perf.dart实际滚动剧本由 test_driver/scroll_perf_test.dart 执行通过driver.connect()与设备端通信。README 同时约定了两个结果文件的落盘位置文件内容build/platform_views_scroll_perf_hybrid_composition.timeline_summary.json汇总后的帧时间线帧耗时、jank 等聚合指标build/platform_views_scroll_perf_hybrid_composition.timeline.json完整详细时间线用于逐帧深挖文件名的由来可以在驱动测试源码中一一印证testScrollPerf里用driver.traceAction包裹滚动动作采集Timeline再经TimelineSummary.summarize(timeline)汇总并调用summary.writeTimelineToFile(summaryName, pretty: true)写出其中summaryName正是platform_views_scroll_perf_hybrid_composition。驱动测试的滚动剧本与降噪设计scroll_perf_test.dart的测量剧本值得细读其中几个细节直接决定数据质量250ms 初始延迟注释说明这是为了避免在设备负载高峰期如应用刚启动的后台活动开始计时否则基准噪声更大关联 issue #19434driver.forceGC()在计时前强制一次 GC排除 GC 停顿对帧时间的干扰滚动动作向下连续滚动 5 次每次driver.scroll(list, 0.0, -300.0, Duration(milliseconds: 300))即 300ms 内位移 300 像素动作之间间隔 500ms 冷却随后再向上对称滚动 5 次覆盖两个方向的布局/绘制路径禁用帧同步外层driver.runUnsynchronized包裹了整个测试。原因是列表里存在持续旋转动画来自main.dart的RotationContainer若按帧同步驱动会一直等待动画收敛而无法完成同步因此必须改为非同步模式测试超时设为Timeout.none因为真机上整套滚动流程耗时较长。此外按平台区分的驱动入口test_driver/android_view_scroll_perf.dart与test_driver/uikit_view_scroll_perf.dart内容一致都是enableFlutterDriverExtension() 运行PlatformViewApp分别作为 Android 与 iOS 平台下flutter drive的应用端入口。启动时间基准--trace-startup 与 start_up_info.jsonREADME 的第二部分给出了启动耗时测量方式flutter run --profile --trace-startup说明--profile同样是 profile 模式前提--trace-startup让引擎在启动阶段写入跟踪信息启动阶段的关键时间点会打印到**运行日志logs**中更结构化的附加结果写入build/start_up_info.json便于脚本化解析各启动阶段耗时。适用前提是已连接真机或模拟器flutter run需要目标设备且该工程需完成对应平台目录android/与ios/均已提供含DummyPlatformView的原生实现如 android/app/.../DummyPlatformViewFactory.java 与 ios/Runner/DummyPlatformView.m的构建。devicelab CI 中如何复用该基准该基准并非只能手动执行。从 devicelab 任务定义 dev/devicelab/lib/tasks/perf_tests.dart 可以看到CI 的createAndroidViewScrollPerfTest任务直接复用了同一工程与同一组文件TaskFunction createAndroidViewScrollPerfTest() { return PerfTest( ${flutterDirectory.path}/dev/benchmarks/platform_views_layout_hybrid_composition, test_driver/android_view_scroll_perf.dart, platform_views_scroll_perf_hybrid_composition, testDriver: test_driver/scroll_perf_test.dart, enableMergedPlatformThread: true, ).run; }三个字符串参数与手动流程一一对应应用入口test_driver/android_view_scroll_perf.dart、结果汇总名platform_views_scroll_perf_hybrid_composition即timeline_summary.json的前缀、驱动脚本test_driver/scroll_perf_test.dart。另外enableMergedPlatformThread: true表明 CI 在运行该基准时启用了合并平台线程开关属于 CI 特定的运行时配置手动复跑时可留意这一差异。复跑与结果解读要点综合 README 约定与源码完整复跑流程可归纳为进入 dev/benchmarks/platform_views_layout_hybrid_composition 目录连接 Android 或 iOS 设备执行flutter drive --profile test_driver/scroll_perf.dartAndroid 侧驱动入口亦可对照 CI 使用test_driver/android_view_scroll_perf.dart打开build/platform_views_scroll_perf_hybrid_composition.timeline_summary.json查看帧耗时汇总重点看 janky frames 比例、P100/平均帧耗时逐帧分析则使用同名.timeline.json需要启动数据时另跑flutter run --profile --trace-startup从日志与build/start_up_info.json读取启动阶段耗时。需要注意的限制该基准只覆盖 Android 混合组合与 iOS UIKit 两种平台路径main.dart中其他平台会触发assert(false, Invalid platform)结果会受设备型号、系统负载与是否启用合并平台线程等配置影响横向对比时应保持配置一致。【免费下载链接】flutterFlutter makes it easy and fast to build beautiful apps for mobile and beyond项目地址: https://gitcode.com/GitHub_Trending/flutter41/flutter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表