我用四天时间改了一行代码

最近手头分来了一个bug,该bug很诡吊,一行代码的改动,花了四天时间,因为该Bug会block出货,项目经理每天催问进度,期间真是感觉整个人都不好了。本篇博文记录解决该问题的坎坷历程,因为代码保密原则,技术细节不便详细给出,重点记录解决问题的过程。

问题描述

MTK平台双摄拍完的景深图片在Gallery内,能进行refocus(重聚焦)操作,Camera近期新增拍摄4:3比例的图片,refocus时该种比例的图片显示会拉伸,为了解决该问题,我对refocus后的图片进行了一个resize操作。之后就报出对该种图片进行refocus操作,非常高的概率出现点击两次才能正确改变图片焦点的bug。16:9的图片则没有该Bug。现象如图-1.


图-1

而正常的现象应该点击哪里,哪里就清晰。如图-2.


图-2

解决过程

Day-1:自我怀疑

问题是在我的修改之后才引发的,因此这个漏洞还得我来补,回退掉resize的改动,该问题确实消失了,但图片会被拉伸的问题当然又会出来,看来我得找其他方法修正图片拉伸的问题,此时项目经理发出邮件,强调该问题会block产品出货,让尽快处理。顶着压力开始撸一遍代码,梳理了下Refocus的大体过程:



因为问题只出现在4:3比例的图片上,一开始就认为问题出在A过程中,猜测4:3比例的图片接收的touch坐标与图片上的坐标点没有正确对应。排查代码,发现底层算法逻辑是按16:9的图片比例处理景深数据,到此以为找到了root cause,连同图片会被拉伸的问题一并抛给平台,让他们去解。
因为是平台提供的算法问题,而算法核心逻辑平台是以库文件release出来,我们无法修改。问题也抛给了平台,我这边没有压力,只用等平台提供修复patch过来合并就可。然而等待一段时间后,平台给了反馈,我之前为解决图片拉伸引入的resize patch修改方案是可行的,他们修正拉伸问题的改法与我的一样,重点是加上resize的patch该问题在平台的Gallery上没法复现,这无疑将问题抛回给了我。压力指数立马暴增十几个点,如果平台没有问题,那就只可能是我在porting平台gallery的时候出错了。这里说明下项目采用的gallery并不是基于平台Gallery开发的,只是将平台gallery上的refocus相关代码porting进来。如果porting过来的代码产生bug。就有两种可能:

  • 平台gallery问题
  • porting过程中引入的问题

真出问题了,当然希望是第一类问题,这样最起码还能求助平台,如果是porting不当引发的问题,平台顶多协助分析下,还得自己去一点点嚼回头草,现在如果平台没能复现问题,那么整个压力就又跑到我这边来了。
于是赶紧更新平台的Gallery代码,安装后测试,我擦,明显能复现啊。这是怎么回事呢?又重新拿平台的gallery复测了几遍,确实平台gallery也有该问题。于是下班前再次把现象发邮件给平台,这时距离项目经理发出邮件已经过去了一天。

Day-1后记
不够自信,浪费了很多时间复测平台gallery的现象,由于平台反馈他们加入resize patch都没能复现问题,因此就怀疑自己向平台加入resize的patch不正确,检查了好几遍代码,在加上编译安装测试,浪费了时间。过度的细心,浪费时间,拖慢了进度。

Day-2:逃避

发送给平台的邮件得到回复,平台依然无法复现问题,问题陷入罗生门。我用平台的Gallery能复现问题,但平台却又无法复现。于是又梳理了几个可能导致结果不同的可疑点。

  • 复现问题的图片。因为refocus采用的图片依赖Camera拍摄,会不会平台复现问题时所用的图片和我们不一致导致的呢。邮件将我复现用的图片发送给平台方,得知依然无法复现。
  • 我加入的resize patch与平台不同。邮件将我的改动发送给平台方,经确认修改地方一致。
  • porting时出错。邮件将porting过来的refocus相关文件发送给平台方,帮忙确认porting是否有问题,经确认porting无误。
  • 邮件发送log给平台,请其尝试从log排查是否有问题。自己和平台都未看出问题。

问题至此感觉无法进展下去了,平台无法复现问题,也就没法给出解决方案。自己转向去解决其他bug。该问题处于搁置状态。这时距离项目经理发出邮件过去了两天。

Day-2后记
1.沟通不畅,当自己这边复测后现象与平台方不一致,应该及时沟通,这一点在Day-3中通过项目经理的推动才加紧了沟通步伐。
2.没有从正面解决问题。一直围绕问题周边在排查,本来期望这样能快速定位问题,但没能第一时间再次详细梳理代码逻辑。
3.惰性产生。头疼的bug没有一点头绪后,产生懈怠心理。搁置的问题永远是问题,出现了要正面解决。

Day-3:找到原因

项目经理开始不断催促问题进度。但自己仍旧没有头绪,压力指数再次攀升。项目经理催促直接电话跟平台沟通,要加强push平台。自己通过其他渠道拿到平台电话,直接电话沟通。果然电话沟通后很有收获,知道了一种debug方法,能查看点击后通过算法逻辑生成的新Bitmap,赶紧本地debug,这时发现算法逻辑的图片是正常的,也就是图-1中的A步骤执行完成后,结果是正确的,问题出在B步骤上。总算有了明确的分析方向。
A步骤完成后,refocusview将新生成的bitmap上图,跟平台方确认上图的逻辑调用是正确的。看着快要找到问题原因了,但还是进行不下去,相同的逻辑,运行的结果确不一样。诡吊的很。
在次从touch事件开始梳理代码,由于refocus的父类封装在库文件里,这也给排查代码逻辑带来了复杂性。硬着头皮分析出OnTouch主要做了两件事:

  1. mRefocusListener.setRefocusImage(mDownRX, mDownRY)。通过接口回调的方式将touch坐标回传给Activity,Activity利用点击坐标生成新的焦点图。
  2. requestRender()。方法实现无法看到,从名字猜测像是GLSurfaceView里调用它来渲染图片,重聚焦的过程伴随一个过度动画,有可能就是通过它不断渲染做出来的效果。
    心里大概对这个过程有个一个猜测图。



    继续与平台沟通,确认上述猜测正确。那这里就有个坑了,如果渲染动画结束后,生成的新图才被交给refocusview,那当然不会被更新上来。
    如果上面的流程正确,已经大概猜测到为何添加resize的patch后就会出现该Bug。但还是无法解释为何平台一次都没有复现该问题。
    突然想起来我们的手机是将大核关闭的,那么有可能机器性能不如平台方,导致生成新图的过程太长了。
    赶紧实验。用命令:

adb shell cat /proc/ppm/mode

查看到当前手机处于低功耗模式。



用命令:

echo Performance > /proc/ppm/mode

开启高性能模式。



在复测问题,神奇的事情发生了,bug没有了,完美!



这时距离项目经理发出邮件过去了三天。

Day-4:改了一行代码

已经找到问题原因。之前的疑惑也有了合理的解释。

  • 为何平台没有复现问题?平台设备没有关闭大核,生成新图的过程很快,动画结束之前,新图已经成功传给refocusview。
  • 为什么加入resize操作问题就报出来了?resize对新图进行了缩放,这个过程耗时,导致动画完成后,新图才传给refocusview。
  • 为什么是4:3比例的图片才有这个问题?4:3图片大,生成新图的过程相对其他图片耗时长。

那么有几个方面可以修复该问题。

  • 优化算法,缩短生成新图时间。这需要平台去改,难度大,推动也难。直接pass。
  • 更改refocusview刷新机制,就算动画结束前,新图没能生成,也应该提供二次刷新的机会。该改动较大,在出货阶段,万一引入新的bug,更头疼。但这应该是该问题最正确的解法。
  • 将gallery加入高性能白名单,需要Performance组协助配置。但因为这一个问题,将其配置进白名单,有点小提大作。
  • 动态配置CUP频率,在生成新图的过程中对CUP升频。
  • 偷机取巧,拉长动画时间。只需变更一个值,风险低。但没能从正面解决。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容