如何才能更持久系列之——耗電元兇

引言:電量消耗控制一直是困擾所有APP開發者的一大難題,其中又以Android平臺尤甚。業界同行爲此做了非常多的研究與嘗試,騰訊自然也不例外。本週開始,大講堂將推出數篇省電系列文章,與大家一起探討Android開發中的省電竅門,敬請期待。

題外話:

大多數技術同學都有或多或少的分享過一些電量的心得,特別是那些自己組裝個硬件去測電流的牛牛們,更是佩服的五體投地。不過在繁忙的版本迭代和鋪天蓋地的各種需求撲面而來的時候,是否能從容的把握住需求在電量方面的問題,纔是大多數測試同學最關心的,畢竟就算是專職測性能的同學也很難在大浪來襲的時候淡定的花幾天來拿硬件逐一確認功能點電量消耗。

爲什麼要這麼糾結耗電量?因爲手機由很多模塊組成,基本上每個會被程序使用的硬件部分都會耗電,且看上面這張一個典型主流智能手機構造圖,電池佔了將近60%手機空間,甚至超過了PCB的佔地面積,也就是說一塊電池在維持着整個手機的運作,而且不惜佔掉了手機超過一半的體積(除屏幕),所以電池的每一毫安都是有價值的,浪費電量就如同浪費糧食一樣可恥。

如何測電量,其實是個極其蛋疼的事情,因爲測電量就必須需求到手才能開工,但當需求到手了就算你測出來某某特性多消耗了100mw電量,讓他們去改,顯然不現實。所以在我看來,測電量的工作最適合的時機是在需求評審和用例評審階段,也就是用意識流和腦補的形式,讓產品和開發在開發前就意識到這麼做太耗電,那麼做太逆天。

但如何能做到在開發前就規避耗電悲劇,並不容易,一方面自身要對手機功耗有非常全面和整體的認識,另一方面要能拿出數據pk產品開發,能讓你的論據站的住腳。

所以我做了一點點研究,並將之分爲三個階段來介紹:

首先,庖丁解牛、面面俱到,數據告訴你什麼東西是耗電元兇

其次,工慾善其事必先利其器,主流電量測試工具分析

最後,獲取客觀事實,如何將電量消耗數據化

首先,所謂庖丁解牛,如字面意思,想把電量測好就要知道電量到底怎麼被消耗的,km上有很多很專業剖析非常透徹的文章,如GPU渲染,屏幕色彩等,不過這次let’s down to earth,通過簡單明瞭的數據對比到底什麼東西在消耗手機的電量。

OpenGL與硬件加速

關於GPU渲染和屏幕大小以及亮度對電量的影響,我們換個思路,不搞太複雜的東西,用GLBenchmark這款軟件來試試市面上中端機型電池的續航能力,橫向對比看看什麼東西如此耗電。

GLB測試軟件主要是通過跑3D遊戲來測試電池的消耗,在電池耗盡的時候會生成一張圖標,主要分兩個維度,一個是電池衰減,一個是FPS變化,下面的數據選用的是EGYPT HD,100%亮度及最大30FPS的模式進行測試。

不過我們先不急着橫向對比數據,而是看看Egypt(埃及)這款3D遊戲所測試的重點OpenGL ES 2.0對電池的消耗有多大?在此之前先了解一下日常使用的電量消耗數據(數據來自GSMArena)[1]。

 

擁有一塊大電池的noteII表現非常不俗,3g通話時長達到17個小時,wifi下瀏覽網頁將近9小時,竟然能聯繫播放11個半小時的視頻(飛行模式).

 

 

再看看電池容量少了1000mAh的s3,相比之下自然差一些了,不過鑑於電池容量本身就中規中矩的情況,續航仍然能滿足我們的日常需要。

 

再回頭來看GLB的測試結果,表現最好的三星noteII只能堅持4個半小時,只有瀏覽網頁續航時間的一半。苦逼一族如MX2續航僅僅只有兩個小時,手機只能用2個小時還能叫做移動設備?根本沒法愉快的出門了。所以我們可以輕易得出第一個結論:長時間使用OPENGL繪製3D動畫(CPU&GPU)非常非常之耗電。

 

看上去似乎很嚇人,不過慶幸的是手Q上並沒有什麼3D動畫的需求,是不是咱就不用關心動畫了呢?顯然不是的,因爲即便是手Q上使用的2D繪製,其中仍然有電量過度消耗的可能。Android中的動畫類型有兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現方式可以使視圖組件移動、放大、縮小以及產生透明度的變化;另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。

 

乍一看似乎這兩種動畫類型實現都很簡單,但如果你的動畫非常之複雜時(仍然是2D),UI渲染的時候,多核是沒有意義的,因爲渲染必須要在一個進程中完成,無法並行。簡言之,手機四核也好,八核也好,碰到複雜的動畫如果想得到流暢的效果就得開啓硬件加速,因爲GPU通常能更好的處理圖像的運算。

 

 

另外還得提及GPU的另外一個優勢:許多繪製的效果變得更加容易。比如你要以軟件形式繪製一個位圖,你除了設置一個位移,不能做任何事。僅僅是縮小就得花上相當多的時間進行渲染。而在GPU中,此類轉換則相當容易。所以你懂的,開發做動畫效果時爲了達到更好的效果是非常樂意開啓硬件加速的,但實際上使用硬件加速不僅會有多餘的內存消耗,以及不確定的異常出現外,仍然通過上面的數據可以得知,使用GPU自然就會帶來更多的電量消耗。所以我們得出第二個結論:即使是2D動畫繪製,如果開啓了硬件加速也會帶來過多甚至不必要的電量消耗。

 

屏幕與亮度

 

再看上面的數據,橫向對比s3和note2,是否發現電池容量相差1000mAh但遊戲續航時間只差了30分鐘?原因顯而易見,都是note2那塊5.5寸的大屏幕導致的,那麼屏幕大爲什麼就耗電呢?

 

最直觀的原因是屏幕大顯示區域大,自然功耗就高,沒錯,但還有另外一個原因也不可忽視:PPI。由於S3的AMOLED屏幕是P排,所以PPI有效數值要在換算出來的數值上乘以三分之二,所以有效數值爲203.47,note2是RGB排列,有效PPI數值是267.3且不用換算。兩者之間最大的差別就是note2需要同時繪製1.3倍於蓋世三的像素,也就是說播放一個相同的動畫得到相同效果(fps相同),note2對於gpu的消耗是s3的1.3倍。於是我們又得出一個結論:相同的動畫,屏幕大小、分辨率及PPI不同,也會有不同的電量消耗。

 

再來看一組數據,仍然使用GLB,這次我們加上iphone4s,以避免android特有問題的說辭。

上面的數據主要是對比相同fps值情況下,不同屏幕亮度手機續航時間的對比,最亮狀態跑和50%亮度跑出來的結果有明顯差距,s3有20分鐘左右的差異,4s有30多分鐘的差異,所以我們又得出個結論:屏幕材質耗電量波動不大,屏幕耗電與屏幕亮度有着直接關係。

 

有想法的同學可能已經發現,爲何s3和4s之間亮度續航差異仍然有十幾分鐘的差異?因爲IPHONE4S MAXIMUM SCREEN BRIGHTNESS是581cd/m²,而s3是249cd/m²,竟然相差兩倍,也就是說4s的50%亮度跟s3 100%效果差不多,所以側面也印證了亮度坑電量的事實。

 

數據傳輸

 

能裝手Q的自然已都是智能手機,而且大部分情況下都在進行數據傳輸,那麼是否有考慮過手機最頻繁進行的工作是否也很耗電呢?手機進行數據傳輸的核心方式不外乎三種:Bluetooth,WiFi (802.11),cellular networks(eg.2g3g4g)。那麼我們繼續保持隊形,以數據的方式來看看手機在這方面的耗電情況[2]。

 

 

先來看看藍牙的情況,三條折線分別是藍牙固定傳輸間隔時間40ms、470ms、1.2s模式,可以看出傳輸間隔時間越長越不耗電,每秒傳輸數據量越大越耗電,不過仔細看豎軸其實功耗並不大,可以說很小,不過先不下定論,繼續往下對比。

 

 

這次是WIFI的功耗表現,幾條折現分別是固定傳輸間隔時間15s、30s、60s等等,跟藍牙情況類似,間隔時間越短功耗越大,到了300s再往後就基本上沒什麼區別了,wait,你是不是發現了什麼?15s間隔功耗竟然超過了300mw!!手Q不是經常會很頻繁的收到push消息之類,那不是意味着…稍安勿躁,我們現在只是擺數據,勿談國事。

 

另外一個維度,每秒傳輸數據大小對功耗的影響並不大,這點跟藍牙有很大區別。

 

 

這次是GSM下數據傳輸的功耗,只有一條線,可以看出每秒傳輸數據越大功耗就越高,從300bytes/sec開始功耗急劇飆升,1200的時候竟然能有1200mw的功耗,也就是說你在2G環境下傳文件,以恆定1.2kb/s的速度傳一個1G的文件,如果用的是蓋世三,那麼不好意思,你還沒接到一半大小就沒電了…

 

看上去很駭人,而且用的是GSM網絡,技術日新月異的發展,是不是到了3/4G時代功耗就沒那麼變態了呢?那就來見識下已日趨普及的3G的耗電錶現[3]。

 

上圖數據可以看出,3G在小量數據傳輸時的耗電量要比GSM明顯高很多,但隨着傳輸數據越大越來越趨同,但不論如何都可以得出結論:3G比GSM耗電。

那麼即將席捲而來的LTE表現又如何呢?且看下圖[4]。

LTE的上行功耗簡直逆天了,而且下行也要比3G功耗要高,wifi默默的在下面偷笑…

 

好了,各種對比數據羅列出來後,又到得出結論時間了,這次的結論應該很明顯:

 

1、 藍牙功耗最低,wifi其次,cellular network最高

2、 Wifi傳輸時間間隔時間越短,功耗越高,且成倍增長

3、 xG下,功耗4G>3G>2G

4、 xG下,每秒傳輸數據量越大功耗越大,上行跨度特別明顯,下行較爲平滑

 

GPS、LBS

 

除了CPU、RAM這些起進程就要用到的東西,還有個耗電大頭,現在很常用的lbs功能所需要用到的gps定位,估計有人會說調一下gps能耗多少電,這不坑爹麼。其實沒那麼簡單,且看下圖[5]。

 

 

上圖是打開一次google map整個過程中所消耗的電量,其中gps請求開始到收到結果會持續消耗500mw(電量消耗因gps芯片不同有所差異),但同時會打開3g去接收數據,過了一會gps才關閉,然後停止接收數據,在此過程中持續消耗的電量其實相當於疊加了GPS和3G的功耗。整個過程超過按上圖55秒來算,平均每秒700wm,s3電池2100mAh,電壓4.2v,打開一次google map完整拉到數據,每次消耗掉蓋世三3mA電量,就算剝離掉3g的功耗也有將近1.5mA。我們又得出一個結論:單獨運行一次gps功耗不大,但會持續消耗,且結合數據業務,將持續消耗較多電量。

 

這次上篇就介紹到這裏,綜合一下本文數據所得出的所有結論:

 

1、長時間使用OPENGL繪製3D動畫(CPU&GPU)非常非常之耗電

2、即使是繪製2D動畫,如果開啓了硬件加速也會帶來過多甚至不必要的電量消耗。

3、相同的動畫,屏幕大小、分辨率及PPI不同,也會有不同的電量消耗。

4、屏幕材質耗電量波動不大,屏幕耗電與屏幕亮度有着直接關係。

5、 藍牙功耗最低,wifi其次,cellular network最高

6、 Wifi傳輸時間間隔時間越短,功耗越高,且成倍增長

7、 xG下,功耗4G>3G>2G

8、 xG下,每秒傳輸數據量越大功耗越大,上行跨度特別明顯,下行較爲平滑

9、單獨運行一次gps功耗不大但會持續消耗,且結合數據業務,將持續

 

消耗較多電量。

 

[1]GSMArena Battery Test website,http://www.gsmarena.com/battery-test.php

[2]R. Balani, “Energy consumption analysis for bluetooth, wifi and cellular networks,” in Technical report, Dec. 2007, pp. 1–6

[3]N.Balasubramanian,”Energy Consumption in Mobile Phones: A MeasurementStudy and Implications for Network Applications”, In IMC (2009), pp 7.

[4] J. Huang, F. Qian, A. Gerber, Z. M. Mao, S. Sen, and O. Spatscheck,A Close Examination of Performance and Power Characteristics of4G LTE Networks. In Mobisys, 2012.

[5]M. Kjasrgaard. Location-based services on mobile phones: Minimizing power consumption.Pervasive Computing, IEEE, 11(1):67–73, 2012


轉自:http://djt.qq.com/article/view/1255


發佈了10 篇原創文章 · 獲贊 13 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章