Не пожалел времени,более 6 часов записывал,не считая времени загрузки на ютуб.
Я записал сравнение ForceCompositionPipeline = On и Off и почему опция On непригодна к использованию.
Почему- кадры «тиринга» никуда не исчезают, но вместо отображения тиринга я вижу на экране вот что, словами:
При включенной опции ForceCompositionPipeline = On я вижу «рывок» между двумя(возможно больше промежуток) кадрами и это очень хорошо заметно в любой даже самой плавной игре(не быстрым поворотом камеры) или банальной прокрутке браузера,но рывок это не самое страшное самое страшное это- отсутствие отклика от системы во время этого «рывка» никакие кнопки не работают как будто иксы зависают на долю секунды.
И количество таких рывков, очевидно зависят от загрузки системы(от ФПС)- если открыть одну вкладку в браузере и никаких больше окон вообще в системе то и рывков будет минимум(один в пару минут)
но если открыть пару вкладок в браузере, стим, любое окно в вайне, пару текстовых редакторов, терминал и пару файл-менеджеров, плюс запущенная игра-это все потребляет 50% CPU и 50-70% GPU
и количество «фризов» в каждом окне станет невыносимым-банально печатая текст в текст редакторе вводя «привет» вы напечатаете «приввет»(две буквы) потому что во время ввода «в» был «физ» и иксы не получили события «отжатия кнопки» и на долю секунды кнопка «в» была нажата и очевидно текстовый редактор по таймеру напечатал еще одну «в» так как в памяти «в» все еще нажата
и это весь интерфейс фризится-даже движения мышки «дергаются», хотя и показано что ФПС 60(или выше если без Vsync) и визуальный ФПС в таких условиях «ощущается» что ниже 20
к этому добавляется появление «бага рывка экрана» после альт-таба из/в любое приложение случайно начинают рывки идти с определенной очередностью и .... это неюзабельно вобщем(на видео ниже есть демонстрация,видео 13 и 8)
однако если выключить ForceCompositionPipeline = Off то система станет идеально отзывчивой,да будет тиринг при выделении(файлов в файл редакторе/раб столе к примеру) тиринг при перетаскивании окон,но при этом интерфейс не фризится и система отвечает на нажатие клавиш в любой момент
тоесть эта опция ForceCompositionPipeline = On заменяет «тиринг» ожиданием полного кадра во время ожидания кадра иксы «замораживаются» не отвечая на любой ввод
теперь по записи:
во первых- в записи со включенным ForceCompositionPipeline = On в видео(кадрах) есть тиринг, почему- потому что ffmpeg берет кадр из памяти, и в памяти во время «фриза» находится кадр с тирингом но этот кадр не отображается на экране и я вижу «фриз» но ffmpeg записывает кадр с тирингом, тоесть все кадры с тирингом в записи с ForceCompositionPipeline = On в этот момент мой экран был заморожен и я не видел кадра с тирингом, я видел кадр до и после тиринга
второе это опции записи- все видео записаны в 1080p на 60ФПС (даже те в которых 30ФПС), опция записи для всех видео одинакова и нагрузка системы идентична, вот строка
ffmpeg -video_size 1920x1080 -framerate 60 -f x11grab -i :0.0 -f pulse -ac 2 -channel_layout stereo -i default -vcodec nvenc -preset slow -b:v 8M -maxrate 8M -bufsize:v 8M -bf 2 -refs 1 -bf 2 -refs 1 -g 120 -i_qfactor 1.1 -b_qfactor 1.25 -qmin 1 -qmax 70 -threads 0 -strict -2 </file>
в третьих- для местных форумных ботов, которые ниразу в жизни не видели тиринг и считают что он не существует
идите сюда http://codepen.io/anon/pen/rjoGwB (чтоб скачать- Export снизу справа с сохраните ZIP, распакуйте после скачки и откройте index.html) (вот клон http://liveweave.com/67C4N2 (скачать- сверху Tools-...as zip)), если в браузере не работает-просто скачайте любой из указанных.
Теперь запустите два Разных браузера на весь экран на двух рабочих столах(если у вас i7 восьмиядерный то три-четыре браузера(Firefox chromium midori qupzilla для примера,вообще любые)) и откройте скачанный файл или онлайн на весь экран
один из браузеров начнет лагать(количество окон в браузере не важно,достаточно одного,все невидимые окна не нагружают систему) и у вас будет тиринг
если включить ForceCompositionPipeline = On то тиринга не будет, но будут невероятные рывки (а если записывать в этот момент ffmpeg-ом то на видео будет дичайший тиринг(а на экране не будет да,а будут рывки))
Теперь видео-пруфы(везде где Vsync- с включенной вертикальной синхронизацией
1.Vsync ForceCompositionPipeline = Off ровный ФПС только при малом количестве объектов в кадре
2.ForceCompositionPipeline = On дергается даже при малом количестве объектов в кадре хотя ФПС показывает одинаковый даже лучше чем в прошлом
3.On и Off с 00:00 по 1:55 Vsync ForceCompositionPipeline = Off , с 1:56 до конца On, также тест лага мышки...плохо заметно на записи ибо «курсор движется» в кадрах ffmpeg когда у меня на экране все замирает включая курсор но всеравно заметно медленнее чем на 30ФПС на Off
4.Vsync ForceCompositionPipeline = Off никаких «лагов» в отзывчивости,мгновенная реакция на кнопки но есть тиринг(но его мало во всем видео) кадры тиринга 7679 12238 12328 http://imgur.com/a/ehx4y
5.Vsync ForceCompositionPipeline = On гдето раз в 5 сек идет один-два лага на «кадр тиринга» смотри ссылку ниже
6.раскадровка прошлого видео с 2231 кадра прошлого видео 115 следующих кадров, тиринг 00:02(кубы справа снизу) 00:07(тоже справа снизу) 00:32(две полосы по центру экрана) 00:52(нижняя часть экрана под полосой прокрутки ютуба) 1:49(чуть выше середины экрана), напоминаю- я на экране не вижу тиринга, на экране просто пропадает кадр тиринга и во время этого кадра весь «ввод» заморожен
7.1080 Vsync ForceCompositionPipeline = Off в начале видео «плавность анимаций в меню», на 30 ФПС сравните со следущим видео, также в конце движение мыши
8.1080 ForceCompositionPipeline = On сравнивайте плавность этого с предыдущем видео(надо быть слепым чтоб не увидеть разницу) и добавьте к этом то что весь «ввод» клавиатура и мышь работает с такимиже «лагами» тоесть во время этого «фриза» что ярко видно на видео даже клавиатура не отвечаает,даже переключение индикаторов типа Намлока на клавиатуре не работает(а в прошлом все прекрасно работает никакого лага для «ввода») также в конце лаги мыши-хорошо виден синхрон мыши к лагу
9.720 ForceCompositionPipeline = On выключены тени чтоб получить 60ФПС и 720 разрешение игры, лагов меньше но даже в начале видео в меню в «конце анимации» можно видеть лаг, также такойже как в прошлом видео лаг во время всего видео но меньше конечно за счет более высокого ФПС
10.720 Vsync ForceCompositionPipeline = Off 720 и без теней на 60ФПС сравните плавность с прошлым видео
11.Vulkan Vsync ForceCompositionPipeline = Off сравнивайте со следущим
12.Vulkan Vsync ForceCompositionPipeline = On все эти «маленькие рывки» воспринимаются нормально, но не забывайте- во время всех этих рывков у меня лагает весь «ввод»(что очевидно критично в такой игре которая показана)
13.Vulkan ForceCompositionPipeline = On без всинка, видео в полной мере показывает чем плоха эта опция ибо весь GUI интерфейс всей системы вот так вот лагает, вы думаете в таких лагах можно хотяб текст в альттабе печатать- буквы нажимаются по 2 раза и выделение мышкой ездит как захочет(во время лага курсор мыши продолжает двигаться сам по себе в направлении которое было до лага выделяя больше места)
TLDR- смотрите видео и читайте коммент к 6 и 8 и 13 (не забываем смотреть на фреймрейт слева свурху), и вывод ниже
Вывод-Когда запущена «одна игра» или «один браузер» или «одно окно редактора» опция ForceCompositionPipeline = On практически никак не отличается с Off режимом, но когда окрыто множество окон- опция On делает весь UI «лагающим» и неверно реагирующим на ввод с клавиатуры и мыши,при этом визуальный ФПС не соответствует показываемому(счетчиком).
Наиболее ощутимы лаги когда ФПС становится ниже 60,а это даже два окна файл менеджера и выделяя файлы в одном из них-ФПС уже просядет до 30-50
По результатам тестов- опция ForceCompositionPipeline = On не показывает(визуально на экране) кадр с тирингом и во время кадра(возможно двух кадров,лаги сильно ощутимы) с тирингом вся система «заморожена» но программы продолжают работать и могут брать «текущий кадр» и этот кадр который «не был показан» будет с тирингом.
Также- «визуальный ФПС» не соответствует тому что показан на счетчике в игре, можно убедиться в видео.
Все игры на видео,без записи у меня идут на 60ФПС+(даже tomb raider в 1080), нагрузка на CPU была от 20 до 50% максимум(и опция On Off не влияет на нагрузку), GPU только в tomb raider до 80%
сразу уточню-нагрузка на GPU даже 100% никак не влияет на запись/кодирование ffmpeg(будут потеряно чуть больше кадров но показанные фризы еслиб были из за нагрузки на GPU былиб и в опции Off, а их небыло)
на запись влияет только нагрузка CPU(если 100% CPU то ffmpeg будет дублировать много кадров давая всего 5-10ФПС в сек), нагрузка CPU в обоих режимах одинакова...
Лагает точно также без записи но вместо ffmpeg достаточно запустить пару окон браузера с файл менеджером(текстовый редактору уже будет неюзабельным)
Все видео записаны на последнем драйвере 378.09 и XFCE
Я тестировал эту опцию уже более года уж точно, пробовал на KDE(там все еще хуже по очевидным причинам-слишком много элементов просаживают ФПС ниже 60 очень часто) там такиеже лаги, также версия ядра/иксов/нвидиа дров/дистрибутива не влияют на результат
пробовал на двух дистрибутивах(второй убунта) и трех обновлениях opensuse- лаги идентичны
и да на это не влияет «железо» пробовал на более старой видеокарте нвидиа и совершенно другом железе- точно такиеже лаги
проблема очевидна- во включенной опции ForceCompositionPipeline = On
как она работает- не буду гадать, она работает как будто в «железе» тоесть в видеокарте это объяснялобы пропуск кадров и что иксы не отвечают и что пропущенный кадр можно взять из памяти но видеокарта его не показывает
но тогда почему настолько визуально разный ФПС при записи- еслиб это была только опция видеокарты тех лагов что на видео выше при On небылоб и видео былиб идентичны с Off
такчто думайте сами
Мне нужен «мгновенный отклик» от интерфейса,а со включеной опцией ForceCompositionPipeline = On я даже альт-табнуться не могу мгновенно приходится по два раза наживать хоткеи
про текст я уже писал, и вот еще один пример-я последние пол года играл в одну игру и записыввал ее на ютуб,вот пример видео
игра очень мало требовательна 20% CPU и 20% GPU(да она через эмулятор) и тиринг есть в некоторых видео на старте и в нескольких кадрах в процессе
https://www.youtube.com/watch?v=QH5GUd5d5Lw на 2:13 (на протяжении всей секунды к 2:14) можно видеть тиринг вот выделил на скриншоте http://imgur.com/a/0vXTv (между выделенными красными линиями спрайт горы разрезан по горизонту) поставив 0.25 скорость на ютубе это видно
так вот игра идет идеально и если включить ForceCompositionPipeline = On то появляются эти описанные «лаги» и я не могу реагировать и не вижу множества кадров,так как игра активная и требует реакции- в игре бывает по 1-2 кадра на «атаку» на которую нужно реакцию мгновенную делать,но «лаг»-мало того что может просто не показать кадр с «атакой» так еще даже если прошлый кадр был с анимацием атаки,и я должен на нее реагировать-я не могу потому что следущий кадр (случайно так выходит) не показывается потмоу что с тирингом,и в этот момент у меня не работает ни одна кнопка-тоесть моя реакция игрой не воспринимается. Поэтому всегда стоит Off у меня.
Как включить у себя ForceCompositionPipeline = On в терминал написать:
nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline = On }"
nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline = Off }"