2014-02-08 2 views
5

adb 명령 "dumpsys SurfaceFlinger"의 출력에 대한 문서가 있습니까?dumpsys 감각을 만드는 방법 SurfaceFlinger

특히, 나는 HWC 또는 GLES 레이어 유형의 차이점을 이해하고 싶습니다. numHwLayers는 무엇을 의미합니까? 나는 내 자신의 질문에 대답 파악 충분히 가지고 있지만, 사람이 추가 입력이있는 경우에 그들을 남겨주세요

mDebugForceFakeVSync=0 
    Display[0] : 768x1280, xdpi=319.790009, ydpi=318.744995, refresh=16666667 
    numHwLayers=5, flags=00000000 
    type | handle | hints | flags | tr | blend | format |  source crop   |   frame   name 
------------+----------+----------+----------+----+-------+----------+---------------------------+-------------------------------- 
     GLES | b7e1c440 | 00000002 | 00000000 | 00 | 00100 | 00000002 | [ 334, 56, 1102, 1190] | [ 0, 50, 768, 1184] com.android.systemui.ImageWallpaper 
     GLES | b7e1d7c8 | 00000002 | 00000000 | 00 | 00105 | 00000001 | [ 0, 50, 768, 1184] | [ 0, 50, 768, 1184] com.android.launcher/com.android.launcher2.Launcher 
     GLES | b7e701e0 | 00000002 | 00000000 | 00 | 00105 | 00000001 | [ 0, 0, 768, 50] | [ 0, 0, 768, 50] StatusBar 
     GLES | b7e1df68 | 00000002 | 00000000 | 00 | 00100 | 00000001 | [ 0, 0, 768, 96] | [ 0, 1184, 768, 1280] NavigationBar 
    FB TARGET | b7dd3ab0 | 00000000 | 00000000 | 00 | 00105 | 00000001 | [ 0, 0, 768, 1280] | [ 0, 0, 768, 1280] HWC_FRAMEBUFFER_TARGET 
+1

https://android.googlesource.com/platform/frameworks/native/+/master/services/surfaceflinger/ 및 https://android.googlesource.com/platform/frameworks/native/+에서 헤더 파일을 읽습니다./master/services/surfaceflinger/DisplayHardware/ –

+0

감사합니다! 아래 내 대답을 참조하십시오. –

+0

https://source.android.com/devices/graphics/architecture.html – fadden

답변

11

확인 : 여기

내가 말하는거야 dumpsys SurfaceFlinger의 섹션입니다 코멘트. 아래에 나와있는 몇 가지 추가 사항이 있습니다. 아직 명확하지 않습니다. http://source.android.com/devices/graphics.html

이 링크에 발견하면, 이미지가 디스플레이로 전송되는 두 가지 방법이 있습니다 :

먼저, 아래 링크 이미지 렌더링 및 컴 포지 팅이 SurfaceFlinger의를 통해 발생하는 방법에 대한 몇 가지를 설명하는 데 도움이됩니다. 하나는 디스플레이로 보내기 전에 GPU로 이미지를 처리하는 것이고, 다른 하나는 디스플레이의 하드웨어 오버레이를 사용하여 GPU를 우회하여 디스플레이에 직접 이미지를 보내는 것입니다. 후자의 방법은 성능이 뛰어나지 만 특정 수의 레이어/오버레이 (일반적으로 4)로 제한됩니다. 레이어가 더 많은 경우 GPU에서 처리해야합니다.

내 질문의 중심에있는 dumpsys SurfaceFlinger의 부분은 dumpsys가 호출 될 때 얼마나 많은 레이어가 있는지를 보여줍니다. 그리고 하드웨어 구성자 (HWC) 또는 GPU (GLES). 이것은 HWC와 GLES의 의미를 설명합니다. 또한 numHwLayers는 디스플레이가 지원하는 오버레이의 수 (일반적으로 4)입니다.

또한 "원본 자르기"및 "프레임"좌표가 있습니다. 소스 자르기는 표시 될 이미지 섹션입니다. 예를 들어, 여러 개의 디스플레이 화면에 걸쳐있는 배경 화면 (화면간에 스 와이프 할 때 홈 화면에서 보게되는 것을 생각할 때)은 주어진 순간에 표시 할 큰 배경 이미지의 하위 섹션 만 필요합니다. 즉, 원본 자르기는 현재 사용중인 전체 이미지의 섹션을 알려주는 것입니다. 프레임 부분은 소스 이미지의 해당 부분이 실제로 화면에 표시 될 부분입니다.

dumpsys SurfaceFlinger의 명령의이 부분에 대한 코드는 여기에 있습니다 : \ 프레임 워크 \ SurfaceFlinger의 \ DisplayHardware \ HWComposer.cpp이

그것은라는 함수에

"HWComposer :: 덤프"의 기본 \ 서비스를 \

위의 내용은 원래의 질문에 대한 답변이지만 다음은 내가 알아챈 몇 가지 추가 사항입니다.

HWC 및 GLES보다 많은 구성 유형이있는 것 같습니다. 위에서 언급 한 코드에서 "BACKGROUND"와 "FB TARGET"복합 유형을 봅니다. FB TARGET은 adb에 "dumpsys SurfaceFlinger"를 입력 할 때 항상 나타나는 것으로 보입니다. FB 타겟은 단순히 전체 이미지가 쓰여지는 프레임 버퍼라고 생각합니다 (누군가 이것을 확인하십시오). 장치가 잠 들어 있더라도이 FB 대상을 보게됩니다. 내가 이해할 수없는 것은이 BACKGROUND 유형이 무엇인가? 나도 그걸 추측 할 수 없다. 이것이 무엇인지 아는 경우 의견을 남겨주십시오.

감사합니다.

+3

멋진 글쓰기! 'FB TARGET'에 대해 옳습니다. * 모든 * 레이어가 오버레이와 합성 된 경우에는 GLES 합성이 없으며 프레임 버퍼 대상 레이어는 사용되지 않습니다. 유휴 시스템에서 (화면에 아무것도 표시되지 않는 경우) HWC는 실제로 작성하는 데 필요한 전력이 적기 때문에 실제로는 GLES로 전환 할 수 있으며 FB 대상 계층을 60fps에서 여러 계층을 오버레이로 구성하는 것보다 반복적으로 표시합니다. http://stackoverflow.com/questions/20822309/ (여기에 링크가 있습니다)도 참조하십시오. 배경 무시. – fadden

+0

시스템이 유휴 상태 일 경우 FB 타겟이 모두 표시 될 수 있음을 지적 해 주셔서 감사합니다. 매우 흥미 롭습니다. 입력에 감사드립니다. –

+0

@fadden SurfaceFlinger의 dumpsys에 '페이드 에지'(스크롤 가능한 뷰의 경우)가 표시됩니다. 아니면 View 레이어의 렌더러에서 구현 되었습니까? – nmr

0

나는 그가 위에 언급을 추가 할 수 있습니다. dumpsys 출력에서 ​​볼 수 있듯이 타입은 imagewallpaper, luncher, 상태 표시 줄, 탐색기 표시 줄의 경우 GLES로 표시됩니다.이 탐색 표시 줄은 표면 링거 및 합성물로 처리 된이 레이어 버퍼를 의미하며 FB 대상으로 렌더링됩니다.

감사합니다.

관련 문제