2011-09-20 5 views
0

나는 어떤 종류의 팝업 창으로 작동하는 위젯을 만들었으므로 그림자를 주변에두고 광학적으로 배경에서 올려 놓아야합니다.임베디드 시스템에서 QGraphicsDropShadowEffect hogs cpu

이 응용 프로그램은 인텔 아톰 CPU, 사용자 정의 리눅스 배포판과 임베디드 시스템에서 실행
dropshadow = new QGraphicsDropShadowEffect(this); 
dropshadow->setBlurRadius(32); 
dropshadow->setColor(QColor("#121212")); 
dropshadow->setOffset(0,0); 
setGraphicsEffect(dropshadow); 

, Qt는 v4.7.3이 QWS 서버와 실행 다음과 같이 내 팝업 위젯의 생성자의 그림자 효과를 초기화 . 드롭 그림자를 비활성화하면 GUI가 유휴 상태 일 때 CPU 사용량이 10 % 미만입니다. 드롭 섀도우를 활성화하면 CPU 사용량이 80 % 이상으로 높아집니다. 앱을 프로파일 링하면 대부분의 CPU 시간이 libQtGui.so.4.7.3 내에서 소비됨을 알 수 있습니다.

GUI에서 아무 일도 일어나지 않고 마우스 움직임이 없더라도 CPU 사용량이 왜 이렇게 폭발하는지 아이디어가 있습니까?

편집 : 팝업 크기를 변경하면 CPU 사용량이 변경됩니다. 크기를 1/4로 줄이면 CPU 사용이 약 4 분의 1로 줄어 듭니다. 아주 이상한.

+1

이상하지 않습니다. 아마도 그림자의 구현은 그림자가있는 픽셀의 양으로 증가하는 작업을합니다 :) 그리고 "유휴"는 무엇을 의미합니까? Qt/E는 항상 화면을 다시 그리거나 무언가가 다시 그리기, 메타 링크를 유발합니다. – Torp

+0

글쎄요, Qt는 항상 임베디드 시스템에서 항상 그리지 않는 것이 현명하다고 생각합니다. 아무런 변화가 없으면, 즉 마우스 움직임이없고 보이는 위젯에는 변화가 없습니다. 그렇지 않으면 CPU 사용률이 100 %가 될 것입니다. 시간, 그렇지? – arne

+0

팝업 안에 깜박이는 커서가 있습니까? – alexisdm

답변

1

문제는 부분적으로 그림자 만있는 것이 었습니다. 그림자를 다시 그리는 데는 상당량의 CPU 시간이 필요합니다. 너무 자주 다시 그려지 지 않으면 정상입니다. 문제는 정말 간단했습니다. 이 팝업 뒤에 있던 위젯은 초당 4-5 번 다시 그려 졌기 때문에 다시 그려야했습니다. 이것은 엄청난 양의 CPU 시간을 삼켰습니다. 해결책은 똑같이 간단합니다. 실제로 화면에서 아무 것도 변경되지 않으면 이벤트를 다시 그리지 마십시오.

+0

불행히도 드롭 섀도우는 팝업 내에 그림이 그려지는 경우 CPU로드가 높습니다. 깜박이는 커서. 그림자는 변경되지 않지만 항상 다시 칠합니다. – Ber

+0

@Ber : 얼마나 불행한가요? 나는 몰랐으며 당시에는 눈치 채지 못했습니다. – arne