mach_msg_trap, - (void) mouseDragged и производительность таймера - PullRequest
1 голос
/ 06 апреля 2011

Leopard 10.5.8, XCode 3.1.1; используя runModalForWindow для реализации (как предполагается,) высокопроизводительного механизма отслеживания мыши, в котором я должен выполнять сложные изменения растрового изображения в реальном времени.

Модальный цикл запускается, таймер срабатывает, мышь отслеживает ... но производительность ужасна, и чем дольше продолжается цикл запуска, тем хуже и хуже. Вместо того, чтобы ловить сообщения мыши каждый пиксель или около того, я получаю их каждые 5 ... 10 ... 20 секунд.

Приборы показывают, что большую часть времени в течение этого растущего узкого места ответа тратится на mach_msg_trap (и да, у меня установлена ​​перспектива для запущенного приложения), поэтому у меня сложилось впечатление, что оно «думает», что не Мне нечего делать, несмотря на то, что я тащу мышь с нажатой кнопкой, как сумасшедший. Нет никаких утечек памяти, и на моем 8-ядерном компьютере с частотой 2,8 ГГц процессор практически не работает.

Опять же, приложение не тратит много времени на мой код ... так что это не проблема моей производительности. Возможно, я что-то неправильно настроил, или вообще не настроил, или просто неправильно подхожу к идее - но я уверен, что был бы признателен за понимание. В настоящее время отправка сообщений мыши и сообщений таймера абсолютно недопустима. Вы не могли бы реализовать программу рисования карандашом для кого-то, погруженного в холодную патоку с временем отклика, которое я получаю.

РЕДАКТИРОВАТЬ: Дополнительная информация: не происходит на моем MacBook Pro 10.5.8. Просто 8 - ядерный Mac Pro с 6 дисплеями. Я попытался взять код отображения обрезки в drawrect вне, заменил его NSLog () ... все еще тянется при выпуске обновлений мыши. Также попытался перезагрузить и запустить без обычного дополнения приложений, работающих. И с зеркальными дисплеями. Без разницы.

Представьте, что вы перетаскиваете кисть по экрану; сначала рисует плавно, затем появляются промежутки между размещениями кисти, затем они становятся больше, и это продолжается до тех пор, пока вы не получите только одно размещение кисти каждые 10 секунд. Вот как это действует. Используя NSlog () и различные другие методы отслеживания, я определил, что он, по крайней мере, на самом высоком уровне, потому что события mouseDragged замедляются до минимума. Вкратце, вопрос в том, почему это произошло?

Любой

1 Ответ

0 голосов
/ 07 апреля 2011

ОК, изолировал его - проблема связана с моей мышью Wacom Tablet. Подключите обычную оптическую мышь, и все будет отлично. То же самое на моем MacBook Pro, используя трекпад. Работает нормально.

Планшет представляет собой Wacom Intuos 4 со стандартными драйверами по состоянию на январь 2011 года. Я перехожу на сайт Wacom и сообщаю об этом дальше.

Какой это был кошмар. Я потратил на это более 100 часов, думая, что уловил некоторые тонкости в обработке приложений, рисовании и т. Д. Sheesh.

...