微信在Github開源Hardcoder?
1、Hardcoder 的誕生
隨著微信越來越復(fù)雜,性能優(yōu)化變得越來越難做,優(yōu)化所帶來的效果提升也越來越不明顯。所以我們?直在思考,該如何突破這個(gè)優(yōu)化的極限? 直到有一次與廠商的交流我們了解到,部分廠商會(huì)針對微信做一些小改動(dòng),其中比較典型的就是“暴力提頻”。系統(tǒng)在識別到微信啟動(dòng),頁面切換等場景時(shí),會(huì)粗暴地提高 CPU 頻率,從而提升 APP 運(yùn)行的性能。 但由于廠商無法準(zhǔn)確判斷微信場景,暴力提頻效果并不理想;而如果過多地提高 CPU 頻率,又對手機(jī)的功耗有影響。這一方案啟發(fā)了我們,我們何不跳出軟件的范疇,在手機(jī)硬件的層面上挖掘更多的性能優(yōu)化空間呢?于是 Hardcoder 框架應(yīng)運(yùn)而生。
2、Hardcoder 是什么
廠商暴力提頻效果不理想是由于在目前 Android 框架下,手機(jī)沒有辦法準(zhǔn)確獲知 APP 需要資源的時(shí)機(jī)。如果我們需要挖掘手機(jī)硬件層面的性能優(yōu)化,就需要跳過 Android 操作系統(tǒng)的應(yīng)用框架,在應(yīng)用開發(fā)者和硬件之間打開一個(gè)通道,讓硬件可以直接根據(jù)應(yīng)用開發(fā)者的需要進(jìn)行資源的調(diào)度。 Hardcoder 構(gòu)建了 APP 與系統(tǒng)(ROM)之間可靠的通信框架,突破了 APP 只能調(diào)用系統(tǒng)標(biāo)準(zhǔn) API,無法直接調(diào)用系統(tǒng)底層硬件資源的問題,讓 Android APP 和系統(tǒng)能實(shí)時(shí)通信。
利用 Hardcoder,APP 能充分調(diào)度系統(tǒng)資源如 CPU 頻率,大小核,GPU 頻率等來提升 APP 性能,系統(tǒng)能夠從 APP 側(cè)獲取更多信息以便更合理提供各項(xiàng)系統(tǒng)資源。同時(shí),對于 Android 缺乏標(biāo)準(zhǔn)接口實(shí)現(xiàn)的功能,APP 和系統(tǒng)間也可以通過該框架實(shí)現(xiàn)機(jī)型適配和功能拓展。3、Hardcoder 框架通信流程
Hardcoder 框架分為 Server 端和 Client 端。其中 Server 端在廠商系統(tǒng)側(cè)實(shí)現(xiàn),Client 端以 aar 形式合入到 APP中。
APP 在需要資源的時(shí)候,向 Hardcoder 的 Client 端發(fā)出請求。Hardcoder Client 端接收到請求后向 Hardcoder Server 端發(fā)出請求。Server 端接受到請求后會(huì)根據(jù)請求參數(shù)向硬件申請不同的資源,比如調(diào)整 CPU 頻率,把線程綁定到大核運(yùn)行等,實(shí)現(xiàn)了 APP 到系統(tǒng)的通信。 同時(shí)系統(tǒng)也可把當(dāng)前系統(tǒng)的狀態(tài)通過 Hardcoder Client 在 Server 端注冊的接口回調(diào)通知到 Client 端,從而 APP 可以獲取到系統(tǒng)狀態(tài),實(shí)現(xiàn)系統(tǒng)到 APP 的通信。 Hardcoder Client 端與 Server 端采用的是 LocalSocket 的通信方式,由于 Hardcoder 采用 Native 實(shí)現(xiàn),因而在 C 層使用 Linux 的 socket 接口實(shí)現(xiàn)了一套 LocalSocket 機(jī)制作為 Client 端與 Server 端之間的通信方式。Hardcoder 通信框架有以下特點(diǎn):1)系統(tǒng)服務(wù)為 optional,實(shí)現(xiàn)上可以完全支持或者部分支持;2)框架實(shí)現(xiàn)不依賴于特定 Android 系統(tǒng),如 API level 限制;3)APP 的功能和業(yè)務(wù)特性不依賴于該框架。4、Hardcoder 適用場景和效果
Hardcoder 框架有效提升了微信啟動(dòng)、發(fā)送視頻、小程序啟動(dòng)等重度場景的速度,朋友圈的滑動(dòng)流暢性也明顯提升,平均優(yōu)化效果達(dá) 10%-30%。 此外,由于微信作為主動(dòng)請求方可以在場景資源把控上做得更精細(xì)和準(zhǔn)確,Hardcoder 在性能得到提升的同時(shí)僅增加了 2% 的電量消耗,相當(dāng)于用 2% 的功耗換取平均 20% 的性能提升。 Hardcoder 框架目前已接入 OPPO、vivo、華為、小米、三星、魅族等主流手機(jī)廠商,覆蓋 4.6 億+ 設(shè)備量。
5、Hardcoder 開源
從微信技術(shù)開放共享的理念出發(fā),我們在騰訊內(nèi)部進(jìn)行了 Hardcoder 框架的宣傳和推廣,包括手機(jī) QQ、企業(yè)微信、天天快報(bào)等多個(gè)應(yīng)用團(tuán)隊(duì)接入。其中手機(jī) QQ 接入 Hardcoder 后,在啟動(dòng)、打開聊天界面、發(fā)送圖片等場景的平均優(yōu)化效果達(dá) 10%-50%。 我們現(xiàn)將 Hardcoder 框架開源,讓更多 Android 開發(fā)者享受到 Hardcoder 框架的價(jià)值,解決大家在性能優(yōu)化和機(jī)型適配上的煩惱。 歡迎大家查閱 github 網(wǎng)址:http://github.com/Tencent/Hardcoder.git