一: android q的androbench数据库三项测试性能明显不如p,原因在于:

p版本的文件frameworks/base/core/res/res/values/config.xml里面配置项db_compatibility_wal_supported为true。

导致androbench open test数据库时,会在文件frameworks/base/core/java/android/database/sqlite/SQLiteConnection.java

函数setWalModeFromConfiguration内判断出useCompatibilityWal为true,  从而把该test数据库日志模式设置为normal mode。

q版本的文件frameworks/base/core/res/res/values/config.xml里面并无配置项db_compatibility_wal_supported。

androbench open test数据库时,在上面同样的函数setWalModeFromConfiguration里面

判断isCompatibilityWalEnabled为false时,从而把该test数据库日志模式设置为full mode.

androbench数据库测试是对上面的test 数据库进行增删改测试的,配置成full mode时,测试时产生的fsync调用次数会比normal mode下,多出

至少4-5倍。

所以q版本的androbench数据库测试比p版本的性能差。

二:对上面原因的进一步详细说明:

1:通过加log分析anrobench启动数据库测试时的工作过程,发现无论是q还是p版本,androbench 操作test数据库时,只会调用

setWalModeFromConfiguration一次(在open数据库阶段),而配置或者修改数据库的日志模式只会在该函数中进行。

2:androbench open test数据库时,

p版本:

会根据配置项db_compatibility_wal_supported为true,设置useCompatibilityWal为true,

从而最终把test数据库日志模式设置为normal mode。

q版本:

换成了根据判断SQLiteCompatibilityWalFlags.isLegacyCompatibilityWalEnabled,只有这个为true时,才能最终配置test数据库日志模式设置为normal mode。

但是SQLiteCompatibilityWalFlags只会在手机开机时,systemserver初始化阶段,被初始化一次,设置LegacyCompatibilityWal为false。

所以open test数据库时,SQLiteCompatibilityWalFlags.isLegacyCompatibilityWalEnabled为false,从而最终配置test数据库日志模式设置为full mode。

3:通过执行logcat | grep -i "PRAGMA synchronous=" 和 logcat | grep -i "setSyncMode"命令,观察10个app启动时的数据库配置行为,发现:

p版本上:

app启动时,所有的数据库都被配置成了normal mode.

q版本上:

app启动时,相当多的数据库被配置成了full mode.

4:通过生成bugroport的方式,观察手机里dump出来的各个运行app的数据库配置参数mConfiguration.{openFlags,useCompatibilityWal},发现:

p版本上:

mConfiguration.openFlags很多都设置了useCompatibilityWal位,mConfiguration.useCompatibilityWal全部为true.

q版本上:

mConfiguration.openFlags全部没有设置useCompatibilityWal位,mConfiguration.isLegacyCompatibilityWalEnabled全部为false.

通过上面3和4,说明q版本上不止androbench被配置成了full mode, 其他app的数据库也被配置成了full mode.

p版本上测试的app数据库都被配置成了normal mode.

三:q版本上androbench数据库测试性能差的修补措施有两个:

1:函数setSyncMode里面加判断,如果mConfiguration.path中包含有“androbench”字眼的话,设置数据库为normal mode.

这样强制设置androbench数据库为normal mode.

2:在手机开机systemserver初始化阶段,设置SQLiteCompatibilityWalFlags.LegacyCompatibilityWalEnabled为true,这样会导致不止androbench,

其他app的数据库,都会被统一配置成normal模式。

方法2需要再进一步调研下,确认q版本上是否需要和p版本上一样,设置所有app的数据库都为normal模式。这样做会不会有什么负作用。

方法1简单直接利于解决相关jira,且androbench只是用来跑IO测试用的app,配置成normal对其没啥影响。况且函数setSyncMode在运行的手机里面,并不为热点函数,调用次数并不频繁,里面加字符串匹配不影响性能。

四:最后结论

经过跟谷歌工程师提issue,咨询后,觉得为了稳定性考虑,还是Android q上保持目前的数据库去除wal compatibel的设计架构,不去修改为好。

跟谷歌的交流沟通详见下面链接:

https://partnerissuetracker.corp.google.com/issues/XXX

Android Q SQLite性能问题调研相关推荐

  1. 关于AndroBench在Android 10以后性能衰减的问题分析

    关于AndroBench在Android 10以后性能衰减的问题分析 背景 自Android 10发布以来,由于Google默认禁用了在Android P时引入的Compatibility WAL,加 ...

  2. 让最新的 Android Q Beta 3 强制重启的 Project Mainline,到底是什么?

    一. 序 最新的 Android 版本 Q,已经发布了 Android Q Beta 3,虽然没有正式发布,但是不少用户已经加入了测试计划,抢先体验 Android Q 的新功能. 近期不少体验用户反 ...

  3. opengles 3.0游戏开发_开发者们,快来测试Android Q啦!

    近日,谷歌正式推出Android Q Beta 1版本及预览版SDK,TestBird已部署到测试机型,开发者们可到TestBird测试平台测试. 此次Android Q 做了不少改进,不少尝鲜的用户 ...

  4. 首批 8 款 5G 手机获 3C 认证;iPhone6 系列停产;Android Q Beta 5 发布 | 极客头条

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  5. Android Q功能

    Finally, Android Q Beta 1 has been released and we are very eager to share what it has in store for ...

  6. Android Q 获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID)

    Android Q获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID) 一.简介 1.1 问题背景 1.2 关键技术 二.解决方案 2.1 谷歌官方推荐方案 (4种) 2.2 实现方 ...

  7. Flutter 120hz 高刷新率在 Android 和 iOS 上的调研总结

    Flutter 120hz 高刷新率在 Android 和 iOS 上的调研总结 一.无用的知识 首先科普无用的知识,说起高刷新率,就不得不提两个词汇 ProMotion 和 LTPO . ProMo ...

  8. 荣耀20android版本,荣耀法国:荣耀V20/20系列可正常升级Android Q

    IT之家6月27日消息 刚刚,荣耀法国官方推特发文称,HONOR View 20和HONOR 20系列(HONOR 20 Lite,HONOR 20和HONOR 20 Pro)可更新Android Q ...

  9. 国内首家!网易易盾加固第一时间适配Android Q Beta

    北京时间3月14日消息,谷歌在今天正式发布Android Q首个开发者预览版本,并对Pixel用户提供更新.而在发布后的第一时间,网易易盾加固已经完美适配. 由于兼容性以及对未来趋势的把握上做的非常到 ...

最新文章

  1. 某面试官面试一个百度T7程序员,出了一道这样的coding题!T7竟不会!被面试官嘲笑!...
  2. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法
  3. TFboy养成记 多层感知器 MLP
  4. linux磁盘结构需要清理,无法删除文件:“结构需要清洁”
  5. springboot-文件上传xls及POI操作Excel
  6. 传递参数命令——xargs
  7. 【草稿】windows + vscode 远程开发
  8. 搜狗浏览器收藏夹在哪_安卓Edge浏览器最新版42.0.2轻体验,整体优良但无特别惊喜...
  9. idea上一步下一步快捷键_领航者的一步,左右行业的下一步!双11海尔洗衣机再夺冠的思考...
  10. 专访雷水果国:离1.5K至18K 一个程序猿5每年的成长之路
  11. std::thread的常用参数传递总结
  12. 网页端哔哩哔哩4倍速播放视频
  13. 2019携程校招笔试
  14. 我的Python心路历程 第十期 (10.12 股票实战可视化之分位数)
  15. Mac使用技巧:怎样破解iPhone 锁屏密码
  16. linux系统宝塔安装nodejs,基于debian宝塔面板安装nodebb – 一款基于Node.js的论坛程序...
  17. 报错SyntaxError: Unexpected token T in JSON at position 0 at JSON.parse (<anonymous>)的解决方法
  18. 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...
  19. EasyCVR前端控制台打印报错“[Vue warn]:Invalid”的解决办法
  20. Android恢复出厂命令

热门文章

  1. Opencv3.2移植到arm板
  2. 20200524西瓜视频的视频下载打开的步骤(未完成)
  3. 学术研究入门,如何下载论文?
  4. 七大OSINT操作系统(开源网络情报)
  5. 8-2 sdust-Java-文件读取与统计【人工判编程题】 (30 分)
  6. FPGA|通过AS下载固化
  7. Android 10.0热点为Enhanced Open模式时不允许WiFI和热点同时开启代码流程梳理
  8. 信源编码作业【01】利用Audacity软件语音信号的频谱分析
  9. 信息孤岛影响_解读制造业信息化转型的11大关键点!
  10. windows代码设置默认音频输出设备