欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Systrace分析知識點介紹

哆啦安全 ? 來源:程序員Android ? 2023-06-18 14:58 ? 次閱讀

一、抓取Systrace

1.1 使用手機抓取

使用Google 預(yù)留的開發(fā)者模式中的 系統(tǒng)跟蹤 功能抓取systrace。

步驟:

設(shè)置--開發(fā)者模式--系統(tǒng)跟蹤

trace文件保存路徑:

/data/local/traces

22d80396-0da5-11ee-962d-dac502259ad0.png

手機抓取trace

抓取完之后使用adb 命令 pull 出來即可

C:Users >adb pull /data/local/traces .
/data/local/traces/: 1 file pulled, 0 skipped. 95.1 MB/s (51342186 bytes in 0.515s)

C:Users >

1.2 python 命令抓取

參考命令如下:

 python systrace.py -o mynewtrace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res

比較麻煩,需要安裝環(huán)境,不推薦,有成熟腳本除外。

二、CPU模塊知識點

2.1 CPU頻率,CPU loading 計算

CPU loading 計算公式

CPU 負載loading = Wall duration ÷ 選擇CPU 個數(shù)÷ 選擇CPU的范圍

22f2ec74-0da5-11ee-962d-dac502259ad0.png

CPU Loading

2.2 Thread 在CPU中的狀態(tài)

綠色:運行中 Running

對于在CPU上執(zhí)行的進程,需要查看其運行時間、是否跑在該跑的核上、頻率是否夠等。

淺綠色:可運行 Runnable

對于在等待序列中的進程,需要查看是否有過多任務(wù)在等待、等待時間是否過長等。

白色:休眠中 Sleeping

這里一般是在等事件驅(qū)動。

橘色:不可中斷的睡眠態(tài)_IO_Block Uninterruptible Sleep | WakeKill - Block I/O

線程在I / O上被阻塞或等待磁盤操作完成。

紫色:不可中斷的睡眠態(tài) Uninterruptible Sleep

線程在另一個內(nèi)核操作(通常是內(nèi)存管理)上被阻塞。

舉例如下:

233d9684-0da5-11ee-962d-dac502259ad0.png

Thread 在CPU中的狀態(tài)

2.3 CPU 喚醒關(guān)系查看

首先點擊查看當前線程正在哪個 CPU 中運行

23621b1c-0da5-11ee-962d-dac502259ad0.png

CPU 喚醒關(guān)系查看一

點擊查看 Thread 的 箭頭,既可以查看是被誰喚醒的

237d9afe-0da5-11ee-962d-dac502259ad0.png

CPU 喚醒關(guān)系查看二

三、input 點擊事件處理流程

3.1 Android 點擊事件處理流程概覽

SystemServer AppLaunch_dispatchPtr:Up 處理點擊up事件

SystemServer 通過InputReader讀取屏幕點擊事件后,將點擊事件通過InputDispatcher 進行分發(fā)

SystemServer OutboundQueue 接收存放即將派發(fā)給AppConnection 的點擊事件

SystemServer WaitQueue接收存放已經(jīng)派發(fā)給AppConnection ,但 App還在處理且沒有返回成功的點擊事件

Launcher deliverInputEvent: Launcher 桌面 被input事件喚醒

Camera APP bind 通過跟SystemServer bind 調(diào)用,開始啟動Camera

3.2 Android 點擊事件處理流程圖

Android 點擊事件處理流程圖如下:

23af855a-0da5-11ee-962d-dac502259ad0.png

Android 點擊事件處理流程圖

3.2 Android 點擊事件處理關(guān)鍵TAG

TAG名字 所在進程 備注
AppLaunch_dispatchPtr:Down SystemServer 點擊Down事件
AppLaunch_dispatchPtr:Up SystemServer 點擊up事件
InputReader SystemServer 點擊事件讀取
InputDispatcher SystemServer 點擊事件分發(fā)
oq SystemServer OutBoundQueue 點擊事件存放
wq SystemServer WaitQueue 點擊事件待消費返回
deliverInputEvent Launcher app 點擊事件消費

四、Vsync 事件處理

Vsync 信號可以由硬件產(chǎn)生,也可以用軟件模擬,不過現(xiàn)在基本上都是硬件產(chǎn)生,負責產(chǎn)生硬件 Vsync 的是 HWC,HWC 可生成 VSYNC 事件并通過回調(diào)將事件發(fā)送到 SurfaceFlinger , DispSync 將 Vsync 生成由 Choreographer 和 SurfaceFlinger 使用的 VSYNC_APP 和 VSYNC_SF 信號

4.1 VSYNC_app信號app處理

第一階段:
App 在收到 Vsync-App 的時候,在主線程進行 measure、layout、draw(構(gòu)建 DisplayList , 里面包含 OpenGL 渲染需要的命令及數(shù)據(jù)) 。這里對應(yīng)的 Systrace 中的主線程 doFrame 操作

第二階段:
CPU 將數(shù)據(jù)上傳(共享或者拷貝)給 GPU,這里 ARM 設(shè)備 內(nèi)存一般是 GPU 和 CPU 共享內(nèi)存。這里對應(yīng)的 Systrace 中的渲染線程的 flush drawing commands 操作

第三階段:
通知 GPU 渲染,真機一般不會阻塞等待 GPU 渲染結(jié)束,CPU 通知結(jié)束后就返回繼續(xù)執(zhí)行其他任務(wù),使用 Fence 機制輔助 GPU CPU 進行同步操作

第四 階段:
swapBuffers,并通知 SurfaceFlinger 圖層合成。這里對應(yīng)的 Systrace 中的渲染線程的 eglSwapBuffersWithDamageKHR 操作
VSYNC_app信號處理流程如下:

23e6e7fc-0da5-11ee-962d-dac502259ad0.png

VSYNC_app信號處理

4.2 VSYNC_sf 信號SF處理

第五階段:
SurfaceFlinger 開始合成圖層,如果之前提交的 GPU 渲染任務(wù)沒結(jié)束,則等待 GPU 渲染完成,再合成(Fence 機制),合成依然是依賴 GPU,不過這就是下一個任務(wù)了.這里對應(yīng)的 Systrace 中的 SurfaceFlinger 主線程的 onMessageReceived 操作(包括 handleTransaction、handleMessageInvalidate、handleMessageRefresh)SurfaceFlinger 在合成的時候,會將一些合成工作委托給 Hardware Composer,從而降低來自 OpenGL 和 GPU 的負載,只有 Hardware Composer 無法處理的圖層,或者指定用 OpenGL 處理的圖層,其他的 圖層偶會使用 Hardware Composer 進行合成

第六階段 :
最終合成好的數(shù)據(jù)放到屏幕對應(yīng)的 Frame Buffer 中,固定刷新的時候就可以看到了
VSYNC_sf 信號SF處理流程如下:

24226340-0da5-11ee-962d-dac502259ad0.png

VSYNC_sf 信號SF處理

五、Android 繪制一幀流程分析

5.1 顯示一幀流程概覽

244e5450-0da5-11ee-962d-dac502259ad0.jpg

程序員Android

5.1.1 Android 顯示一幀大致分為下面 八步:

App 接收到 vsync-app 信號后開始工作。

App 主線程被Message喚醒,執(zhí)行onVsync。

App 執(zhí)行 doFrame ,處理input、animation、traversal、draw等。

App UIThread 跟RenderThread sync 數(shù)據(jù)。

App 執(zhí)行DrawFrame,從SurfaceFlinger(后續(xù)簡稱SF) 的 BufferQueue 中 Dequeue buffer,取出一個bufffer后,執(zhí)行渲染繪制,接著將繪制好的Buffer 通過queuebuffer 放回到。BufferQueue中給 SF消費。

App queuebuffer 后, SF 中對應(yīng)的 app buffer 會增加 +1。

Vsync-sf 到來后,SF 從BufferQueue 中 acquireBuffer一個Buffer 進行消費, 對應(yīng)SF 中的 app buffer 會減 - 1 , SF 消費處理后,通過 releaseBuffer 將buffer 歸還到BufferQueue 中。

SF 通過 bind 跟 Hardware Composer HAL(簡稱HWC) 進行通信,通過一些處理后顯示到手機屏幕上。

5.2 生產(chǎn)者,消費者 BufferQueue 流轉(zhuǎn)圖

24806774-0da5-11ee-962d-dac502259ad0.jpg

生產(chǎn)者,消費者 BufferQueue 流轉(zhuǎn)圖

dequeue(生產(chǎn)者發(fā)起) :
當生產(chǎn)者需要緩沖區(qū)時,它會通過調(diào)用 dequeueBuffer() 從 BufferQueue 請求一個可用的緩沖區(qū),并指定緩沖區(qū)的寬度、高度、像素格式和使用標記。

queue(生產(chǎn)者發(fā)起):
生產(chǎn)者填充緩沖區(qū)并通過調(diào)用 queueBuffer() 將緩沖區(qū)返回到隊列。

acquire(消費者發(fā)起) :
消費者通過 acquireBuffer() 獲取該緩沖區(qū)并使用該緩沖區(qū)的內(nèi)容

release(消費者發(fā)起) :
當消費者操作完成后,它會通過調(diào)用 releaseBuffer() 將該緩沖區(qū)返回到隊列

5.3 App ,SF Buffer 交互圖

24a23426-0da5-11ee-962d-dac502259ad0.jpg

App ,SF Buffer 交互圖

App 通過bind 向SF dequeuebuffer 進行buffer申請

SF 對端完成對bufferQueue 的dequeuebuffer的申請

App 處理合成完后,通過binder向SF queuebuffer 申請buffer 入隊。

SF 對端通過queuebuffer 完成buffer 對BufferQueue的入隊申請,供SF消費并顯示到屏幕上

5.4 SF 跟 HWC 交互圖

SurfaceFlinger 接受來自多個來源的數(shù)據(jù)緩沖區(qū),對它們進行合成,然后發(fā)送到顯示設(shè)備。

24d17696-0da5-11ee-962d-dac502259ad0.jpg

SF 送顯圖

24e64094-0da5-11ee-962d-dac502259ad0.jpg

SF 跟 HWC 交互圖

vsync-sf 周期到來,SF 開始繪制準備工作

SF 通過 acquirebuffer 從BufferQueue 中取出一幀進行消費

App 對應(yīng)的BufferQueue 在SF acquirebuffer 后對那個的值會 -1

App 對應(yīng)的buffer 值為 2

App 對應(yīng)的buffer值 在SF acquirebuffer 后變?yōu)?1

SF 跟HWC 通過binder 通信處理完后,通過rleasebuffer將buffer 歸還到BufferQueue中,緊接著一幀就可以顯示出來

六、Camx Trace TAG開啟方法

6.1 打開 Camx HAL 層 camx log tag

執(zhí)行以下命令,打開camx trace log tag

     adb root
     adb remount
     adb shell mkdir /vendor/etc/camera
     adb shell rm -rf  /vendor/etc/camera/camxoverridesettings.txt
     adb shell touch  /vendor/etc/camera/camxoverridesettings.txt
     adb shell "echo traceGroupsEnable=0x10080 >> /vendor/etc/camera/camxoverridesettings.txt"
     adb shell "echo traceErrorEnable=TRUE >> /vendor/etc/camera/camxoverridesettings.txt"
     adb shell "echo traceOutputEnable=0x10080 >> /vendor/etc/camera/camxoverridesettings.txt"
     adb shell cat /vendor/etc/camera/camxoverridesettings.txt
     adb reboot

6.2 重啟手機后打開kernel 的trace開關(guān)

重啟后打開kernel trace 開關(guān)

       adb root
       adb remount
       adb shell "echo 1 > /sys/kernel/tracing/events/camera/enable"





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9180

    瀏覽量

    369495
  • OpenGL
    +關(guān)注

    關(guān)注

    1

    文章

    85

    瀏覽量

    29339
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4811

    瀏覽量

    85080
  • HAL庫
    +關(guān)注

    關(guān)注

    1

    文章

    121

    瀏覽量

    6388

原文標題:Systrace分析知識點

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    C語言鏈表知識點(2)

    C語言鏈表知識點(2)
    發(fā)表于 08-22 10:38 ?356次閱讀
    C語言鏈表<b class='flag-5'>知識點</b>(2)

    電機與拖動知識點及其試題

    電機與拖動知識點分析一、基本知識與基礎(chǔ)知識知識點常考題目二、直流電機一、基本知識與基礎(chǔ)
    發(fā)表于 06-29 07:10

    計算機組成原理考研知識點歸納

    計算機組成原理考研知識點歸納 寫在前面的話:理科知識重在于理解知識點本身,對于每一個知識點,大家都有自己理解的方式。這篇
    發(fā)表于 04-13 14:06 ?1928次閱讀

    高一數(shù)學知識點總結(jié)

    高一數(shù)學知識點總結(jié)高一數(shù)學知識點總結(jié)高一數(shù)學知識點總結(jié)
    發(fā)表于 02-23 15:27 ?0次下載

    高二數(shù)學知識點總結(jié)

    高二數(shù)學知識點總結(jié)高二數(shù)學知識點總結(jié)高二數(shù)學知識點總結(jié)
    發(fā)表于 02-23 15:27 ?0次下載

    SI、PI、EMC、RF知識點

    SI、PI、EMC、RF知識點
    發(fā)表于 01-14 02:53 ?17次下載

    PWM知識點詳解

    PWM知識點
    發(fā)表于 03-16 08:00 ?44次下載

    Python的基礎(chǔ)語法知識點大全

    本文檔的主要內(nèi)容詳細介紹的是Python的基礎(chǔ)語法知識點大全。
    發(fā)表于 06-12 08:00 ?1次下載

    嵌入式知識點總結(jié)

    嵌入式知識點總結(jié)(arm嵌入式開發(fā)led過程)-嵌入式知識點總結(jié)? ? ? ? ? ? ? ? ? ??
    發(fā)表于 07-30 14:20 ?23次下載
    嵌入式<b class='flag-5'>知識點</b>總結(jié)

    電力基礎(chǔ)知識點合集

    電力基礎(chǔ)知識點合集
    發(fā)表于 03-14 16:35 ?0次下載

    詳解射頻微波基礎(chǔ)知識點

    詳解射頻微波基礎(chǔ)知識點
    的頭像 發(fā)表于 01-29 10:28 ?2480次閱讀

    C語言最重要的知識點

    C語言知識點總結(jié).doc
    發(fā)表于 02-16 16:37 ?9次下載

    數(shù)字電路知識點總結(jié)

    本文整理了數(shù)字電路課程中的相關(guān)基本的知識點和較為重要的知識點,用于求職的數(shù)電部分的知識準備,差缺補漏。
    的頭像 發(fā)表于 05-30 15:07 ?5069次閱讀
    數(shù)字電路<b class='flag-5'>知識點</b>總結(jié)

    滾珠螺桿的基本知識點

    滾珠螺桿的基本知識點
    的頭像 發(fā)表于 07-07 17:40 ?1621次閱讀
    滾珠螺桿的基本<b class='flag-5'>知識點</b>

    STM32 RTOS知識點

    電子發(fā)燒友網(wǎng)站提供《STM32 RTOS知識點.pdf》資料免費下載
    發(fā)表于 08-01 14:28 ?3次下載
    STM32 RTOS<b class='flag-5'>知識點</b>