Технический комментарий: Некоторые хаки способны производить неочевидное замедление системы. Что происходит:
<ow:link name="PalmOS" href="ow.asp?PalmOS" date="2003-05-13T18:59:32+01:00">Palm OS</ow:link>
является event-driven системой. Имеется очередь событий. События генерируют кнопки, нажатия на экран итд. Активное приложение выгребает очередь функцией
<ow:link name="EvtGetEvent" href="ow.asp?p=EvtGetEvent&a=edit">EvtGetEvent</ow:link>
. Потом оно передает их функции
<ow:link name="SysHandleEvent" href="ow.asp?p=SysHandleEvent&a=edit">SysHandleEvent</ow:link>
которая обрабатывает системные эвенты (запускает приложение по кнопке, выключает пальму итд).
Нехорошие хаки вешаются на одну из этих двух функций и в ответ на обработку каждого эвента делают свое темное дело. Например, отслеживают время, заряд батареи и состояние подсветки.
Теперь про производительность. Честный бенчмарк просто производит вычисления, оставив очередь сообщений в покое. При этом такой хак никак не влияет на результаты бенчмарка. Но при активном использовании устройства ситуация изменяется. Частые нажатия кнопок ведут к частой генерации событий и к частому исполнению кода хака. Соответственно реакция на кнопки или клики замедляется. Еще хуже, может переполниться очередь сообщений. В этом случае создается ситуация, когда бенчмарк никакого замедления не показывает, но машинка тормозит.
Пример 1: кирхак 1 для экономии держал шрифты только в кодировке 1251. для прочих строилась динамически таблица перекодировки. Этой работы хватало, чтобы на медленных устройствах перерисовка была заметна. Версия Lite была лишена разных кодировок и работала быстрее. Тест из
<ow:link name="QuickBits" href="ow.asp?QuickBits" date="2003-06-05T16:23:08+01:00">Quick Bits</ow:link>
эту разницу хорошо видел, поскольку тестировал вывод текста.
Пример 2: на хандере была программа
<ow:link name="SilkClockHack" href="ow.asp?SilkClockHack" date="2003-07-09T19:34:37+01:00">Silk Clock Hack</ow:link>
, которая рисовала в области виртуального граффити часы, свободную память и заряд батареи. Но поскольку эта программа вешалась хаком на
<ow:link name="SysHandleEvent" href="ow.asp?p=SysHandleEvent&a=edit">SysHandleEvent</ow:link>
, то перерисовка шла на каждое событие. При вводе с внешней клавиатуры замедление становилось весьма существенным. Мой
<ow:link name="SilkMan" href="ow.asp?SilkMan" date="2003-08-13T13:03:21+01:00">Silk Man</ow:link>
обновлял информацию в области граффити по таймеру раз в 10 секунд. При этом это не ощущалось при вводе с клавиатуры, но ощущалось при записи на диктофон.
Пример 3. Клон арканоида Breakout вышел вот с таким изменением: "
<tt>contain some code that limit the big slowdowns due to pen related hacks (or "kind of hacks" for Palm OS 5 devices), when using the stylus. </tt>
".
Мораль: вешаться на сисколлы со словом Event опасно.
Список сисколлов, на которые вешается хак можно посмотреть в свойствах хака.
</ow:body>