Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 07:31
    stackJolin opened #3158
  • Jan 21 11:54
    kinarobin closed #3151
  • Jan 21 09:03
    dreampiggy milestoned #3157
  • Jan 21 09:03
    dreampiggy demilestoned #3157
  • Jan 21 09:02
    dreampiggy milestoned #3157
  • Jan 21 09:02
    dreampiggy labeled #3157
  • Jan 21 09:02
    dreampiggy closed #3157
  • Jan 15 03:54
    kinarobin opened #3157
  • Jan 15 03:35
    kinarobin unlabeled #3156
  • Jan 15 03:34
    kinarobin labeled #3156
  • Jan 15 03:33
    kinarobin opened #3156
  • Jan 12 14:04
    khaledbohout2 opened #3155
  • Jan 12 06:44
    youngbokkim4469 opened #3154
  • Jan 11 05:38
    kinarobin closed #3149
  • Jan 10 02:36
    kinarobin deleted #3153
  • Jan 10 02:34
    kinarobin closed #3153
  • Jan 08 15:23
    kurdpes2021 opened #3153
  • Jan 07 16:04
    Patrick2W closed #3152
  • Jan 07 12:11
    Patrick2W opened #3152
  • Jan 07 03:21
    dreampiggy labeled #3151
DreamPiggy
@dreampiggy
frame cache是SDAnimatedImageView的一个属性,字典,当然销毁……
除非你在Decoder级别做了缓存,有一个叫做preloadAllFrames的options,看那个说明
额,5.7以后是SDAnimatedImagePlayer,其实代码就是移动过去的
Lee0820
@Lee0820
目前用SDAnimatedImageView加载gif,设置了maxBufferSize还是内存暴涨,我看SDAnimatedImageView delloc方法执行了,但是内存没释放 ~
DreamPiggy
@dreampiggy
那就说明这个内存不是帧缓存占据的内存
帧缓存是绑定到ImageView上的,不是SDAnimatedImage上,也不会存入SDImageCache,对吧
xiaoxiaoyingqian
@xiaoxiaoyingqian
9A95F0C8-E549-4561-9D45-F545DE013B3E.png
发现5.x版本一个崩溃,出现概率较高
DreamPiggy
@dreampiggy
按照模版发一下场景,iOS版本,Xcode版本,SDWebImage版本,机型,复现概率
看堆栈像是系统ImageIO库线程不安全?
xiaoxiaoyingqian
@xiaoxiaoyingqian

Issue Info

Info Value
Platform Name ios
Platform Version 13.1.3
SDWebImage Version e.g. 5.0.0 / 4.4.0
Integration Method cocoapods
Xcode Version Xcode 11.3.1
Repro rate unknown
Repro with our demo prj
Demo project link
我们最近准备从4.x切换到5.x,然后我这边直接真机联调截断就发现了3次左右这种情况,我怀疑是ImageIO库非线程安全的问题,但是好像查了下,这个api有说是线程安全的
DreamPiggy
@dreampiggy
具体SDWebImage的版本号
DreamPiggy
@dreampiggy
不清楚是不是有一些内部机制修改。这里的CGImageSourceCreateImageAtIndex,先手动会本地构造的NSMutableDictionary进行一次copy操作吧(之前测试是无所谓的)。
image.png
xiaoxiaoyingqian
@xiaoxiaoyingqian
5.8.3
DreamPiggy
@dreampiggy
你建立一个Issue吧,或者我拷贝过来
DreamPiggy
@dreampiggy
@xiaoxiaoyingqian Please have a try with v5.8.4 version.
xiaoxiaoyingqian
@xiaoxiaoyingqian
@dreampiggy 之前说的这个问题依旧存在,而且不少,我发现好像问题不出在decodingOptions,而出在source
60D4EAD0-17DD-4228-8B78-476E1904BCE8.png
xiaoxiaoyingqian
@xiaoxiaoyingqian
这两种崩溃日志都存在,我怀疑是gif在变换图片的过程中,一边在释放这个CFRelease(_imageSource),一边在使用,导致的两边都存在crash日志的发生
DreamPiggy
@dreampiggy
不会存在你所谓的“一边释放CGImageSource,一边在获取的场景”。这里加了锁
我怀疑是ImageIO自身的Bug,它实现的惰性解码不是多线程安全的。堆栈里面有一个CGImageProvider
即,主UI线程有一个图正在渲染到屏幕上,它的Bitmap来源于惰性解码的ImageIO,但是但是ImageIO已经销毁中
不对,好像没加锁。记成了SDWebimageWebPCoder了,那个自己用了semaphore锁了dealloc和animatedImageFrameAtIndex
DreamPiggy
@dreampiggy
要不提一个MR你测试一下,对所有涉及到ImageIO的读写都加锁?之前的假设是ImageIO是线程安全的,现在相当于打破这个假设
DreamPiggy
@dreampiggy
@xiaoxiaoyingqian 你尝试用一下这个分支:SDWebImage/SDWebImage#3100
复现概率高吗,尝试暴力堆大量动图
xiaoxiaoyingqian
@xiaoxiaoyingqian
不好复现,尝试堆大量动图,也没复现
DreamPiggy
@dreampiggy
@xiaoxiaoyingqian 你这是App线上遇到的Crash?本地有任何能复现的方式吗
要不这样子,你用Commit依赖,然后集成到你们App内,发一版本,测试7天OK后,SDWebIamge合入那个MR。这个MR主要我担心的点是,可能不能解决问题,反而由于加锁导致了同一时间只能有一个线程解码,会影响多ImageView共享同一个Image对象时候的帧率
如果你觉得这种case不是很影响的话,倒也可以直接合入。也就是假设ImageIO不再是线程安全来看待问题
xiaoxiaoyingqian
@xiaoxiaoyingqian
是我们线上bugly捕捉到的,之前和你提的那次是我本地xcode跑到的,这次我弄了一百多张每0.2切换图片都没能复现,一度我也怀疑自己的判断了,但从堆栈来看比较像这个问题
xiaoxiaoyingqian
@xiaoxiaoyingqian
多ImageView共享同一个Image对象,这种case应该很少。我主要担心的是加锁会不会导致一些低端机器在承载多图的时候,某张图某一帧出了问题比如解析阻塞,后续无限等待,直接出不来了
xiaoxiaoyingqian
@xiaoxiaoyingqian
还有其他风险点么,不行我可以考虑加个开关来控制这个锁的存在
DreamPiggy
@dreampiggy
你可以加线上开关。先尝试修复一下。这个修复肯定从理论上说会影响性能,毕竟原来可以做到多线程并发去decode,现在只有单线程,只可能会卡顿,不可能会OOM或者Crash
或者你自己fork一下试试改一下代码,测试一下,确认没问题再想办法处理
DreamPiggy
@dreampiggy
@xiaoxiaoyingqian 有进展可以同步给我 ……
xiaoxiaoyingqian
@xiaoxiaoyingqian
好,我们最近一个版本是本周五灰度
DreamPiggy
@dreampiggy
@xiaoxiaoyingqian 有进展吗
xiaoxiaoyingqian
@xiaoxiaoyingqian
今天上线Appstore第一天,估计还要两天才有结论,目前没有相关crash爆出
不好意思,之前表述不太明确,上周五是testflight公测
DreamPiggy
@dreampiggy
OK
xiaoxiaoyingqian
@xiaoxiaoyingqian
还是出现了crash
目前有两个用户发生
DreamPiggy
@dreampiggy
看Crash率对比,以及机型/OS覆盖率
xiaoxiaoyingqian
@xiaoxiaoyingqian
两个地方的crash所有的信息系统都是iOS13+包括14,机型没有特别集中
DreamPiggy
@dreampiggy
再观察一下吧。先发布5.9.4的小Patch,没有带上那个MR
SDWebImage 5.9.4 released. Which fix some bugs related to the disk cache and view transition. See more: https://github.com/SDWebImage/SDWebImage/releases/tag/5.9.4