六月工作總結

一、            總結

1.  tombstones log的分析2012-06-04

     附件是一個tombstones log的分析工具,具體使用方法如下:

1.panic1.py拷貝到編譯服務器上的driod目錄下;

2.運行soucebuild/envsetup.sh設置好環境變量;

3.tongstone log中的如下部分單獨拷貝到一個文件中,例如lll.txt

        #00  pc 001a280c  /system/lib/libwebcore.so

        #01  pc 001a185c  /system/lib/libwebcore.so

        #02  pc 001a2e46  /system/lib/libwebcore.so

        #03  pc 001a727a  /system/lib/libwebcore.so

        #04  pc 001a72f6  /system/lib/libwebcore.so

        #05  pc 00011ef4  /system/lib/libdvm.so

4.運行腳本panic1.py lll.txt,即可看到相應的call stack

   需要注意的是:你必須編譯debug版本的system.img

 

lirayi@localhost:~/m8665mo/trunk/droid$sourcebuild/envsetup.sh

includingdevice/htc/passion/vendorsetup.sh

includingdevice/qcom/common/vendorsetup.sh

includingdevice/samsung/crespo/vendorsetup.sh

lirayi@localhost:~/m8665mo/trunk/droid$./panic1.pylll.txt

read file ok

CachedNode.h:114             android::CachedNode::clearCursor(android::CachedFrame*)

CachedFrame.cpp:138          android::CachedFrame::clearCursor()

CachedRoot.cpp:1386          android::CachedRoot::setCursor(android::CachedFrame*, android::CachedNode*)

WebView.cpp:885              android::WebView::motionUp(int, int, int)

WebView.cpp:1678             android::nativeMotionUp(_JNIEnv*, _jobject*, int, int, int)

CallEABI.S:243               dvmPlatformInvoke

2.  media縮略圖問題 2012-06-06

 

有些設備的ROM,mediastore的數據庫可能沒有提供thumbnails,這樣會造成其他設備訪問時,ArcSoftDMS在解圖CPU佔用率過高

經測試,當前ArgonSpinsmediastore的沒有photo thumbnails,但是TinBoostmediastore是好的,請幫忙調查(argonspin測試設備使用的romARGONS_4_07.15.11RDS

         Tinboost以及argonspin的thumbnail文件夾的路徑是如下

         /mnt/sdcard/DCIM/.thumbnails

argonspin在以下兩個版本查看,發現沒有生成thumbnail文件夾。

ARGONS_4_07.15.11RDS_flex_LATAM_CLALA_v5_0423.sbf

ARGONS_4_07.19.16RDS_flex_LATAM_Claro_LATAM_v12_0525_CELLONAPR.sbf

 

這個早期的版本也是沒有的。ARGONS_4_02.0D.11RDD_flex_PRC_Retail_v5_0217.sbf

 

         Tinboost在以下版本查看,發現有生成thumbnail文件夾。這是一個比較舊的版本。

TNBST_4.02.19.0brps

 

         Tinboost在以下版本查看,發現並沒有生成thumbnail文件夾。這是個比較新的版本。

TNBST_4_0A.1F.3DRPS



         需要幫忙調查下爲什麼mediastore沒有生成thumbnail。

         Photo以及video會生成thumbail,但是audio不會生成thumnail。

 

         需要再去看看audio不會生成thumnail的原因,查清我們代碼有沒實現。若沒實現,簡單評估下實現該功能的思路以及工作量。

         在tinboost上面,發現會在/mnt/sdcard/Android/data/com.android.providers.media/albumthumbs/下生成文件名是數字的文件,文件大小非0,且是概率性出現的。該文件打開就是亂碼,其實這是否就是audio專輯圖片縮略圖的數據,類似編碼後的圖片數據嗎?

         在argon spin上,也曾試過在/mnt/sdcard/Android/data/com.android.providers.media/albumthumbs/下生成文件名是數字的文件,文件大小卻是0。

         在argon spin上,暫未發現生成audio的thumbnail的代碼,下一步可以對比下tinboost相關代碼。

         在可以正常拿到audiothumbnail的設備上測試,在這個目錄下生成的文件如圖所示,爲非0的文件,以數字命名

         而在將此文件加後綴名jpg後,是可以用看圖工具打開的,但是這個應該只是一般規則,具體要根據實際設備上的代碼實現來確定

   

確認結果:

               經過確認,在ARGONS_4_07.19.16RDS_flex_LATAM_Claro_LATAM_v12_0525_CELLONAPR.rar進行測試,photovideo會生成thumbnail

               測試描述:

ARGONS_4_07.19.16RDS_flex_LATAM_Claro_LATAM_v12_0525_CELLONAPR.rar進行測試,拍照增加圖片、視頻,filemanager中對圖片視頻進行刪除操作,通過adb放入手機圖片視頻,格式化SD卡再增加圖片視頻等操作,次數爲30+次,photo以及video均會生成thumbnail。只是在filemanager中刪除圖片或是視頻文件時,會概率性存在該圖片或視頻刪除了,縮略圖仍未刪除的情況。

mediastorethumbnail數據庫,含有thumbnails,videothumbnailsalbum_art三個表用來存放thumbnail的信息,實際的thumbnail文件保存在SDcard上面(/mnt/sdcard/DCIM/.thumbnails/目錄下放photovideo的,/mnt/sdcard/Android/data/com.android.providers.media/albumthumbs/下面放audioalbum

        

         6090改出的問題,一個判斷條件弄錯。

 

3.  APR問題_20120605_gallery  2012-06-07

 

  atcom.cooliris.media.MediaFeed.shutdown(MediaFeed.java:~107)

  - waiting to lock<0x407b3600> (a java.util.ArrayList) held by threadid=18 (MediaSets)

  atcom.cooliris.media.GridLayer.shutdown(GridLayer.java:229)

  atcom.cooliris.media.Gallery.onDestroy(Gallery.java:295)

  atandroid.app.ActivityThread.performDestroyActivity(ActivityThread.java:2665)

  atandroid.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2696)

  atandroid.app.ActivityThread.access$2100(ActivityThread.java:117)

  atandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:964)

  atandroid.os.Handler.dispatchMessage(Handler.java:99)

  atandroid.os.Looper.loop(Looper.java:179)

  atandroid.app.ActivityThread.main(ActivityThread.java:3689)

  atjava.lang.reflect.Method.invokeNative(Native Method)

  atjava.lang.reflect.Method.invoke(Method.java:507)

  atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875)

  atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:633)

  atdalvik.system.NativeStart.main(Native Method)

 

         初步分析,認爲是某個對mMediaSets的同步塊出現sleep或是無終止執行,導致死鎖問題。可以在有mMediaSets的地方打印,看哪裏調用的比較耗時。

         在mediafeed這個文件中,每個同步mMediaSets的地方都打印出執行這個塊的時間。如下:

然後讓測試去反覆操作使得可以走過那些有這些同步塊的地方。最後看看執行哪個塊佔用時間長。

自己的測試結果:

RomARGONS_4_07.1A.13RDS_flex_LATAM_Claro_LATAM_v13_0530_CELLONAPR.sbf

次數:30+

其他預置環境:SD卡內有200+張圖片,10+個視頻文件。

出現lockshutdown的同步塊最長試過1046ms的等待時間,然後每個同步塊(包括該shutdown同步塊)執行時間一般小於1ms,等待時間也是如此,可以說總體需時很短。

 

測試方法,發佈如下:

1) 將附件apk安裝在機器上,保證測試時不重啓手機,重啓的話需要重新安裝。

安裝命令: adb install -r[gallery3D.apk存放路徑]

2) 保證SD卡內有1000+個圖片文件,100+個視頻文件。

3)       adb命令打印log

adb logcat>gallery_lock.log

4) 進行如下操作

1>進入gallery

2>多次操作,多選刪除圖片,或者可以多選刪除多個相冊,或者可以進入某個相冊然後多選相片進行刪除。

3>退出gallery

4>重複。儘量重複多次,100+次。

此爲一組測試。Rom使用最新的三個不同版本測試,各測試一組,共三組。

5) 退出adblogcat命令。Log文件保存下來。

 

測試結束後,麻煩測試人員提供以下信息:

1) 每組的log文件。

2) 每組的rom信息。

3) 測試中碰到的異常,有的話就截圖。

 

結果如下:

 

         mediafeed.shutdown出現waiting for lock問題,推測現象是凍屏現象。

        

壓力測試結果如下:

ARGONS_4_07.1A.13RDS_flex_LATAM_Claro_LATAM_v13_0530_CELLONAPR.sbf

mediafeed.shutdown的同步塊中,最長測得1046ms的等待時間。

ARGONS_4_07.1A.11RDS_flex_LATAM_Retail_AR_v11_0529_CELLONAPR.sbf

mediafeed.Refresh的同步塊中,最長測得2472ms的等待時間。

ARGONS_4_07.1A.11RDS_flex_LATAM_Movistar_AR_v11_0529_CELLONAPR.sbf         

mediafeed.Refresh的同步塊中,最長測得2295ms的等待時間。

每個同步塊(包括該shutdown同步塊)執行時間一般小於1ms等待時間也是如此,可以說總體需時很短,只是在有時會等待時間過長,但是不會出現waiting forlock問題,因爲未能出現凍屏現象,因此現象不能復現。同時無exception。另外不能知道等待時間長時是哪一塊線程訪問該臨界區變量。

 

Monkeytest結果如下:

用以下三個版本測,

ARGONS_4_07.1B.11RDS_flex_LATAM_Claro_LATAM_v16_0606_CELLONAPR.sbf

ARGONS_4_07.19.16RDS_flex_LATAM_Claro_LATAM_v12_0525_CELLONAPR.sbf

ARGONS_4_07.1A.13RDS_flex_LATAM_Claro_LATAM_v13_0530_CELLONAPR.sbf

跑了三個晚上,未出現凍屏現象,同時無exception,未能復現。

 

 

綜上,未能復現。

4.  Monkeytest_20120704問題2012-07-04

   private void showToast(final String string, final int duration, finalboolean centered) {

       if (mContext != null && !App.get(mContext).isPaused()) {

           App.get(mContext).getHandler().post(new Runnable() {

         分析結果:

         在App.get返回的app對象是null。進一步跟進得出根據context查詢hashmap,查詢不到該context記錄。尚未了解不能成功查詢到該記錄的原因。

         Mediafeed.showToast在gallery3D中用於顯示toast信息,本人尚未碰到該現象,估計復現概率較低,有待進一步跟進。

 

5.  [Gallery] The deletedpictures/video still lists in gallery . SMPCQ00009711 Level B 2012-07-03

描述:

filemanager中刪除圖片後,保證gallery不是掛起後臺的情況下進入,就一切正常。否則,不正常,需要重新進入gallery才正常。

 

分析:

1)現在需要嘗試能否完全解決該問題。

2)理清cacheservice中相關流程。

updateNumExpectedItemsmNumExpectedItems取值,關係到最終顯示在界面的相冊照片張數值。需要確認該值獲取的正確流程。

3

MediaFeed.run分析,數據庫已經更新了,懷疑與更新mediaset有關係。需要繼續分析MediaFeed.run

4)對比DLNA應用。

         同樣操作,DLNA會表現正常,不管是否有掛起DLNA應用。

5

         Mediaset中保存的mediaitem數組mItem中,被刪除文件的mFlagForDelete沒有被設置爲true,導致在mediaset中沒有被刪除,這樣就導致在更新相冊的標籤時出錯。(相片張數不對)可以從這裏入手尋找roorcause

 

6

         mFlagForDelete的操作有兩個函數,如下。

         Mediaset.refresh

         Mediaset.additem

         對於第二種情況。發現Mediaset.additem會對傳入的mediaitemmFlagForDelete設置爲false,也即是不要刪除。Cacheservice.loadMediaItemsIntoMediaFeed中,

byte[] albumData = sAlbumCache.get(set.mId, 0);

獲取存在問題,看看是否存在異步操作以及看看該獲取的函數調用流程。

 

         6.1

         獲取數字值正確,但是在顯示出現問題。

 

         6.2

         需要跟蹤每次對應mediaset的操作,看看cache文件的變化。        

  
Cacheservice.
loadMediaItemsIntoMediaFeed中,

syncCache中會對所有的mediaset進行更新,包括mediaset裏面的mediaitem。然後AlbumData是根據傳入的mediaset獲取對應的mediaset數據。AlbumData是否爲null與該問題無關。

 

boolean setLookupContainsItem = set.lookupContainsItem(item);

這句執行的取值存在問題,正常情況下與非正常情況下存在問題,可以進一步分析。

 

addItem存在異步調用問題,導致MediaitemmFlagForDelete賦值存在問題。需要繼續查看。與set.lookupContainsItem也存在問題。

 

         populateMediaItemsForSetsaddItem存在問題,rootcause仍在查找。

        

        

         已經跟老大說,週三可以解決問題。

7

         概率性復現。

8)

         掛起gallery與沒掛起所走路徑不一樣。

         Cacheservice.refresh

         會將數據庫查詢到的image以及video記錄寫入mediaset中。對於mediaset,存在兩個形式,一個是標準的mediaset,使用arraylist存放。還有一個是LongSparseArray,這個當做是個快表,可以快速查詢,效率比hashmap高。

         然後將mediaset寫入cache文件中。

         很大可能是additem問題。查看調用地方。

         1>

         從以下三方面入手。

Mediaset.generateTitle中生成相冊名稱,與相冊張數正確與否。mNumExpectedItemsCountAccurate變量的研究。

Mediaset. Additem

Localdatasource.refresh中流程。

9)

         在刪除文件後,Mediaset的mediaitem更新,從arraylist頭開始更新覆蓋,但是被刪除的元素尚未被移出mediaset。

1) 嘗試過假定只刪除一個元素,然後把mediaset的mediaitem的list刪除最後一個元素,正常,等待修改爲刪除多個元素驗證。

2) 需要確認additem覆蓋的是從頭開始覆蓋。

是。  

3) 需要考慮把相冊內圖片全部刪除的情況。

4) 當出現多個相冊時,使用本方法會出現問題。

mItems即使改變正確了,也是會存在問題。Mitems.size與顯示的size不一樣。

5) 在additem中,mitems的變化出現異步問題。

 

今天:

1) 將removeDuplicate中修改爲也同時改變LongSparseArray數組的情況。

 

2) 不能將mitems按照最後開始重複項刪除的原則來刪除所謂的被刪除條目,因爲會存在最後幾項存放的本應被刪除的條目不存在重複項。

 

1>改進使得根據實際剩餘items數來刪除所謂被刪除條目。

   Cacheservice .loadMediaItemsIntoMediaFeed中獲取數目存在問題,概率性不正確。

   通過在additem中獲取的數字記下每個相冊的個數不可行,因爲此數字也許不準確。因此通過此記下每個相冊的確切數目會有問題。

3)

當出現多個相冊時,使用本方法會出現問題。

                   是否是異步出現問題?

1> 嘗試查看synchronized的調用是否正確。

可以將additems中synchronized修改範圍。

不能修改範圍。

7)

當存在多個相冊時,概率性有些相冊不會調用additem去更新。

         8)

                   可以嘗試將updateNumExpectedItems回退,觀察相片張數的變化。

 

關於SMPCQ00009711問題的情況

Gallery這個刪除照片的問題目前能的情況如下:

1)      經過初步修改,對於手機中存在單個相冊的情況,可以在刪除圖片後在gallery3D中及時更新過來,但是測試時還會存在概率性不能及時更新的情況,20%的概率,代碼修改仍然存在問題,問題所在,但是不知如何修改。

2)      對於手機中存在多個相冊的情況,仍會有問題。

3)      目前很大可能需要將SMPCQ00003717、SMPCQ00007699這兩個bug回退回去,再進行修改,相當於要解3個bug。對於該相關代碼邏輯關係,仍然存在問題,此問題有跟shaking一起看過,都覺得比較難改。

4)      若要修改,還需考慮sideeffect,而七月份就要latam版的SA,風險覺得還是有的。

結論:

誠然,這個bug的確是個問題,jimmy也曾經要求需要修改,即使是在對比機以及一些已經上市機型也存在該問題時,也要解決該問題。但是鑑於目前已經花費一段時間在該問題上仍未能解決該問題,建議不要解決該問題。

另外,手頭還有幾個latam以及taiwan的bug,鑑於項目進展,想盡快解決這些問題。

6.   Adb install時more than one device解決方法 2012-06-06

問題描述:

         如下,

解決方案:

         使用adb kill-server。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章