我用四天時(shí)間改了一行代碼

最近手頭分來(lái)了一個(gè)bug笆凌,該bug很詭吊,一行代碼的改動(dòng)士葫,花了四天時(shí)間乞而,因?yàn)樵揃ug會(huì)block出貨,項(xiàng)目經(jīng)理每天催問(wèn)進(jìn)度慢显,期間真是感覺(jué)整個(gè)人都不好了爪模。本篇博文記錄解決該問(wèn)題的坎坷歷程,因?yàn)榇a保密原則荚藻,技術(shù)細(xì)節(jié)不便詳細(xì)給出屋灌,重點(diǎn)記錄解決問(wèn)題的過(guò)程。

問(wèn)題描述

MTK平臺(tái)雙攝拍完的景深圖片在Gallery內(nèi)应狱,能進(jìn)行refocus(重聚焦)操作共郭,Camera近期新增拍攝4:3比例的圖片,refocus時(shí)該種比例的圖片顯示會(huì)拉伸,為了解決該問(wèn)題除嘹,我對(duì)refocus后的圖片進(jìn)行了一個(gè)resize操作写半。之后就報(bào)出對(duì)該種圖片進(jìn)行refocus操作,非常高的概率出現(xiàn)點(diǎn)擊兩次才能正確改變圖片焦點(diǎn)的bug尉咕。16:9的圖片則沒(méi)有該Bug〉現(xiàn)象如圖-1.


圖-1

而正常的現(xiàn)象應(yīng)該點(diǎn)擊哪里,哪里就清晰年缎。如圖-2.


圖-2

解決過(guò)程

Day-1:自我懷疑

問(wèn)題是在我的修改之后才引發(fā)的悔捶,因此這個(gè)漏洞還得我來(lái)補(bǔ),回退掉resize的改動(dòng)单芜,該問(wèn)題確實(shí)消失了蜕该,但圖片會(huì)被拉伸的問(wèn)題當(dāng)然又會(huì)出來(lái),看來(lái)我得找其他方法修正圖片拉伸的問(wèn)題洲鸠,此時(shí)項(xiàng)目經(jīng)理發(fā)出郵件堂淡,強(qiáng)調(diào)該問(wèn)題會(huì)block產(chǎn)品出貨,讓盡快處理坛怪。頂著壓力開(kāi)始擼一遍代碼淤齐,梳理了下Refocus的大體過(guò)程:



因?yàn)閱?wèn)題只出現(xiàn)在4:3比例的圖片上股囊,一開(kāi)始就認(rèn)為問(wèn)題出在A過(guò)程中袜匿,猜測(cè)4:3比例的圖片接收的touch坐標(biāo)與圖片上的坐標(biāo)點(diǎn)沒(méi)有正確對(duì)應(yīng)。排查代碼稚疹,發(fā)現(xiàn)底層算法邏輯是按16:9的圖片比例處理景深數(shù)據(jù),到此以為找到了root cause,連同圖片會(huì)被拉伸的問(wèn)題一并拋給平臺(tái)居灯,讓他們?nèi)ソ狻?br> 因?yàn)槭瞧脚_(tái)提供的算法問(wèn)題,而算法核心邏輯平臺(tái)是以庫(kù)文件release出來(lái)内狗,我們無(wú)法修改怪嫌。問(wèn)題也拋給了平臺(tái),我這邊沒(méi)有壓力柳沙,只用等平臺(tái)提供修復(fù)patch過(guò)來(lái)合并就可岩灭。然而等待一段時(shí)間后,平臺(tái)給了反饋赂鲤,我之前為解決圖片拉伸引入的resize patch修改方案是可行的噪径,他們修正拉伸問(wèn)題的改法與我的一樣,重點(diǎn)是加上resize的patch該問(wèn)題在平臺(tái)的Gallery上沒(méi)法復(fù)現(xiàn)数初,這無(wú)疑將問(wèn)題拋回給了我找爱。壓力指數(shù)立馬暴增十幾個(gè)點(diǎn),如果平臺(tái)沒(méi)有問(wèn)題泡孩,那就只可能是我在porting平臺(tái)gallery的時(shí)候出錯(cuò)了车摄。這里說(shuō)明下項(xiàng)目采用的gallery并不是基于平臺(tái)Gallery開(kāi)發(fā)的,只是將平臺(tái)gallery上的refocus相關(guān)代碼porting進(jìn)來(lái)。如果porting過(guò)來(lái)的代碼產(chǎn)生bug吮播。就有兩種可能:

  • 平臺(tái)gallery問(wèn)題
  • porting過(guò)程中引入的問(wèn)題

真出問(wèn)題了变屁,當(dāng)然希望是第一類(lèi)問(wèn)題,這樣最起碼還能求助平臺(tái)薄料,如果是porting不當(dāng)引發(fā)的問(wèn)題敞贡,平臺(tái)頂多協(xié)助分析下,還得自己去一點(diǎn)點(diǎn)嚼回頭草摄职,現(xiàn)在如果平臺(tái)沒(méi)能復(fù)現(xiàn)問(wèn)題誊役,那么整個(gè)壓力就又跑到我這邊來(lái)了。
于是趕緊更新平臺(tái)的Gallery代碼谷市,安裝后測(cè)試蛔垢,我擦,明顯能復(fù)現(xiàn)啊迫悠。這是怎么回事呢鹏漆?又重新拿平臺(tái)的gallery復(fù)測(cè)了幾遍,確實(shí)平臺(tái)gallery也有該問(wèn)題创泄。于是下班前再次把現(xiàn)象發(fā)郵件給平臺(tái)艺玲,這時(shí)距離項(xiàng)目經(jīng)理發(fā)出郵件已經(jīng)過(guò)去了一天。

Day-1后記
不夠自信鞠抑,浪費(fèi)了很多時(shí)間復(fù)測(cè)平臺(tái)gallery的現(xiàn)象饭聚,由于平臺(tái)反饋他們加入resize patch都沒(méi)能復(fù)現(xiàn)問(wèn)題,因此就懷疑自己向平臺(tái)加入resize的patch不正確搁拙,檢查了好幾遍代碼秒梳,在加上編譯安裝測(cè)試,浪費(fèi)了時(shí)間箕速。過(guò)度的細(xì)心酪碘,浪費(fèi)時(shí)間,拖慢了進(jìn)度盐茎。

Day-2:逃避

發(fā)送給平臺(tái)的郵件得到回復(fù)兴垦,平臺(tái)依然無(wú)法復(fù)現(xiàn)問(wèn)題,問(wèn)題陷入羅生門(mén)字柠。我用平臺(tái)的Gallery能復(fù)現(xiàn)問(wèn)題探越,但平臺(tái)卻又無(wú)法復(fù)現(xiàn)。于是又梳理了幾個(gè)可能導(dǎo)致結(jié)果不同的可疑點(diǎn)募谎。

  • 復(fù)現(xiàn)問(wèn)題的圖片扶关。因?yàn)閞efocus采用的圖片依賴Camera拍攝,會(huì)不會(huì)平臺(tái)復(fù)現(xiàn)問(wèn)題時(shí)所用的圖片和我們不一致導(dǎo)致的呢数冬。郵件將我復(fù)現(xiàn)用的圖片發(fā)送給平臺(tái)方节槐,得知依然無(wú)法復(fù)現(xiàn)搀庶。
  • 我加入的resize patch與平臺(tái)不同。郵件將我的改動(dòng)發(fā)送給平臺(tái)方铜异,經(jīng)確認(rèn)修改地方一致哥倔。
  • porting時(shí)出錯(cuò)。郵件將porting過(guò)來(lái)的refocus相關(guān)文件發(fā)送給平臺(tái)方揍庄,幫忙確認(rèn)porting是否有問(wèn)題咆蒿,經(jīng)確認(rèn)porting無(wú)誤。
  • 郵件發(fā)送log給平臺(tái)蚂子,請(qǐng)其嘗試從log排查是否有問(wèn)題沃测。自己和平臺(tái)都未看出問(wèn)題。

問(wèn)題至此感覺(jué)無(wú)法進(jìn)展下去了食茎,平臺(tái)無(wú)法復(fù)現(xiàn)問(wèn)題蒂破,也就沒(méi)法給出解決方案。自己轉(zhuǎn)向去解決其他bug别渔。該問(wèn)題處于擱置狀態(tài)附迷。這時(shí)距離項(xiàng)目經(jīng)理發(fā)出郵件過(guò)去了兩天。

Day-2后記
1.溝通不暢哎媚,當(dāng)自己這邊復(fù)測(cè)后現(xiàn)象與平臺(tái)方不一致喇伯,應(yīng)該及時(shí)溝通,這一點(diǎn)在Day-3中通過(guò)項(xiàng)目經(jīng)理的推動(dòng)才加緊了溝通步伐拨与。
2.沒(méi)有從正面解決問(wèn)題稻据。一直圍繞問(wèn)題周邊在排查,本來(lái)期望這樣能快速定位問(wèn)題截珍,但沒(méi)能第一時(shí)間再次詳細(xì)梳理代碼邏輯攀甚。
3.惰性產(chǎn)生箩朴。頭疼的bug沒(méi)有一點(diǎn)頭緒后岗喉,產(chǎn)生懈怠心理。擱置的問(wèn)題永遠(yuǎn)是問(wèn)題炸庞,出現(xiàn)了要正面解決钱床。

Day-3:找到原因

項(xiàng)目經(jīng)理開(kāi)始不斷催促問(wèn)題進(jìn)度。但自己仍舊沒(méi)有頭緒埠居,壓力指數(shù)再次攀升查牌。項(xiàng)目經(jīng)理催促直接電話跟平臺(tái)溝通,要加強(qiáng)push平臺(tái)滥壕。自己通過(guò)其他渠道拿到平臺(tái)電話纸颜,直接電話溝通。果然電話溝通后很有收獲绎橘,知道了一種debug方法胁孙,能查看點(diǎn)擊后通過(guò)算法邏輯生成的新Bitmap,趕緊本地debug唠倦,這時(shí)發(fā)現(xiàn)算法邏輯的圖片是正常的,也就是圖-1中的A步驟執(zhí)行完成后涮较,結(jié)果是正確的稠鼻,問(wèn)題出在B步驟上】衿保總算有了明確的分析方向候齿。
A步驟完成后,refocusview將新生成的bitmap上圖闺属,跟平臺(tái)方確認(rèn)上圖的邏輯調(diào)用是正確的慌盯。看著快要找到問(wèn)題原因了掂器,但還是進(jìn)行不下去润匙,相同的邏輯,運(yùn)行的結(jié)果確不一樣唉匾。詭吊的很孕讳。
在次從touch事件開(kāi)始梳理代碼,由于refocus的父類(lèi)封裝在庫(kù)文件里巍膘,這也給排查代碼邏輯帶來(lái)了復(fù)雜性厂财。硬著頭皮分析出OnTouch主要做了兩件事:

  1. mRefocusListener.setRefocusImage(mDownRX, mDownRY)。通過(guò)接口回調(diào)的方式將touch坐標(biāo)回傳給Activity峡懈,Activity利用點(diǎn)擊坐標(biāo)生成新的焦點(diǎn)圖璃饱。
  2. requestRender()。方法實(shí)現(xiàn)無(wú)法看到肪康,從名字猜測(cè)像是GLSurfaceView里調(diào)用它來(lái)渲染圖片荚恶,重聚焦的過(guò)程伴隨一個(gè)過(guò)度動(dòng)畫(huà),有可能就是通過(guò)它不斷渲染做出來(lái)的效果磷支。
    心里大概對(duì)這個(gè)過(guò)程有個(gè)一個(gè)猜測(cè)圖谒撼。



    繼續(xù)與平臺(tái)溝通,確認(rèn)上述猜測(cè)正確雾狈。那這里就有個(gè)坑了廓潜,如果渲染動(dòng)畫(huà)結(jié)束后,生成的新圖才被交給refocusview善榛,那當(dāng)然不會(huì)被更新上來(lái)辩蛋。
    如果上面的流程正確,已經(jīng)大概猜測(cè)到為何添加resize的patch后就會(huì)出現(xiàn)該Bug移盆。但還是無(wú)法解釋為何平臺(tái)一次都沒(méi)有復(fù)現(xiàn)該問(wèn)題悼院。
    突然想起來(lái)我們的手機(jī)是將大核關(guān)閉的,那么有可能機(jī)器性能不如平臺(tái)方咒循,導(dǎo)致生成新圖的過(guò)程太長(zhǎng)了据途。
    趕緊實(shí)驗(yàn)钮呀。用命令:

adb shell cat /proc/ppm/mode

查看到當(dāng)前手機(jī)處于低功耗模式。



用命令:

echo Performance > /proc/ppm/mode

開(kāi)啟高性能模式昨凡。



在復(fù)測(cè)問(wèn)題爽醋,神奇的事情發(fā)生了,bug沒(méi)有了便脊,完美蚂四!



這時(shí)距離項(xiàng)目經(jīng)理發(fā)出郵件過(guò)去了三天。

Day-4:改了一行代碼

已經(jīng)找到問(wèn)題原因哪痰。之前的疑惑也有了合理的解釋遂赠。

  • 為何平臺(tái)沒(méi)有復(fù)現(xiàn)問(wèn)題?平臺(tái)設(shè)備沒(méi)有關(guān)閉大核晌杰,生成新圖的過(guò)程很快跷睦,動(dòng)畫(huà)結(jié)束之前,新圖已經(jīng)成功傳給refocusview肋演。
  • 為什么加入resize操作問(wèn)題就報(bào)出來(lái)了抑诸?resize對(duì)新圖進(jìn)行了縮放,這個(gè)過(guò)程耗時(shí)爹殊,導(dǎo)致動(dòng)畫(huà)完成后蜕乡,新圖才傳給refocusview。
  • 為什么是4:3比例的圖片才有這個(gè)問(wèn)題梗夸?4:3圖片大层玲,生成新圖的過(guò)程相對(duì)其他圖片耗時(shí)長(zhǎng)。

那么有幾個(gè)方面可以修復(fù)該問(wèn)題反症。

  • 優(yōu)化算法辛块,縮短生成新圖時(shí)間。這需要平臺(tái)去改铅碍,難度大润绵,推動(dòng)也難。直接pass该酗。
  • 更改refocusview刷新機(jī)制授药,就算動(dòng)畫(huà)結(jié)束前士嚎,新圖沒(méi)能生成呜魄,也應(yīng)該提供二次刷新的機(jī)會(huì)。該改動(dòng)較大莱衩,在出貨階段爵嗅,萬(wàn)一引入新的bug,更頭疼笨蚁。但這應(yīng)該是該問(wèn)題最正確的解法睹晒。
  • 將gallery加入高性能白名單趟庄,需要Performance組協(xié)助配置。但因?yàn)檫@一個(gè)問(wèn)題伪很,將其配置進(jìn)白名單戚啥,有點(diǎn)小提大作。
  • 動(dòng)態(tài)配置CUP頻率锉试,在生成新圖的過(guò)程中對(duì)CUP升頻猫十。
  • 偷機(jī)取巧,拉長(zhǎng)動(dòng)畫(huà)時(shí)間呆盖。只需變更一個(gè)值拖云,風(fēng)險(xiǎn)低。但沒(méi)能從正面解決应又。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宙项,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子株扛,更是在濱河造成了極大的恐慌尤筐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洞就,死亡現(xiàn)場(chǎng)離奇詭異叔磷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奖磁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)改基,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人咖为,你說(shuō)我怎么就攤上這事秕狰。” “怎么了躁染?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵鸣哀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吞彤,道長(zhǎng)我衬,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任饰恕,我火速辦了婚禮挠羔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘埋嵌。我一直安慰自己破加,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布雹嗦。 她就那樣靜靜地躺著范舀,像睡著了一般合是。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锭环,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天聪全,我揣著相機(jī)與錄音,去河邊找鬼辅辩。 笑死荔烧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汽久。 我是一名探鬼主播鹤竭,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼景醇!你這毒婦竟也來(lái)了臀稚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤三痰,失蹤者是張志新(化名)和其女友劉穎吧寺,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體散劫,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稚机,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了获搏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赖条。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖常熙,靈堂內(nèi)的尸體忽然破棺而出纬乍,到底是詐尸還是另有隱情,我是刑警寧澤裸卫,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布仿贬,位于F島的核電站,受9級(jí)特大地震影響墓贿,放射性物質(zhì)發(fā)生泄漏茧泪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一聋袋、第九天 我趴在偏房一處隱蔽的房頂上張望队伟。 院中可真熱鬧,春花似錦舱馅、人聲如沸缰泡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)棘钞。三九已至,卻和暖如春干毅,著一層夾襖步出監(jiān)牢的瞬間宜猜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工硝逢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姨拥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓渠鸽,卻偏偏與公主長(zhǎng)得像叫乌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子徽缚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容