2010-09-11 2 views
0

В течение многих лет я поддерживал аппликатор эмулятора Tandy Color Computer Emulator на своей домашней странице. С покупкой Incredible я решил сделать порт. Как это происходит в Android, это не займет много времени, но я действительно удивлен, как медленно он работает. Вы можете буквально видеть окраску пикселей. Я знаю, что есть другие успешные эмуляторы Android, поэтому я должен делать что-то неправильно.SurfaceView достаточно быстро для эмуляции?

Мой подход заключался в использовании SurfaceView для рендеринга. Есть отдельный поток, который запускает виртуальный процессор 6809. Всякий раз, когда этот поток обновляет эмулированную видеопамяти, он вызывает SurfaceHolder.lockCanvas() с помощью Rect, описывающего часть экрана, требующую перерисовки. Затем он вызывает gfx-процедуры с полученным Canvas ... вот где я сделал repaint() в AWT/Swing. Процедуры gfx достаточно умны, чтобы просто отображать то, что находится в clipRect. Возможно, я все еще застрял в AWT, но я не могу придумать, как это сделать на приемлемой скорости. Я пытался объединить вызовы gfx, но это тоже не сработало. Есть предположения?

ответ

0

SurfaceView должен быть достаточно быстрым. Все процедуры рисования достаточно умны, чтобы ничего не делать, если они находятся вне области клипа, но вы можете отбросить вызовы заблаговременно, если хотите. Похоже, вам нужно профилировать приложение и посмотреть, где вы проводите слишком много времени.

+0

Thanks Romain. SurfaceView достаточно быстр. Теперь я вызываю подпрограммы рисования с соответствующим кликом каждые x число циклов процессора (вместо вызова подпрограмм каждый раз, когда эмулятор записывает в «видеопамять»). Намного быстрее. –

Смежные вопросы