Android GPU 過渡繪制小 Demo,真正的測試

最近也是年底了,大家也是各忙各的,有的炫耀年終獎(jiǎng),有的炫耀維多利亞的秘密。反正各種炫耀。

準(zhǔn)備

嗯,你沒有進(jìn)錯(cuò)。這里是性能板塊。我們還是回歸正題吧。畢竟在大話移動(dòng)2.0上面我們也要說點(diǎn)性能的東西。最近也是一邊在外演講一邊自己學(xué)習(xí)中。我們這里拿一個(gè)應(yīng)用來看吧。首先打開手機(jī)中的該項(xiàng)設(shè)置。

gpu1
gpu1

嘗試測試

我們打開我們要測試的應(yīng)用(注意這個(gè)是一個(gè)demo),進(jìn)入主頁面之后我們看到如下的界面。

gpu2
gpu2

也許有同學(xué)就要說了,啊呀不對啊。這個(gè)顏色這樣了。有bug!!!但是問題就在這里。到了這里我們根本不能算測試完畢,這個(gè)至少在正確的認(rèn)知中,這樣最多是測試不完整,因?yàn)槟悴⒉恢绬栴}出在哪里。所以接著我們還是要繼續(xù)做的,首先我們要來判斷是不是有問題。

標(biāo)準(zhǔn)

GPU繪制過渡,

顏色標(biāo)識: 從好到差:藍(lán)-綠-淡紅-紅

藍(lán)色1x過度繪制
綠色2x過度繪制
淡紅色3x過度繪制
紅色超過4x過度繪制
那么大家大概能夠心里有數(shù)了。接著我們要來真正的測試了。

排查

那么首先我們先來看下UI的結(jié)構(gòu)。如下圖,我們得知是CustomViewAbove這個(gè)View。


gpu3
gpu3

gpu4
gpu4

我們必須追查到代碼里,主要我們會(huì)關(guān)注兩個(gè)。

  1. 構(gòu)造函數(shù)
  2. 重寫的各種draw的方法

我們在代碼中看到如下構(gòu)造方法和draw的方法。

    public CustomViewAbove(Context context) {
        this(context, null);
    }

    public CustomViewAbove(Context context, AttributeSet attrs) {
        super(context, attrs);
        initCustomViewAbove();

    }

    void initCustomViewAbove() {
        // setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
        this.setBackgroundColor(getResources().getColor(
            R.color.backColor));
        setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS);
        setClickable(true);
        setFocusable(true);
        setWillNotDraw(false);
        final Context context = getContext();
        mScroller = new Scroller(context, sInterpolator);
        final ViewConfiguration configuration = ViewConfiguration.get(context);
        mTouchSlop = ViewConfigurationCompat
                .getScaledPagingTouchSlop(configuration);
        mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();
        mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
        setInternalPageChangeListener(new SimpleOnPageChangeListener() {
            public void onPageSelected(int position) {
                if (mViewBehind != null) {
                    switch (position) {
                    case 0:
                    case 2:
                        mViewBehind.setChildrenEnabled(true);
                        break;
                    case 1:
                        mViewBehind.setChildrenEnabled(false);
                        break;
                    }
                }
            }
        });

        final float density = context.getResources().getDisplayMetrics().density;
        mFlingDistance = (int) (MIN_DISTANCE_FOR_FLING * density);
    }

首先我們從主界面上面可以看到是一個(gè)類似于fragment的控件的效果,Android的Views大家都知道是一個(gè)樹狀結(jié)構(gòu),那么其實(shí)有很多肉眼看不到的view是不用去繪制的。否則雖然看不到,但是依然會(huì)是影響性能的。我們經(jīng)過嘗試之后,去掉了其中的

this.setBackgroundColor(getResources().getColor(
            R.color.backColor));
gpu5
gpu5

在這里的setBackground其實(shí)本身是繪制背景的,但是由于View的重疊,用戶并看不到這層繪制,但是的確重復(fù)繪制了。所以從效果上面我們可以看到從紅色變成了淡紅。

總結(jié)

大家不要上來就問測試怎么測試,安全怎么測試。性能和安全和你們執(zhí)行測試用例,和UI的功能自動(dòng)化是兩回事兒。很多需要人為的介入分析和嘗試。并不是說用一個(gè)工具去檢測下有沒有問題,有就有,沒有就沒有那么簡單。希望大家明白這點(diǎn)。

by monkey

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,667評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,635評論 2 380

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