hlwhl / webview_cef

WebView for Flutter Desktop Apps using CEF(Chromium Embedded Framework) [Work in Progress]
Apache License 2.0
176 stars 52 forks source link

不断改变webview视图的大小后闪退 #136

Open JemmyWang94 opened 1 month ago

JemmyWang94 commented 1 month ago

写了一个拖动事件,在Container边缘加了panGesture,不断地拖动改变webview视图的大小(webview在指定大小的容器中),拖动多次后应用闪退。

JemmyWang94 commented 1 month ago

试了下使用https://pub.dev/packages/webview_windows没出现此问题

SinyimZhi commented 1 month ago

只有疯狂拖动时复现了,看了下堆栈crash在flutter_windows底层代码里,和Texture的渲染部分有关。大概率是因为从cef拿到渲染数据后交给flutter的texture做渲染这部分内存管理有问题。这个内存管理我们是交给flutter处理的,有一个渲染之后的buffer释放回调。 image 这块我们可能不太好处理,毕竟和webview_windows的技术路线不一样,我们是内嵌页面到窗口部分,窗口是由flutter engine去处理的,而不是提供一个独立的浏览器窗口。

JemmyWang94 commented 1 month ago

好吧,谢谢,有时候也不用疯狂拖动,跑你的demo试了下。有时候轻轻拖几下就给闪退了。有拖动功能问题的话确实不好整。

SinyimZhi commented 1 month ago

轻轻拖几下就闪退我没复现,方便提供下flutter版本和操作系统版本吗?

JemmyWang94 commented 1 month ago

flutter 3.24.0. Windows 10 专业版 系统内部版本 19045.4651

JemmyWang94 commented 1 month ago

https://github.com/user-attachments/assets/03a8d275-7805-4495-b9fe-822911c3396d

刚切换flutter 3.22.3也试了,结果这次拖一次就卡死然后闪退了

SinyimZhi commented 1 month ago

做这个的时候是基于3.16版本做的,去年年底的大版本更新windows引擎就有很大的变动,看来需要花点时间做新版本适配了...

JemmyWang94 commented 1 month ago

我想再请教个问题,就是不断拖动的时候为什么里面的页面会像弹簧一样改变大小然后复原。webview_windows也是如此。但在浏览器里面放大缩小就是保持固定的。

SinyimZhi commented 1 month ago

我怀疑可能时窗口大小在dart侧和c++侧的精度不同导致的,具体的还没验证过。至于webview_windows我没有用过就不太清楚了。

hlwhl commented 1 month ago

我想再请教个问题,就是不断拖动的时候为什么里面的页面会像弹簧一样改变大小然后复原。webview_windows也是如此。但在浏览器里面放大缩小就是保持固定的。

因为webview画面大小是flutter侧传给native的,在拖动时仍然会不停的告诉native webview页面大小改变。浏览器应该是对dragging状态做了处理,dragging事件整体结束后结束后再通知renderer改变渲染大小。chromium在windows上快速拖动时也会有网页渲染画面与窗口尺寸不匹配的情况

JemmyWang94 commented 1 month ago

想问下,这个闪退问题有在看吗,想用你们的组件,但有这个问题的话又用不了

SinyimZhi commented 1 month ago

我近期会抽时间看下

SinyimZhi commented 3 weeks ago

我在flutter 3.24.2无法复现这个问题了,Windows 11 22631.4037.

https://github.com/user-attachments/assets/304b2fd6-a8f3-4c3c-b8bc-9c2bfa1a29e0

JemmyWang94 commented 3 weeks ago

Flutter3.24.2的更新好像只是为了解决https://github.com/flutter/flutter/issues/116493 。我试了下还是会触发的。 https://github.com/user-attachments/assets/748c5cf0-abd6-43d8-9a22-3d01b7b199d1