2014-09-19 1 views
0

최근 발표 된 "GPU over draw"기능이 어떻게 작동하는지 이해하려고합니다. 화면의 특정 부분이 두 번 또는 세 번 그린 이유는 무엇입니까? 이게 실제로 어떻게 작동합니까? 이것은 레이아웃의 중첩과 관련이 있습니까? 이것을 극복하는 방법. Windows 전화에서 우리는 다시 그리기를 캐시하고 반복해서 그리는 것을 방지하는 Bitmapcachemode과 같은 옵션을 가지고 있습니다. Android에 이와 비슷한 것이 있습니까? 유리의 최신 버전으로Google Glass에서 GPU 오버 draw을 최소화하는 방법은 무엇입니까?

(아래의 코드 조각은 공식 Google 문서 도구에서이다), 개발자가 의 옵션을 사용하면이에 대한 설정을 켜 draw.When을 통해 GPU 투입이 시스템 각 픽셀의 색상을합니다 얼마나 많은 시간에 따라 화면에 마지막 페인트주기에서 그려진. 이 설정은 깊이 중첩 된 레이아웃이나 복잡한 페인트 논리로 인해 성능 문제를 디버그하는 데 도움이됩니다.

Pixels drawn in their original color were only drawn once. 
Pixels shaded in blue were drawn twice. 
Pixels shaded in green were drawn three times. 
Pixels shaded in light red were drawn four times. 
Pixels shaded in dark red were drawn five or more times. 

출처 - Google 공식 문서

+1

Out of the topic : 적극적인 개발자가 있기 때문에이 위대한 프로젝트가 여전히 살아 있다는 것을 알려 줘서 고마워! –

답변

1

GPU 오버 드로 기능은 단순히 오버 드로를 시각화하기위한 디버깅 도구입니다. 과도하게 오버 드로하면 UI 스레드에서 시간이 오래 걸리기 때문에 그리기/애니메이션 성능이 떨어질 수 있습니다.

이 기능은 얼마 동안 Android에 제공되었으며 Glass는 켜기 위해 메뉴 옵션을 간단히 표시했습니다. 자세한 내용은 http://www.curious-creature.org/docs/android-performance-case-study-1.html의 "시각화 오버 드로"섹션을 참조하십시오.

오버 드로는 반드시 중첩 된 레이아웃으로 인한 것은 아닙니다. Overdraw는 화면의 동일한 영역에 그려지는 다른 뷰에 대한 뷰가있을 때 발생합니다. 예를 들어, 활동에 배경을 설정하는 것이 일반적이지만 배경이있는 전체 화면보기도 있습니다. 이 경우 화면의 모든 픽셀을 적어도 2 회 그립니다. 이 특정 문제를 해결하려면 하위보기로 인해 볼 수 없으므로 활동의 배경을 제거 할 수 있습니다.

현재 Android에는 자동 검색 기능이 없으므로 개발자가 구현시이를 고려해야합니다.

+0

응답 해 주셔서 감사합니다. 다시 텍스쳐를 다시 그릴 필요가 없도록 캐쉬 할 방법이 없다는 것을 의미합니까? –

+0

오버 드로는 반드시 캐싱으로 막을 수있는 것은 아닙니다. Android에서는보기가 계속해서 그려지지 않으며보기가 무효화되거나 더러워지면 그려집니다. 따라서 뷰가 정적으로 유지되면 (캐싱 될 수 있음) 일반적으로 뷰가 렌더링 될 때 처음으로 오버 드로 성능이 저하됩니다. 오버랩되는 뷰를 자주 업데이트하는 경우 문제가 발생합니다.이 인스턴스에서는 업데이트 된 뷰를 다른 뷰와 함께 다시 그려야 블렌딩이 고려됩니다. –

+0

감사합니다. 내가보기 엔 하나만있는 것은 "보기가 연속적으로 그려지지 않습니다"라는 것입니다. 30-60의 FPS로 화면에 렌더링되어야하므로 계속해서 화면에 그려집니다. 이것은 내가 이해하는 방법입니다. 처음 그래픽이 UI 스레드에 의해 렌더링 될 때 텍스처가 GPU로 넘겨지며 화면에 60FPS로 그릴 것입니다. 안드로이드에서 이것이 틀리면 나를 수정하십시오. –