Steps to Reproduce
A small application to reproduce the bug(最小化可复现的demo)
这里我想测试一下flutter boost在native/flutter页面来回切换时的性能,于是我设计了这么一个场景,在demo里面轮流启动10次两种页面,并dump出内存信息,发现flutter boost的内存占用如下:
同时,我写了一个demo,也是轮流启动10次,内存占用如下:
考虑到我的demo是1.22版本的,于是为了控制变量,我把demo降级到了1.17版本,和boost一样,内存占用如下:
我的问题是boost的复用似乎让内存占用更大了,尤其是EGL mtrack这块,这样是否正常?
以下是我测试的核心脚本:
pname="com.taobao.idlefish.flutterboostexample"
adb shell am start -n $pname/$pname.MainActivity
for i in {1..10} ; do
sleep 3
echo "$i dump native"
adb shell dumpsys meminfo $pname
sleep 1
adb shell input tap 200 1450
sleep 3
echo "$i dump flutter"
adb shell dumpsys meminfo $pname
sleep 1
adb shell input tap 200 950
done
此外,我发现thrio这个库在同样的测试中内存增长非常缓慢,比较符合engine复用的预期:
不知道你们是否有做过这种测试,还是我的测试方法有不合理之处?
Flutter Boost Version
Target Platform:
Target OS version/browser:
Devices:
Logs
add your crash log or something else.
5条答案
按热度按时间b91juud31#
图片如果没有加载出来可以直接看以下几个链接:
flutter boost结果: http://images.vimerzhao.top/flutter_boost.png
不复用1.22版本: http://images.vimerzhao.top/official.png
不复用1.17版本: http://images.vimerzhao.top/official_1.17.png
thrio: http://images.vimerzhao.top/thrio.png
unhi4e5o2#
@vimerzhao 选择比较的点非常准,避开了连续打开多个 Flutter 页面 thrio 从原理层面带来的内存优势
vwkv1x7d3#
@vimerzhao 加一个case, 在2个版本(
flutter_boost
和thrio
)的demo中分别独立打开10个native页面dump内存作为基准。当前这种情况没有可比较性,需要避免native代码实现层面的差异
uqdfh47h4#
@vimerzhao 加一个case, 在2个版本(
flutter_boost
和thrio
)的demo中分别独立打开10个native页面dump内存作为基准。当前这种情况没有可比较性,需要避免native代码实现层面的差异
都是demo代码,native页面只有几个UI按钮,应该不会影响这个问题的本质。
ozxc1zmp5#
@vimerzhao 加一个case, 在2个版本(
flutter_boost
和thrio
)的demo中分别独立打开10个native页面dump内存作为基准。当前这种情况没有可比较性,需要避免native代码实现层面的差异
我测试了以下,实际上你说的这种情况,boost的内存占用更低
thrio还要高一点
但是轮流启动后,thrio波动明显更小
图片如果加载不出来,直接点链接
http://images.vimerzhao.top/boost_native.png
http://images.vimerzhao.top/thrio_native.png