LINUX.ORG.RU
ФорумTalks

Не было печали, но пришел glycin

 , glycin, ,


0

3

Заметил, что моём файловом менеджере диалог «Свойства файла» стал открываться с задержкой в полсекунды.

Если запустить приложение с export G_MESSAGES_DEBUG=all, то в эти полсекунды имеем вот такую красоту на 360 строк: https://pastebin.com/G0ivjKnz

Если закомментировать вот эту строку то задержка исчезает. Можно считать, что причина локализована. Теперь это нужно как-то чинить.

Могу сказать спасибо Гному и всему опенсорцу за то, что не устают давать мне причины тренироваться в написании мультипоточного и асинхронного кода, чтобы уметь обходить тормоза во фреймфорках и библиотеках. И отдельное спасибо Расту, на котором собственно glycin и реализован.

Работаем дальше.

★★★

ну что тут сказать. можно попробовать повесить обработчик на show-event для подменю выбора приложений и там уже дергать глицин этот сраный.

ckotctvo
()

Почему-то именно вот этот компонент создаёт лаг на иконках:

https://github.com/sde-gui/libsmfm-gtk/blob/2adc575c4d41c371ae3c28562898cddc352eaa8e/src/gtk/fm-app-chooser-combo-box.c#L157

    {
        GtkCellRenderer* render = gtk_cell_renderer_pixbuf_new();
        gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), render, FALSE);
        gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(combo), render, "gicon", 0);
    }

Весь остальной UI с glycin работает плавно, будто ничего и не менялось под капотом.

Видимо, надо сделать отладочную сборку gtk и смотреть что внутри GtkCellRenderer происходит.

wandrien ★★★
() автор топика
Ответ на: комментарий от mittorn

Ты может предложишь на Расте писать инновационный UI, в стиле поделок на SDL? Или еще какую-то идею подкинешь?

wandrien ★★★
() автор топика
Ответ на: комментарий от ckotctvo

Он их и в других частях UI конвертирует, но заметная задержка только здесь.

Пока не понял, в чем разница…

wandrien ★★★
() автор топика

Да, что-то было с glycin, потом он обновлялся несколько раз почти каждый день, сейчас вроде нормально все. Я его даже пробовал удалить:

[2025-09-26T21:02:54+0300] [ALPM] upgraded glycin (2.0.0-4 -> 2.0.0-5)
[2025-09-27T21:38:26+0300] [ALPM] upgraded glycin (2.0.0-5 -> 2.0.2-1)
[2025-10-03T20:38:40+0300] [ALPM] upgraded glycin (2.0.2-1 -> 2.0.2-2)
[2025-10-10T12:16:48+0300] [ALPM] upgraded glycin (2.0.2-2 -> 2.0.3-1)
[2025-10-12T21:47:56+0300] [PACMAN] Running 'pacman -Rdd glycin'
[2025-10-12T21:47:59+0300] [ALPM] removed glycin (2.0.3-1)
[2025-10-12T21:52:35+0300] [PACMAN] Running 'pacman -S glycin'
[2025-10-12T21:52:37+0300] [ALPM] installed glycin (2.0.3-1)
[2025-10-21T21:21:39+0300] [ALPM] upgraded glycin (2.0.3-1 -> 2.0.4-1)
[2025-11-05T08:08:18+0300] [ALPM] upgraded glycin (2.0.4-1 -> 2.0.5-1)
[2025-11-12T21:27:01+0300] [ALPM] upgraded glycin (2.0.5-1 -> 2.0.7-1)

dmitry237 ★★★★★
()

Вот тут я описывал «васянский» способ решения проблемы.
Смог избавиться от glycin и bubblewrap.
Но это AUR-помойка — на свой страх и риск. Может, есть и покрасивше решение.

k6
()
Ответ на: комментарий от k6

Он не то что бы сильно мешал, но надо будет глянуть на моём музейном экспонате с Core 2 Duo. Если там glycin будет вызывать общее увеличение лага UI, то поставлю кастомные пакеты…

wandrien ★★★
() автор топика
Ответ на: комментарий от wandrien

Конечно с десктопными тулкитами (для виджетов) всё довольно печально и вменяемую альтернативу qt5/qt6 найти сложно (притом что виджеты там в заброшенном состоянии, можно сказать), но gtk2 это obsolete тупик.
Имхо, сейчас выбор стоит между мелкими тулкитами вроде imgui/nuklear/etc и qt, но и в первом случае ситуация не очень. Тот же imgui, например, предполагает отрисовку только текстурированными треугольниками и задействовать какое-нибудь 2д-ускорение для него не выйдет, да и инвалидацию не умеет, так что для десктопа он весьма неэффективен, пусть и каких-то проблем даже на старом компе с core2duo и чипсетной встройкой у меня не было, всё равно выглядит печальной альтернативой.
Я собственно сейчас выпиливаю gtk из UXP/Pale Moon и успешно перенёс его на SDL2, но тут сразу всплыли проблемы самого SDL2, например:
1. Он без спросу инициализирует opengl контекст и сбивает текущий контекст ради какой-то framebuffer acceleration, приходится это явно выключать т.к ломало webgl, да и вообще жрёт ресурсы без надобности
2. Он не умеет вообще частичное обновление экрана, любой expose предполагает перерисовать всё окно - что тоже плохо для декстопа, где чаще обновляется лишь часть.
3. При отрисовке тоже обновить можно лишь всё окно - у UpdateWindowSurface региона нет, SwapBuffersWithDamage тоже нет...
4. SDL2 не умеет в дочерние виджеты-окна, из-за чего мне пришлось добавлять обходной путь отрисовки дочерних окон в сам движок браузера, отдавая в SDL уже одну текстуру
Может, часть проблем исправлена в SDL3, но я пока не интересовался, была интересна именно поддержка SDL2 для максимальной портируемости. Может, стоит присмотреться к glfw?
В контексте баузера конечно потом будут делаться чистые x11/wayland бэкенды, для начала хочется сделать код, который будет в каком-то виде рабоать везде, пусть и не самым оптимальным способом

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от wandrien

ну вот конкретно в этом коде не вижу источников торможения. оно где-то рядом скорее всего тормозит.

ckotctvo
()

закомментировать вот эту строку

Лучшие практики JavaScript говнокода, однако!

Shadow ★★★★★
()
Ответ на: комментарий от mittorn

gtk2 делает всё, что мне нужно, а что не делает - то мне без надобности.

HiDPI моника у меня нет. На FHD масштабируется нормально.

Адаптировать тысячи строк прикладной логики, которая делает реальные полезные вещи, просто чтобы сидеть на «неустаревшем» тулките - абсолютная потеря время.

В gtk3 нет способа отображать рамку/зазор вокруг меню. Лично для меня это достаточный пункт, чтобы избегать софта на gtk3. Тени под окнами я не люблю, а по мнение разрабов гнома, я ими пользоваться обязан, чтобы отображались меню адекватно.

wandrien ★★★
() автор топика
Ответ на: комментарий от Shadow

а сильно ли она будет лучше?
У gtk3 конечно есть один несомненный плюс - это единственный тулкит именно десктопных виджетов, без допила хорошо работающий с тачскрином. Но стоит ли оно того? Да и вообще ИМХО, писать ООП на си в стиле glib ужасно

mittorn ★★★★★
()
Ответ на: комментарий от wandrien

gtk2 делает всё, что мне нужно, а что не делает - то мне без надобности.

Еще вспомнил, что там проблема 2038 года в одном из модулей. Но до 38-го еще дожить надо, а там и запатчить можно, если жив буду.

Способ обхода, не ломающий ABI, я придумал.

wandrien ★★★
() автор топика
Ответ на: комментарий от wandrien

ну в целом если тебя устраивает глибщина - можно и gtk2 форкнуть под своё небольшое DE. Вот, TDE форкнули qt3 и довольны

mittorn ★★★★★
()

Не надо ничего оптимизировать. В вин11 контейкстное меню тоже лагает, и теперь такая мода. Наоборот - добавь побольше JS.

seiken ★★★★★
()
Ответ на: комментарий от Shadow

ObjC хотя бы выглядит относительно нормально

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

ООП почти на любом языке ужасно, если этот язык не из списка Ruby, Lua, JS.

Но писать десктопный UI на JS я не готов))

Проблема Си в том, что приходится вообще всё делать вручную и через жопу, без качественных макросов.

Возможно, имеет смысл часть компонентов написать на Vala, но я не имею опыта с ним и не знаю, с какими подводными камнями столкнусь, используя Vala для старого gtk2 на Арче. (нужна ли сборка vala конкретной версии, какие еще компоненты нужны…)

Еще из реальной альтернативы я вижу Zig. Может если бы он был, когда я брался за идею DE, я бы сразу на нём начинал писать весь стек.

wandrien ★★★
() автор топика

А раст тут причём? Он-то как раз умеет и в асинхрон и в многопоточку в отличие от…

zurg
()

а теперь я понял ЧТО ИМЕННО тормозит. создается моделька. в ней указаны приложения и их картинки

И как только ты говоришь добавить в отображение модельки поле icon моделька начинает эти картинки тягать. тогда да, это не починить.

ckotctvo
()
Ответ на: комментарий от ckotctvo

Починить можно что угодно.

Как крайняя мера можно просто скопипастить весь класс GtkCellRendererPixbuf в новый файл и реализовать в нём асинхронную инкрементальную прогрузку.

Но сначала нужно замерить, что именно тормозит, потому что такой же по длине список иконок приложений в меню «Открыть с помощью» - не тормозит.

Щас пока нет сил компилировать и копаться в gtk. Я сгоедня огромный кусок документации написал и исправил несколько потенциальных багов в многопотоке. Батарейка села…

wandrien ★★★
() автор топика
Ответ на: комментарий от wandrien

Я сегодня огромный кусок документации написал и исправил несколько потенциальных багов в многопотоке. Батарейка села…

Собственно вот:

https://github.com/sde-gui/libsmfm-core/commits?author=wandrien&since=2026-01-01&until=2026-01-14

wandrien ★★★
() автор топика
Ответ на: комментарий от wandrien

Что характерно, лучше всего работал imlib.

Shadow ★★★★★
()

mailstone

почтовый камень?

luke ★★★★★
()
Ответ на: комментарий от wandrien

Я когда пробовал что-то писать на vala, он генерировал код под gtk2. Но это было больше 10 лет назад. Впрочем, может можно просто взять старый vala ит не будет проблем
Но глибовый подход мне не нравится тем, что он заставляет делать вручную то, что обычно должен делать язык - заполнение vtable, конструкторы, etc. Так для комплятора vtable получается простоструктурой со случайными функциями.
Да и на оптимизации это сказывается, обычно qt софт ведёт себя отзывчивее, чем gtk

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от wandrien

ну вот конкретно здесь чинить придется внутрянку GTK причем конкретно в данном случае уверен что не получится. очень специфический код потому что, который не заточен асинхронность вообще.

ckotctvo
()
Ответ на: комментарий от ckotctvo

Навскидку я бы сказал. что шансы 85 на 15, что проблема решаема. Там всё на интерфейсах построено, без привязки к реализации. Механизм модульный.

Мне не впервой писать кастомные инкрементальные рендереры для моделей данных. Внутри виджета, который отрисовывает содержимое каталогов, такая асинхронная порнография творится, боже упаси. Всё ради скорости на low-end железе.

Вот тут небольшое саммари насчёт оптимизаций:

https://github.com/sde-gui/libsmfm-core/blob/fca4c1d820a93a38948914c6e704bc9cb9da8855/libsmfm-changelog-next.md

wandrien ★★★
() автор топика

пришел glycin

Показания препарата Глицин
    стрессовые ситуации - психоэмоциональное напряжение в стрессовых ситуациях (в т.ч. экзамены, конфликтные ситуации);
    сниженная умственная работоспособность;
    девиантные формы поведения детей и подростков;

GTK снова будет торт.

unsigned ★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)