1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      瀏覽內(nèi)核CPU不收斂問題定位和分析

      一 問題發(fā)現(xiàn)

           瀏覽內(nèi)核CPU 占用問題是影響用戶使用的關(guān)鍵因素,會引起操作卡頓、手機耗電以及應(yīng)用

      創(chuàng)新互聯(lián)是一家專業(yè)提供固鎮(zhèn)企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、成都網(wǎng)站制作H5頁面制作、小程序制作等業(yè)務(wù)。10年已為固鎮(zhèn)眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。

      崩潰等問題。CPU 占用由于受到頁面、機型、應(yīng)用框架的影響,較難進行定位和優(yōu)化。在瀏覽內(nèi)核性能測試中發(fā)現(xiàn)CPU 占用高于之前版本,通過分析CPU 曲線,發(fā)現(xiàn)可能是部分場景CPU 沒有收斂導(dǎo)致的,因此對CPU 收斂做了專項測試。

      老測試方案——內(nèi)核之前針對CPU 收斂的測試是通過加載用戶訪問Top 100 的頁面,應(yīng)用放后臺通過TOP 命令觀察CPU 收斂情況。

      缺點: 1.測試工作量非常大;2.Top頁面結(jié)構(gòu)復(fù)雜很難分析是頁面中的那個元素引起的不收斂現(xiàn)象;3.頁面經(jīng)常變化,收斂狀態(tài)難以穩(wěn)定復(fù)現(xiàn);

      新測試方案——通過對頁面的整理分析和與RD 的溝通,引起CPU 不收斂的問題主要是頁面中的動態(tài)元素,如CSS動畫、 視頻播放、 Timer 定時器、 js 加載、 gif動圖等,并由QA自己開發(fā)動態(tài)元素的測試頁面進行測試,在測試場景上選擇了應(yīng)用切后臺和頁面切換至不可見窗口兩種。

      優(yōu)點:1.測試工作量小,針對性強;2.頁面固定、元素簡單,易于復(fù)現(xiàn);3. 場景更加貼近用戶使用;

      測試結(jié)果:

           使用新測試方案完成測試后,發(fā)現(xiàn)如下幾個問題:

      問題一   頁面切換至不可見窗口場景:測試中心、CSS、H5、GIF 等多個頁面不收斂;

      問題二   APP 切后臺場景:測試中心頁面不收斂;

      二 初步分析

      問題一通過對測試結(jié)果的分析,當(dāng)用戶創(chuàng)建空白頁面,使測試頁面切換至不可見窗口的場景時,包含GIF 圖、CSS 動態(tài)元素的頁面CPU 仍然有波動,而沒有收斂至0, 這里可以猜測出可能當(dāng)頁面不可見時,頁面的繪制沒有進行pause,內(nèi)核判斷頁面動態(tài)元素有更新,因此還在不斷的進行繪制,導(dǎo)致CPU 不為0。

      問題二測試中心頁面不收斂,該頁面是測試平臺的導(dǎo)航頁面,本身沒有動態(tài)元素,但是仍有不收斂現(xiàn)象。QA通過繪制工具systrace分析頁面加載過程的數(shù)據(jù),發(fā)現(xiàn)切換切換后臺后,內(nèi)核的main(scheduler)/thread_proxy(cc)在工作,還在繪制內(nèi)容。推測有兩個可能:1.APP切后臺,沒有pause當(dāng)前的webview;2.測試中心首頁的某些邏輯導(dǎo)致內(nèi)核沒被pause。

      三 業(yè)務(wù)和代碼分析

      內(nèi)核加載過程——瀏覽內(nèi)核加載頁面的網(wǎng)絡(luò)部分向網(wǎng)絡(luò)發(fā)起請求并把網(wǎng)頁資源下載給Loader,之后 HTML Parser 將 HTML 和 Script 解析成 DOM 樹,再結(jié)合 CSS 層疊樣式表生成對應(yīng)的 Render 樹。Render 樹上就包含了每個元素的各種屬性字體、顏色、屏幕上面的坐標(biāo)、長、寬等。Render 樹進一步生成 Graphics Context 交給平臺相關(guān)的圖形庫把頁面展示在屏幕上。大體過程是如下圖這樣,實際上內(nèi)核是邊加載邊繪制的。

      瀏覽內(nèi)核CPU不收斂問題定位和分析              

      內(nèi)核繪制過程——瀏覽內(nèi)核為了減少不必要的繪制,保證頁面的繪制速度和頁面滑動的流暢度,對Render Tree 進行了分層,可以更方便的進行頁面的局部更新。有更新的layer 將更新數(shù)據(jù)經(jīng)過合成composite階段,將真正的需要繪制區(qū)域數(shù)據(jù)給GL 進行draw,最終完成圖像的顯示。整個過程是多線程的,通過消息來驅(qū)動這個流程。

       瀏覽內(nèi)核CPU不收斂問題定位和分析

           動態(tài)元素由于更新頻率高,通常會劃分為單獨的layer,如果這個layer 的更新消息沒有暫停,就會導(dǎo)致這個消息驅(qū)動layer 的合成,進行更新區(qū)域的計算,調(diào)用drawGL 進行圖像的draw。因此CPU 會一直被占用。

      四 真相大白

      問題一

           頁面動態(tài)元素不收斂,通過將頁面中動態(tài)元素刪除后,測試結(jié)果為收斂,由此可以證明確實是動態(tài)元素導(dǎo)致。動態(tài)元素有頻繁的更新消息,使得不斷對包含動態(tài)元素的layer 進行合成和繪制,導(dǎo)致CPU 不收斂。首先需要查看該webview 是否是否被pause,webview 被切換至不可見狀態(tài)時,策略上應(yīng)該暫停一切頁面的處理,節(jié)約更多的CPU和內(nèi)存資源保證當(dāng)前活動窗口的處理。

       //  webview onPause 的處理
      public void onPause() {
              if (mIsPaused || mNativeAwContents == 0) return;
              mIsPaused = true;
              nativeSetIsPaused(mNativeAwContents, mIsPaused);
      }

       內(nèi)核沒有對文檔解析、js 加載、動圖進行暫停。

      解決方案:

      // 網(wǎng)絡(luò)加載暫停
      void ContentViewCoreImpl::SetIsPaused(JNIEnv* env,
           jobject obj,
           bool paused) {
        GetWebContents()->Send(new ViewMsg_SetIsPaused(
            GetWebContents()->GetRoutingID(), paused));
      }
      // 繪制暫停
      void RenderViewImpl::OnSetIsPaused(bool paused) {
        if (!webview())
          return;
        webview()->setIsPaused(paused);
      }
      // 文檔解析暫停
      void WebViewImpl::setIsPaused(bool paused) {
          Document* document = page()->mainFrame()->document();
          if (!document)
              return;
          if (paused)
              document->suspendScheduledTasks();
          else
              document->resumeScheduledTasks();
      }

      問題二

           測試中心頁面不能收斂,此頁面并沒有動態(tài)元素,因此用上面的方法分析是不奏效的,需要找其他的方法。百度瀏覽內(nèi)核是基于Blink 35版本再次開發(fā)的版本,因此想要驗證下原生內(nèi)核是否有問題,于是驗證了Blink 35、36都是不收斂,blink 37 版本可以收斂,因此可以斷定是Blink 內(nèi)核自己的bug,通過對繪制過程相關(guān)代碼的查找,發(fā)現(xiàn)google 工程師對此問題的一個注釋。

      if (RenderView* view = renderView()) {
              ASSERT(!view->needsLayout());
              view->compositor()->updateCompositingLayers();
       
              // FIXME: we should not have any dirty bits left at this point. Unfortunately, this is not yet the case because
              // the code in updateCompositingLayers sometimes creates new dirty bits when updating direct compositing reasons.
              // See crbug.com/354100.
              view->compositor()->scheduleAnimationIfNeeded();
      }

           通過上面的注釋可以看出,在layer 有更新進行合成過程中,會引入臟數(shù)據(jù)導(dǎo)致layer 一直更新,并進行后面的數(shù)據(jù)處理和繪制,導(dǎo)致CPU 不收斂,通過增加打印Log 也可以證明,不收斂的頁面確實在不斷進行該函數(shù)的調(diào)用。

            通過對Blink 37 修復(fù)的patch 進行研究,內(nèi)核對判斷Layer 更新的狀態(tài)進行了修改,調(diào)整了更新判斷的結(jié)構(gòu),刪除了scheduleAnimationIfNeeded 方法,通過其他狀態(tài)判斷是否需要更新layer,并進行數(shù)據(jù)的合成進行繪制,通過將37 patch 合入測試發(fā)現(xiàn)可以有效解決不收斂問題。

      解決方案:

           增加了CompositingReasonFinder::requiresCompositingForPosition方法判斷是否需要進行合成。

      臟數(shù)據(jù)的問題還是沒有根本解決,只是增加了判斷,不會出現(xiàn)之前的循環(huán)處理。

      void RenderLayerCompositor::assertNoUnresolvedDirtyBits()
      {
          ASSERT(!compositingLayersNeedRebuild());
          ASSERT(!m_needsUpdateCompositingRequirementsState);
          ASSERT(m_pendingUpdateType == CompositingUpdateNone);
          ASSERT(!m_rootShouldAlwaysCompositeDirty);
      ASSERT(!m_needsToRecomputeCompositingRequirements);
      }

      五 總結(jié)

      CPU 收斂在CPU 性能測試中是一個非常重要的項目,對于用戶體驗的影響也是非常大。這個案例首先在CPU 收斂的測試方案上有很大的突破,通過較小的成本發(fā)現(xiàn)了不收斂的場景;其次,通過測試頁面和弱網(wǎng)環(huán)境穩(wěn)定復(fù)現(xiàn)bug,幫助RD定位問題,最后通過查閱blink 內(nèi)核的官方文檔、代碼記錄和bug 系統(tǒng),最終找到了解決方案, 提升了整體產(chǎn)品的體驗。

      百度MTC是業(yè)界領(lǐng)先的移動應(yīng)用測試服務(wù)平臺,為廣大開發(fā)者在移動應(yīng)用測試中面臨的成本、技術(shù)和效率問題提供解決方案。同時分享行業(yè)領(lǐng)先的百度技術(shù),作者來自百度員工和業(yè)界領(lǐng)袖等。

      >>如有問題,歡迎與我溝通


      網(wǎng)頁題目:瀏覽內(nèi)核CPU不收斂問題定位和分析
      鏈接分享:http://ef60e0e.cn/article/pposdh.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        美姑县| 图木舒克市| 长葛市| 扬州市| 吉林市| 灵璧县| 伊金霍洛旗| 华坪县| 台州市| 萍乡市| 庄浪县| 闸北区| 大新县| 富阳市| 淅川县| 博爱县| 长宁县| 六枝特区| 体育| 大渡口区| 永善县| 卢氏县| 福泉市| 海安县| 临夏县| 漳浦县| 石渠县| 平潭县| 新源县| 阿勒泰市| 武义县| 武宁县| 五寨县| 哈尔滨市| 兴宁市| 济阳县| 子洲县| 江山市| 于都县| 汝阳县| 扎兰屯市|