libcairo2 ver. 1.2.0
Ależ mnie to krwi napsuło. A tu się okazuje … Ale od początku.
Ostatnio przysiadłem nad tematem optymalizacji GUI i sprawdzaniu, który engine GTK+ lub styl jest wydajniejszy itp. ‘Przysiadłem’ to dość górnolotne słowo, bo sprawą zająłem się od strony użytkownika, a nie grzebaniu w kodzie źródłowym.
W zasadzie, większość silników GTK+ ma podobne osiągi jeżeli chodzi o prędkość. Czasem zamulanie interfejsu wynika ze źle napisanego stylu, lub nieumiejętnego wykorzystania zasobów. Zdarzają się rażace przykłady tematów, które do swojej pracy wymagają tytanicznych mocy komputera, aby wszystko chodziło składnie… Ale w zasadzie nie o tym miało być …
To sprawdzanie i próba poprawiania prędkości interfejsu, wzięła się stąd, że posiadam bądź co bądź dość sprawny komputer ( Athlon XP 2200+, 512 MB, GForce 6600, dysk UDMA 100 ). Na dodatek korzystam XFCE, któremu brak ociężałości wielu dodatków które znajdziemy np. w Gnome.
Rzecz jasna, system i GUI działa mi sprawnie, w stopniu umożliwiającym sprawne działanie. Lecz.
Otóż pojawiły się dziwne zgrzyty przy wyświetlaniu tekstu np. w Xchat’cie, Pan’ie i kilku innych aplikacjach. Ani chybi, to wina którejś aktualizacji. Taki urok używania niestabilnych wersji paczek.
Na oko wydaje mi się, przy otwieraniu nowych okien ( zapis, odczyt, preferencje, itp itd ), że najpierw pojawia się ramka, następnie wypełnia się treść okna. Oczywiście, może to być złudzenie, bo jak mówią, na oko to chłop w szpitalu zmarł. Podejrzenia padły na renderowanie czcionki. Nad tym to od dłuższego czasu developerzy jakoś nie mogą zapanować w stopniu co najmniej bardzo dobry. Jest nieźle, ale czemu by nie lepiej.
Ale wiedziony tropem, postanowiłem sprawdzić co w trawie piszczy. Domowe sposoby benchmark’owania szybkości rysowania się okien można o kant … stołu potrzaskać. Ale znalazłem program, którego twórca chyba czytał w moich myślach i umieścił prawie wszystkie aspekty takiego testowania GUI które próbowałem wdrożyć.
Mowa o programie GtkPerf. Program jak program, każdy może sobie ściągnąć i spróbować uruchomić, rzecz natomiast w tym, co mi się udało tym programem wymierzyć.
Aby testy przebiegły szybko, przyjąłem rząd powtórzeń x 100. Styl i silnik na jakim to sprawdzałem, to Murrine GTK2 Cairo Engine ( wiem, Cairo != szybkość, ale o tym też poniżej, odegra ono podstawową rolę w tym przedstawieniu ). Program sprawdza kolejno każdy z widget’ów GTK+.
Postanowiłem na początek sprawdzić fonty z anty-aliasingiem i bez, oraz starsze wersje libcairo2 oraz libpango.
Debian Unstable ( Etch )
Xorg : 6.9.0
Sterowniki Nvidii : 1.0-8762
Konfiguracja Xorg’a : RenderAccel “on”, NvAGP “3”, Composite “Enable”
Fonty : ttf, anty-aliasing, hinting pełen, wyświetlanie podpikselowe
Sprzęt jak wymieniłem wcześniej
Wszystko gotowe do testu – obnaż programie co mi tu nie pasuje !
Temat : Murrine
libcairo2 ver. 1.2.0
Z anty-aliasingiem
Ilość : 100GtkPerf 0.40 – Starting testing: Wed Jul 26 18:17:03 2006
GtkEntry – time: 0,18
GtkComboBox – time: 4,31
GtkComboBoxEntry – time: 4,08
GtkSpinButton – time: 0,90
GtkProgressBar – time: 0,58
GtkToggleButton – time: 1,54
GtkCheckButton – time: 1,48
GtkRadioButton – time: 2,05
GtkTextView – Add text – time: 1,42
GtkTextView – Scroll – time: 1,66
GtkDrawingArea – Lines – time: 0,68
GtkDrawingArea – Circles – time: 0,90
GtkDrawingArea – Text – time: 26,01
GtkDrawingArea – Pixbufs – time: 0,40
—
Total time: 46,19
Temat : Murrine
libcairo2 ver. 1.2.0
Bez anty-aliasingu
Ilość : 100GtkPerf 0.40 – Starting testing: Wed Jul 26 18:25:23 2006
GtkEntry – time: 0,18
GtkComboBox – time: 4,11
GtkComboBoxEntry – time: 3,99
GtkSpinButton – time: 0,88
GtkProgressBar – time: 0,42
GtkToggleButton – time: 1,30
GtkCheckButton – time: 1,22
GtkRadioButton – time: 1,66
GtkTextView – Add text – time: 1,37
GtkTextView – Scroll – time: 1,51
GtkDrawingArea – Lines – time: 0,63
GtkDrawingArea – Circles – time: 0,88
GtkDrawingArea – Text – time: 7,79
GtkDrawingArea – Pixbufs – time: 0,38
—
Total time: 26,31
Jak widać, różnica spora – 26,31 sekund z wyłączonym anty-aliasingiem fontów, 46,19 z włączonym. No to czas na zmianę libcairo2 i ponownie ten sam zestaw ćwiczeń dla komputera :
Temat : Murrine
libcairo2 ver. 1.0.4
Z anty-aliasingiem
Ilość : 100GtkPerf 0.40 – Starting testing: Wed Jul 26 20:51:45 2006
GtkEntry – time: 0,10
GtkComboBox – time: 2,21
GtkComboBoxEntry – time: 1,99
GtkSpinButton – time: 0,31
GtkProgressBar – time: 0,20
GtkToggleButton – time: 0,93
GtkCheckButton – time: 0,77
GtkRadioButton – time: 1,13
GtkTextView – Add text – time: 1,11
GtkTextView – Scroll – time: 1,08
GtkDrawingArea – Lines – time: 0,75
GtkDrawingArea – Circles – time: 0,94
GtkDrawingArea – Text – time: 19,46
GtkDrawingArea – Pixbufs – time: 0,71
—
Total time: 31,71
Temat : Murrine
libcairo2 ver. 1.0.4
Bez anty-aliasingu
Ilość : 100GtkPerf 0.40 – Starting testing: Wed Jul 26 20:51:09 2006
GtkEntry – time: 0,09
GtkComboBox – time: 2,40
GtkComboBoxEntry – time: 2,06
GtkSpinButton – time: 0,31
GtkProgressBar – time: 0,16
GtkToggleButton – time: 0,87
GtkCheckButton – time: 0,71
GtkRadioButton – time: 1,11
GtkTextView – Add text – time: 1,31
GtkTextView – Scroll – time: 1,48
GtkDrawingArea – Lines – time: 0,75
GtkDrawingArea – Circles – time: 0,94
GtkDrawingArea – Text – time: 1,08
GtkDrawingArea – Pixbufs – time: 0,40
—
Total time: 13,70
Jak widać, starsze libcairo2 1.0.4 radzi sobie o wiele lepiej ( ? ) od wersji 1.2.0 i przynajmniej u mnie zostaje ono na komputerze do czasu poprawionej wersji. Przy starej wersji biblioteki zniknął też problem z rysowaniem tesktu w X-chat’cie itp.
Ciekawostką jest, że tekst z anty-aliasingiem w tym drugim przykładzie rysuje się nieco szybciej ( i wpływa na inne widget’y ) niż bez. Sprawę zawala jednak GtkDrawingArea i Text.
Konkluzja ? Nie wszystko co nowe jest dobre, a używanie niestabilnych wersji ma też swoje uroki.
Mógłbym jeszcze przeprowadzić testy szybkości interfejsu dla innych silników tematycznych GTK+, ale tak się ucieszyłem, że starsza biblioteka działa dobrze, że testy takie możecie wykonać na swój rozrachunek.
Mam wrażenie, że ten engine Murrine nie jest do końca jednak taki szybkie jakbym chciał. Ale to już przypowieść na inny wieczór.
Post scriptum :
Zapomniałem o jednej rzeczy, przy testowaniu szybkości widget’ów – wyświetlanie podpikselowe. Wyłączyłem i ( dla starej biblioteki libcairo2 1.0.4, bo bez tej opcji i z nową biblioteką tekst w Xchat’cie też skakał ) :
Temat : Murrine
libcairo2 ver. 1.0.4
Z anty-aliasingiem
Bez podpikselowego wyświetlania
Ilość : 100GtkPerf 0.40 – Starting testing: Wed Jul 26 22:07:16 2006
GtkEntry – time: 0,06
GtkComboBox – time: 2,16
GtkComboBoxEntry – time: 1,95
GtkSpinButton – time: 0,29
GtkProgressBar – time: 0,16
GtkToggleButton – time: 0,82
GtkCheckButton – time: 0,69
GtkRadioButton – time: 1,05
GtkTextView – Add text – time: 1,12
GtkTextView – Scroll – time: 1,07
GtkDrawingArea – Lines – time: 0,71
GtkDrawingArea – Circles – time: 0,93
GtkDrawingArea – Text – time: 1,00
GtkDrawingArea – Pixbufs – time: 0,39
—
Total time: 12,42