Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Webview(chromium)无缘无故错过帧?_Android_Html_Android Webview - Fatal编程技术网

Android Webview(chromium)无缘无故错过帧?

Android Webview(chromium)无缘无故错过帧?,android,html,android-webview,Android,Html,Android Webview,我无法调试带有溢出的div上的性能问题:auto。正如你在下面的图片中所看到的(以及在下面的细目中所读到的),webview似乎因为没有提供帧而浪费了宝贵的时间 最奇怪的是,相同的内容在两台旧设备(Moto G和X 2013,棒棒糖5.1)上滚动得非常平稳,但在新设备(Moto X 2014(棉花糖6.0)和Pixel C(牛轧糖7.0))上却显示出明显的帧滴 在990和995ms之间,它会进行一些合成、光栅化和gpu的工作。然后它闲置15毫秒(几乎是一整帧),更新图层树,然后再等待18毫秒

我无法调试带有溢出的div上的性能问题:auto。正如你在下面的图片中所看到的(以及在下面的细目中所读到的),webview似乎因为没有提供帧而浪费了宝贵的时间

最奇怪的是,相同的内容在两台旧设备(Moto G和X 2013,棒棒糖5.1)上滚动得非常平稳,但在新设备(Moto X 2014(棉花糖6.0)和Pixel C(牛轧糖7.0))上却显示出明显的帧滴

在990和995ms之间,它会进行一些合成、光栅化和gpu的工作。然后它闲置15毫秒(几乎是一整帧),更新图层树,然后再等待18毫秒

因此,到目前为止,我们已经错过了~2帧,即使看起来它至少应该能够提供一帧

然后它触发一个scroll事件,并开始讨论与之相关的javascript。这需要5毫秒,现在它会进行一些绘制和合成,然后再等待10毫秒并更新图层树,然后再等待更长时间,最后交付990毫秒以来的第一个新帧

整个过程花费了66毫秒,但根据时间线,网络视图大部分时间都是坐在屁股上。这也不例外,我在整个卷轴记录过程中都看到了这种模式

当我看一看从Moto X 1st gen拍摄的时间轴时,它看起来像是网络视图浪费了更少的时间,并且尽可能多地传递帧。当然,它并不是一直都是60帧每秒,但在这一点上,我很高兴它是40帧而不是20帧甚至更低

这里显而易见的问题是“到底发生了什么?”——或者更准确地说:“为什么事情(读作:框架)没有发生?”

PS:我已经检查了Android系统的Webview版本,我测试的所有设备都安装了v52。我能想到的唯一一件事是,操作系统正在“导致”这种情况。棉花糖之后有什么变化吗

更新


我已经能够解决大部分延迟问题,方法是将大部分onscroll逻辑转发给requestAnimationFrame并隐藏屏幕外的内容(可见性:隐藏)。但这并不能真正解释为什么Chrome看起来只是跳过框架,而实际上它什么都没做。这似乎与滚动大面积相当复杂的内容有关,但我希望在时间线上以某种形式看到这一点。相反,它只显示阻止帧渲染的大空白。

Upvote以获得更高的可视性