Mercurial > pidgin
view gaim.desktop @ 12233:02833a0ae716
[gaim-migrate @ 14535]
SF Patch #1367116 from Michael Carlson
"In profiling gaim, I noticed that on simply starting
CVS gaim, xmlnode_insert_child is using up by far the
most CPU time. After some testing, I realized the
reason why: xmlnode_insert_child is called some 18,000
times on startup, and it is inserting the child at the
end of the list each time, simply by traversing through
the entire linked list. Sometimes this list can have as
many as 800 elements.
This patch adds a variable to the _xmlnode struct,
lastchild, which simply keeps track of the last node in
the list of children. This is then used by
xmlnode_insert_child to insert at the end of the list,
instead of traversing through the whole list each time.
The two relevant functions in xmlnode.c that need to be
updated to keep track of this function appropriately
have been updated.
Running 3 times with and without the change, the
results from oprofile say it all. Here are the measured
number of clock cycles / % of total clock cycles /
function used to simply start and close gaim before the
change:
204 60.7143 xmlnode_insert_child
210 61.4035 xmlnode_insert_child
230 61.8280 xmlnode_insert_child
And after (note that one time no clock cycles were
caught at all)
3 2.5862 xmlnode_insert_child
3 2.5641 xmlnode_insert_child
This affects other areas of the program than just
starting up, but this seems to be the most noticeable
place."
Speed is good. As I was verifying this patch, I added some g_return_val_if_fail() checks.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sun, 27 Nov 2005 03:42:39 +0000 |
parents | 391acec18e46 |
children | 5adc0c9da9f3 |
line wrap: on
line source
[Desktop Entry] Encoding=UTF-8 Categories=Application;Network; Exec=gaim Icon=gaim.png StartupNotify=true Terminal=false Type=Application Name=Gaim Internet Messenger Name[ca]=Missatger d'Internet Gaim Name[cs]=Gaim Internet Messenger Name[da]=Gaim - internet beskeder Name[de]=Gaim Internet Messenger Name[es]=Gaim - cliente de mensajería de Internet Name[fr]=Gaim Messagerie Internet Name[hu]=Gaim azonnali üzenetküldő Name[it]=Gaim Internet Messenger Name[ja]=Gaim インターネット・メッセンジャー Name[ko]=게임 메신저 Name[nb]=Gaim lynmeldingsklient Name[nl]=Gaim - Expresberichten Name[pl]=Komunikator Internetowy Gaim Name[pt_BR]=Mensageiro via Internet Gaim Name[pt]=Mensageiro Internet Gaim Name[ro]=Mesagerul Gaim Name[ru]=Gaim - клиент обмена мгновенными сообщениями Name[sl]=Gaim - spletni sel Name[sq]=Lajmësjellësi Internet Gaim Name[sv]=Gaim Internet Messenger Name[zh_CN]=Gaim 互联网通讯程序 Name[zh_TW]=Gaim 網路即時通 GenericName=Internet Messenger GenericName[ca]=Missatger d'Internet GenericName[cs]=Internet Messenger GenericName[da]=Internet beskeder GenericName[de]=Internet Messenger GenericName[es]=Cliente de mensajería de Internet GenericName[fr]=Messagerie internet GenericName[hu]=Azonnali üzenetküldő GenericName[it]=Internet Messenger GenericName[ja]=インターネット・メッセンジャー GenericName[ko]=메신저 GenericName[nb]=Lynmeldingsklient GenericName[nl]=Expresberichten GenericName[pl]=Komunikator Internetowy GenericName[pt_BR]=Mensageiro via Internet GenericName[pt]=Mensageiro Internet GenericName[ro]=Client de mesagerie GenericName[ru]=Клиент обмена мгновенными сообщениями GenericName[sl]=Spletni sel GenericName[sq]=Lajmësjellës Internet GenericName[sv]=Meddelandeklient GenericName[zh_CN]=互联网通讯程序 GenericName[zh_TW]=網路即時通 Comment=Send instant messages over multiple protocols Comment[ca]=Envieu missatges instantanis en múltiples protocols Comment[cs]=Posílat instant message různými protokoly Comment[da]=Send beskeder over flere protokoller Comment[de]=Multi-Protokoll Instant Messenger Client Comment[es]=Cliente de mensajería instantánea multiprotocolo Comment[fr]=Envoie des messages instantanés en utilisant divers protocoles Comment[hu]=Azonnali üzenetküldés többféle protokoll használatával Comment[it]=Client multiprotocollo per messaggi immediati Comment[ja]=複数のプロトコルを介してインスタント・メッセージを送信します Comment[ko]=다중 프로토콜 메신저 Comment[nb]=Send lynmeldinger over flere protokoller Comment[nl]=Multi-protocol programma voor expresberichten Comment[pl]=Komunikator internetowy obsługujący kilka protokołów Comment[pt_BR]=Mande mensagens instantâneas por múltiplos protocolos Comment[pt]=Envie mensagens instantâneas sobre vários protocolos Comment[ro]=Trimiteţi mesaje instant în orice reţea Comment[ru]=Обмен мгновенными сообщениями с использованием множества протоколов Comment[sl]=Pošiljajte neposredna sporočila prek različnih protokolovs Comment[sq]=Dërgoni mesazhe të atypëratyshëm protokollesh të ndryshëm Comment[sv]=Sänder snabbmeddelande över många protokoll Comment[zh_CN]=通过多种协议发送即时消息 Comment[zh_TW]=透過多種通訊協定發送即時訊息