收藏
回答

频繁canvasPutImageData是否导致内存溢出?

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug wx.canvasPutImageData 客户端 7.0.4 2.7.0

- 当前 Bug 的表现(可附上截图)


因为2.7.0版本出了个新的API,CameraFrameListener,我这里是准备实时将画面帧进行像素处理后用canvasPutImageData实时绘制到canvas画布上,大概启动几秒后摄像头画面和canvas开始慢慢卡顿,直到后面卡到几乎无法使用,微信会重启,应该是内存溢出了,通过内存面板看内存飙到接近500M但是CPU为0%,也写了flag让canvasPutImageData绘制完成后再进行下一帧绘制。依然很卡

但是假如在canvasPutImageData绘制之前或之后使用canvas的draw函数就不会出现卡顿,非常流畅。很诡异。莫非canvasPutImageData是一直在叠加数据么。

还有另一个关于CameraFrameListener真机调试会闪退的问题:https://developers.weixin.qq.com/community/develop/doc/0004ee64084ef0d1099875c8257000


- 预期表现

不卡顿,流畅处理


- 复现路径

频繁调用canvasPutImageData即出现


- 提供一个最简复现 Demo

https://developers.weixin.qq.com/s/SSIZPpmh7L8J


回答关注问题邀请回答
收藏

3 个回答

  • 小程序技术专员-Eric
    小程序技术专员-Eric
    置顶回答2019-05-17

    因为 CameraFrameListener 返回的 frame 数据量很大且很频繁,目前 canvas 处理大量数据性能不佳。建议使用的 webgl 来处理帧数据。

    2019-05-17
    赞同
    回复 2
    • 小程序技术专员-Eric
      小程序技术专员-Eric
      2019-05-17

      我们也在优化 canvas 2d 的性能,现阶段暂时只能用 WebGL 来渲染相机数据。

      2019-05-17
      回复
    • Vinlic
      Vinlic
      2019-05-17回复小程序技术专员-Eric

      好的,谢谢

      2019-05-17
      回复
  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    2019-05-17

    使用代码片段怎么复现这个问题呢?具体的机型、系统版本号、微信版本号是?

    2019-05-17
    赞同
    回复 1
    • Vinlic
      Vinlic
      2019-05-17

      预览即可,等摄像画面出来后,canvas也会绘制摄像的画面,等待几秒后开始慢慢的变得卡顿,等十几秒后就差不多卡的用不了了 机型小米mix2s,系统Android9,微信7.0.4

      2019-05-17
      回复
  • Z
    Z
    2019-11-01

    请问webGL怎么渲染相机数据?

    2019-11-01
    赞同
    回复
登录 后发表内容