日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

历时四年,给Google提交的Android Framework Bug终于被Fixed了

發布時間:2023/12/19 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 历时四年,给Google提交的Android Framework Bug终于被Fixed了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歷時四年,Google終于修復了一個我發現的Android Framework Bug

2014年在做一個Android終端設備開發過程中,發現了一個Android Framework層的Bug,給Google提交了issue和解決方案,和外界傳言一致Google一般不太在意個人開發者提交的issue,直到2017年12月,再次提交了issue,在幾輪溝通無果下,忍不住噴了Google幾句后,終于該issue被轉交給了Android development team處理,又經過快三個月的時間收到了下面的答復:


google issues:https://issuetracker.google.com/issues/70016687

issue背景:

在對我們自己研發的一款Android終端設備進行Camera拍照壓力測試時,發現當拍照張數達到數萬張時,出現OOM,導致系統崩潰。

issue分析解決過程:

該項目為開發一款Android工業終端設備,采用TI芯片方案,由于芯片方案商支持不夠完善(主要TI被高通打的放棄了移動端芯片市場),Camera的HAL層需要我們自己移植適配。

分析思路:

首先看下Android系統架構圖中中Camera功能模塊的分布情況,從App層->Framework->HAL->Kernel一路下來:

(圖片取自https://blog.csdn.net/asd1031/article/details/53699867)

  • 首先懷疑測試app自身存在內存問題。
  • Android application Framework,libraries層和jni相關模塊是經過Google大量驗證的模塊,出現問題的概率比較小,暫時排除。
  • 懷疑HAL層移植問題。
懷疑1:測試app問題

壓力測試app由測試同學開發提供的,該app每隔3s觸發一次拍照操作,并對拍攝的照片進行清理,以達到拍攝10萬張照片的測試目的。基于以上分析,為了排除測試app問題,采用Android原生Camera app進行壓力測試,編寫monkey測試腳本,觸發原生Camera app拍照,進行壓力測試。(此處遇到的問題是:如何實現對照片的清理工作,直接觸發shell環境下rm操作,并不會清除Android內部文件緩存索引,拍攝幾千張照片后仍然會導致存儲空間用盡,解決此問題也耗費了點時間,不過不是本文的重點,此處不做展開)

結果:通過原生Camera app進行測試后,仍然出現內存泄漏,此處基本排除測試app的問題。

懷疑2:HAl層

基于之前的分析,我們把懷疑對象聚集在我們自己集成的Android HAL層,在分析之前,簡單描述下Android Camera拍照的流程:Linux Kernel提供標準的v4l2接口,供上層(此處即為HAL)獲取圖像原始數據,HAL層拿到圖像數據進行編碼(一般為jpeg),回調給Camera service。其中Linux Kernel下Camera驅動和HAL適配層一般由芯片廠商提供,其余部分由Linux Kernel和Android系統官方維護,開發。

這樣對HAL的測試分為三步:

  • 驗證芯片廠商的Camera驅動是否存在問題。
  • 驗證HAL層圖像數據捕獲流程是否存在問題。
  • 驗證圖像編碼流程是否存在問題。
Camera驅動

Android系統是基于Linux Kernel開發,支持標準的v4l2接口,只需要編寫一個簡單的基于v4l2的視頻捕獲程序就可以驗證camera驅動的問題,此處測試驗證沒有內存泄漏,排查驅動問題。

HAL層視頻捕獲流程

測試思路非常明確,難點在于要把芯片提供商的HAL層源碼中進行視頻捕獲功能的模塊剝離出來,單獨進行壓力測試。(由于原廠提供的HAL層代碼,耦合比較嚴重,在不影響內部流程,結構的情況下,要找到適合的切面mock一些數據接口,才好進行有效的測試。)

經過以上的工作,進行了壓力測試,系統未出現內存泄漏,基本排除HAL層捕獲流程。

HAL層圖像編碼流程

繼續對圖像編碼部分剝離,進行壓力測試,發現內存泄漏,基本定位大概的泄漏位置,不過由于Android整個編碼過程也進行層層的封裝,泄漏位置還需要繼續細致的定位,這樣經過層層的細化,像剝洋蔥一樣一層層mock輸入數據,最終定位在Android系統層的jpeg編碼處理中:(frameworks/base/core/jni/android/graphics/YuvToJpegEncoder.cpp)

關于Android的jpeg編碼:Android系統jpeg編碼支持硬編碼和軟編碼,如果芯片集成了jpeg硬件編碼模塊,會優先選擇硬編碼,而如果沒有該模塊,會采用軟件的jpeg編碼進行處理。

Android采用的軟件編碼庫是業內知名的libjpeg庫,而正是對這個庫的使用出了問題:

bool YuvToJpegEncoder::encode(SkWStream* stream, void* inYuv, int width,int height, int* offsets, int jpegQuality) {jpeg_compress_struct cinfo;skjpeg_error_mgr sk_err;skjpeg_destination_mgr sk_wstream(stream);cinfo.err = jpeg_std_error(&sk_err);sk_err.error_exit = skjpeg_error_exit;if (setjmp(sk_err.fJmpBuf)) {return false;}jpeg_create_compress(&cinfo);cinfo.dest = &sk_wstream;setJpegCompressStruct(&cinfo, width, height, jpegQuality);jpeg_start_compress(&cinfo, TRUE);compress(&cinfo, (uint8_t*) inYuv, offsets);jpeg_finish_compress(&cinfo);return true; }

坑就在上面這個接口函數中:

熟悉libjpeg的同學可能會注意到,上面的接口在調用完jpeg_finish_compress()后,沒有調用jpeg_destroy_compress(),這個接口是釋放壓縮工作過程中所申請的資源,就是代碼中的cinfo結構,該結構只占十幾個字節的內存, 這樣就導致了每拍攝一張照片,就泄漏一個cinfo的內存,當拍照數量達到萬級時,才會有所察覺。

對這種數據流的控制,pipeline方式是比較好的方案,因為可以明確輸入輸出,這樣非常方便通過偽造輸入數據對各個模塊進行單獨的壓力測試,最難控制的就是“洋蔥”式的包裹調用,要像“剝洋蔥”一樣一層層的剝離,找準切面十分麻煩。

這個bug是否影響到你的Android手機

七成的概率下你的手機應該不會有這個問題,即時有這個問題你也很難發現這個問題,因為上面講到android系統有兩種編碼方式選擇,優先使用硬件編碼模塊,如果沒有硬件編碼模塊,才會使用軟編碼的方式,而目前大部分中高端的芯片方案都集成了硬件模塊,只有在少數低端芯片上才會使用軟編碼的方式,并且即使你的手機沒有硬編碼模塊,用的軟編碼,也很難遇見這個問題,因為對于普通用戶,持續拍攝上萬張照片是不太可能的,第一受限于手機的存儲空間(一萬張照片,至少要30G的空間),第二即使能拍攝上萬張照片,但要保持手機一直工作不重啟也還是比較苦難的(總會死個機啥的)。

哈哈,這么一說發現這個bug其實是一個不會發生的bug了!!!不過我們之前的產品,定位于工業級別,對圖像采集有比較高的要求,所以制定了10萬張照片的測試標準,也就讓我發現了這個不會影響到大部分人的bug。

最后再吐槽下Google

改bug我在2014年就已經提交了issue,不過沒持續關注,過了幾個月被莫名其妙的關閉了,當時沒有在意,不過當Android 6.0,7.0版本出來時,我都看了下這個bug,一直存在,所以在去年(2017年)12月份又提了一個issue,Google方面的處理人仍然各種推諉扯皮,最后我沒忍住噴了幾句,這次Google方面回復會轉給開發團隊處理,終于在今年(2018年)給出了fixed的結論。

總結

以上是生活随笔為你收集整理的历时四年,给Google提交的Android Framework Bug终于被Fixed了的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91久久久久久久久久久 | 欧美天天视频 | 老司机免费视频 | 国产在线精品自拍 | 国产69精品久久久久久久久久 | 亚洲国产丝袜 | 久久久久久久久久一级 | 91在线网 | 欧美黑人啪啪 | 成年人网站在线观看视频 | а 天堂 在线 | 粉嫩一区二区三区 | 日韩在线精品视频一区二区涩爱 | 亚洲一区免费视频 | 久久这里只有精品久久 | 亚洲国产精品视频一区 | 成人99 | 精品视频一区二区在线 | 久久九色 | 成人欧美精品一区二区 | 夜间福利在线 | 高清一区二区 | 97人人爽人人爽人人爽人人爽 | 国产美女精品 | 91视频在线观看网站 | 理想之城连续剧40集免费播放 | 色花堂在线 | 成人激情五月天 | 日本性爱视频在线观看 | 四川丰满少妇被弄到高潮 | 欧美视频在线一区二区三区 | 亚洲色图偷拍 | 高清一区二区视频 | 黑人高潮一区二区三区在线看 | 国产女人18水真多毛片18精品 | 国产精品免费一区二区区 | 麻豆传媒映画官网 | 国产中文字幕乱人伦在线观看 | 九九精品在线观看 | 视频在线不卡 | 黄色片视频免费 | 国偷自产av一区二区三区 | 日韩av网站在线 | 精品一区二区在线观看 | 99热手机在线观看 | 高清亚洲| 另类亚洲色图 | av十大美巨乳 | 亚洲乱仑 | 成人一级生活片 | 樱桃视频一区二区三区 | 大地资源影视在线播放观看高清视频 | 在线毛片网 | 久久天堂精品 | 男生把女生困困的视频 | 久久久无码人妻精品一区 | 一级肉体全黄裸片 | 色婷婷激情五月 | 亚洲精品欧洲 | 国产一级片久久 | 成人午夜毛片 | 国产精品美女久久久久久久久 | 久久久噜噜噜久久中文字幕色伊伊 | 最近中文字幕在线观看 | 国内毛片毛片 | 91精品中文字幕 | 美国色视频 | 韩国视频一区 | 国产一区二区在线观看视频 | 91在线观看视频 | 中文字幕一区二区三区在线观看 | 91福利免费 | 久久看片网 | 免费av在线网址 | 久久艹中文字幕 | 亚洲老女人视频 | 久久久天天 | 亚洲产国偷v产偷v自拍涩爱 | 久久综合一区二区 | 亚洲午夜久久久久 | 91亚洲精品国偷拍自产在线观看 | 特级a级片| 国产精品2019 | 色中文| 亚州一级| 男女爱爱福利视频 | 97超碰中文字幕 | 白白色在线播放 | 色就是色欧美色图 | 久久久精品视频在线观看 | 国产免费黄| 国产真实乱在线更新 | 免费激情av | 成人作爱视频 | 欧美精品一区二区三区四区五区 | 亚洲爱av| 欧美精品福利视频 | 少妇一级片 | 亚洲 欧洲 日韩 |