svga / SVGAPlayer-iOS

Similar to Lottie. Render After Effects / Animate CC (Flash) animations natively on Android and iOS, Web. 使用 SVGAPlayer 在 Android、iOS、Web中播放 After Effects / Animate CC (Flash) 动画。
http://svga.io
Apache License 2.0
1.09k stars 305 forks source link

动效 GPU 占用持续过高 #87

Closed errnull closed 3 years ago

errnull commented 5 years ago

memory_clippath.svga.zip

这个动效主要是矢量蒙版效果,使用 iPhone6 iOS 10.3 测试, 播放的过程中发现 GPU 有 70% - 80% 的开销(有时会更高), 屏幕快照2019-09-16下午3 28 23

而 CPU 的开销非常低,只有 5% - 8%。 在工作分摊上不是很均匀。

gdhGaoFei commented 4 years ago

if ([SVGAVideoEntity isMP3Data:protoImages[key]]) { // mp3 [audiosData setObject:protoImages[key] forKey:key]; } else { UIImage *image = [[UIImage alloc] initWithData:protoImages[key] scale:2.0]; if (image != nil) { image = [image imageByResizeToSize:image.size]; [images setObject:image forKey:key]; } }

(UIImage )imageByResizeToSize:(CGSize)size { if (size.width <= 0 || size.height <= 0) return nil; UIGraphicsBeginImageContextWithOptions(size, NO, self.scale); [self drawInRect:CGRectMake(0, 0, size.width, size.height)]; UIImage image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } 调用这个imageByResizeToSize方法就能解决这个内存暴涨的问题。知道原因的话可以交流。

gongdeyin commented 3 years ago

@errnull 因为,模版layer会形成单独一层独立绘制,相当于以前绘制一帧的时间,现在必须进行2帧的绘制,时间是两倍的关系

FaceWaller commented 3 years ago

@gdhGaoFei 这个方法效果很明显,但不太明白原理