Skip to content
This repository has been archived by the owner on Sep 12, 2023. It is now read-only.

Rewrite the GIF frame delay if it's below a threshold (coil-kt/coil#783) #672

Merged
merged 2 commits into from
Jan 14, 2023

Conversation

FooIbar
Copy link
Contributor

@FooIbar FooIbar commented Jan 14, 2023

Resolve #641

@asuka-mio
Copy link
Member

这么过一下io效率堪忧啊
建议还是正常图片还是保持mappedbytebuffer读取
gif单独出个路径处理

@FooIbar
Copy link
Contributor Author

FooIbar commented Jan 14, 2023

这么过一下io效率堪忧啊 建议还是正常图片还是保持mappedbytebuffer读取 gif单独出个路径处理

这样?

@asuka-mio asuka-mio merged commit 0ebb555 into Ehviewer-Overhauled:1.8.x.x Jan 14, 2023
@asuka-mio
Copy link
Member

asuka-mio commented Jan 16, 2023

最近刚有空去profile一下 先看下数据把
这是浏览普通图片的内存波动
图片
因为我lrucache设置的固定512m,所以你可以看到图形缓冲区涨到512m就保持平稳了
我这边用的mimalloc,所以本地内存是算到other里了,同样你可以看到java堆的起伏也是很正常的,然后给你看下播放gif的数据

@asuka-mio
Copy link
Member

asuka-mio commented Jan 16, 2023

图片

直接oom了

@asuka-mio
Copy link
Member

这是我把修复路径skip掉的 同样是gif的profile
图片

@asuka-mio
Copy link
Member

这边内存确实是没及时回收,因为lrucache算gif占用有些出入,我一会修复
但是java堆是正常的
你那个修复对gc的影响还是太大了,java堆都波动成啥样了
原因还是我之前说的,直接把本地内存全拷贝到java堆里了

@asuka-mio
Copy link
Member

先这样吧,等我把那个老lrucache扬了,然后用私有文件映射,这样对directbuffer的写入不会写回到文件,是CoW的(其实写回也没啥事
之后直接写份c的rewrite

@asuka-mio
Copy link
Member

asuka-mio commented Jan 16, 2023

刚拿华为平板看了下 闪退了直接 #680
直接看stacktrace是读取java堆数据时候获取不到Jni env,然后直接abort了
或许是华为这种低配设备对于从本地堆到java堆的大规模数据拷贝直接导致gc把jnienv对象gc掉了?还是在jni调用的时候根本没分配到?,不是很了解jni的实现
综上 打算先revert了

@asuka-mio
Copy link
Member

啊对 上面一大块other是这么回事 我解释下
我魔改的系统https://github.com/AcmeUI 用mimalloc替换了原生分配器,不过没实现信息收集,所以as看不出来本地内存占了多少 都算到other里了
还有就是我把mimalloc内存释放参数从MADV_DONTNEED换成了MADV_FREE 内存的释放是懒释放的 由内核控制 内存压力上来了才会释放
那块不是内存泄漏 你用正常的设备profile就是正常的
我那一段profile想表达的主要是java堆占用的问题

@asuka-mio
Copy link
Member

square/okio#1063
还是得自己写c实现 他们对这个不太支持

@asuka-mio
Copy link
Member

好了 groundwork搞定了
现在只要把重写gif拿c翻译下 在那片内存里覆写就好了

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

GIF播放速度错误
2 participants