Про ZXMAK2

emulators

Postby zxmak » 21 Jan 2015, 03:11

Тест (и график) делался не для vblank а для time, с vblank у меня 100фпс и 10мс на кадр.


синхронизация в любом варианте делается из потока эмуляции, а нотификация происходит одинаково.

Нотификация через тред пул - мега тормоза, любые объекты синхронизации работают через диспетчер, минимальный квант диспетчера 1мс (это если timebeginperiod(1))


timebeginperiod(1) устанавливается. то что трид пул медленный, понятно. Тут дело в том что эта нотификация - узкое место, до этого она происходила через Invalidate, а в обработчике WM_PAINT Present, но это тормозит поток эмуляции при разных месиджах в очереди сообщений. Через трид пул я попробовал развязать, как простейший вариант. Результат удивил :) Даже не ожидал что настолько динамично все работать будет. Даже UI заметно шустрее стал :)
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby zxmak » 21 Jan 2015, 03:12

И таки, да, добавь плиз Ф3 (ну или любой другой хоткей) и опциональное дописывание бута (к старом zxmak кстати было), а то каждый раз набирать в трдос имя файла для запуска неудобно.


так он и так есть - Ctrl+Alt+F1 :)
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby zxmak » 21 Jan 2015, 03:16

Чем плохо отлавливать vblank и делать async present в одном потоке? в тестовом унриале это прекрасно работало.


Эмулятор использует обычную очередь оконных сообщений для полноценной работы UI. Если делать Present и сбрасывать D3D в другом потоке, будут проблемы с ресайзом окна
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby deathsoft » 21 Jan 2015, 03:19

zxmak wrote:Эмулятор использует обычную очередь оконных сообщений для полноценной работы UI.

unreal тоже использует обчныю очередь сообщений, но мему это не мешает все делать в одном потоке, очередь сообщений надо через PeekMessage разбирать, этоприведено даже в любом D3d примере из sdk, где опрос клавиатуры делается.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 21 Jan 2015, 03:21

zxmak wrote:так он и так есть - Ctrl+Alt+F1

А почему на против Open стоит ..., а хоткей не написан?
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 21 Jan 2015, 03:24

Еще zxmak2 безбожно сечется с лучем на crt мониторе (в верхней трети экрана), при том что выводит кадры 100фпс и развертка монитора тоже 100фпс и стоит синхра по vblank.
это видно в shock мегадемо фикшеной под пентагон, на больших зеленых буковках в скроле который по синусу.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby zxmak » 21 Jan 2015, 03:46

unreal тоже использует обчныю очередь сообщений, но мему это не мешает все делать в одном потоке, очередь сообщений надо через PeekMessage разбирать, этоприведено даже в любом D3d примере из sdk, где опрос клавиатуры делается.


потестил из потока эмуляции Present и сброс делать, вроде все нормально работает, даже перестало реагировать на длительный клик по тайтлу окна :)
Но есть проблема, если начинаешь ресайзить окно, начинаются сбросы d3d, чтобы подстроить размеры. А сброс довольно прилично времени занимает, в итоге поток эмуляции замирает на доли секунды. Проявляется как срывы звука при ресайзе окна
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby zxmak » 21 Jan 2015, 05:05

обновил для тестов, теперь синхра и Present в одном потоке, но если нужен сброс, то кидается нотификация в основной поток и сброс происходит в основном потоке.
На графе почему-то заметные отклонения вверх/вниз от целевого времени фрейма. Непонятно почему. Если скипать фреймы, то все гладко. Видимо какая-то заморочка с планировщиком задач windows.

Протести плиз эту версию тоже: 2.8.6.2 TESTSYNC: https://zxmak2.codeplex.com/releases/view/610909
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby lvd » 21 Jan 2015, 09:22

zxmak wrote:Но тогда теряется кроссплатформенность,

"говнет" и "кроссплатформенность" -- взаимоисключающие параграфы.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby deathsoft » 21 Jan 2015, 11:07

zxmak wrote:Но есть проблема, если начинаешь ресайзить окно, начинаются сбросы d3d, чтобы подстроить размеры. А сброс довольно прилично времени занимает, в итоге поток эмуляции замирает на доли секунды. Проявляется как срывы звука при ресайзе окна

При ресайзе окна проблема вообще не актуальна, унриал при таскании и ресайзе вообще эмуляцию останавливает. После ресайза то все нормально работает.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

PreviousNext

Return to Эмуляторы

Who is online

Users browsing this forum: No registered users and 8 guests

cron