LINUX.ORG.RU
ФорумTalks

(нытье, хотя почти development) freetype и fontconfig


0

0

Чудесная библиотека freetype сделана в расчете на то, что после malloc всегда выполняется memset(ptr, 0, size)

Стоит изменить ее функции выделения памяти, и она начинает падать.

Не менее чудесная библиотека fontconfig имеет функцию вычисления длины утф8 строки в символах и максимальной длины символа в байтах, которая использует для этого посимвольное конвертирование utf8->ucs4.

Вобщем жутковато. И это я еще глубоко не копал...

★★★★★

(нытье, хотя почти development) freetype и fontconfig

> Чудесная библиотека freetype сделана в расчете на то, что после malloc всегда выполняется memset(ptr, 0, size)

Стоит изменить ее функции выделения памяти, и она начинает падать.


Крайне странно. Может, это твой аллокатор - кривой? Пробовал гонять тот же тест, но со стандартным аллокатором и под valgrind?

Manhunt ★★★★★ ()
Ответ на: (нытье, хотя почти development) freetype и fontconfig от Manhunt

(нытье, хотя почти development) freetype и fontconfig

Если поведение freetype в самом деле зависит от значений в свежеаллоцированном куске памяти, valgrind об этом обязательно напишет. А если не напишет - ищи багу на своей стороне.

Manhunt ★★★★★ ()
Ответ на: (нытье, хотя почти development) freetype и fontconfig от Manhunt

(нытье, хотя почти development) freetype и fontconfig

нет никакой неинициализированной памяти

я пытаюсь чуть разогнать эту хрень и обнаружил, что куча времени тратится в memset, который вызывается из функций выделения памяти(см пост выше)

sergej ★★★★★ ()
Ответ на: (нытье, хотя почти development) freetype и fontconfig от sergej

(нытье, хотя почти development) freetype и fontconfig

> ft_mem_alloc и ft_mem_realloc

Так и писал бы с самого начала, что модифицировал исходный код freetype, и после этого она у тебя стала падать. В таком случае твое исходное сообщение

Чудесная библиотека freetype сделана в расчете на то, что после malloc всегда выполняется memset(ptr, 0, size)


--- яростное 4.2

freetype самостоятельно инициализирует свою память, и законно на это полагается.

я пытаюсь чуть разогнать эту хрень


Хакир?

Manhunt ★★★★★ ()
Ответ на: (нытье, хотя почти development) freetype и fontconfig от Manhunt

(нытье, хотя почти development) freetype и fontconfig

почему 4.2?

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

В результате имеем оверхед в виде memset на куски памяти, которые нулями инициализировать и не стоило бы.

ну и имхо решение кривое.

Хакир?

работа такая...

sergej ★★★★★ ()
Ответ на: (нытье, хотя почти development) freetype и fontconfig от sergej

(нытье, хотя почти development) freetype и fontconfig

> куча времени тратится в memset, который вызывается из функций выделения памяти

Полагаю, основная масса памяти идет на порождение растеризованных символов, и в любом случае нуждается в инициализации нулями. А так много времени тратится, должно быть, на minor page faults - которые неминуемо случаются при первом обращении к аллоцированной странице.

Manhunt ★★★★★ ()
Ответ на: (нытье, хотя почти development) freetype и fontconfig от sergej

(нытье, хотя почти development) freetype и fontconfig

> В результате имеем оверхед в виде memset на куски памяти, которые нулями инициализировать и не стоило бы.

Тогда valgrind тебе в руки, и добавляй инициализацию во все функции. За одно расскажешь, сильно ли удалось ускорить ,)

Manhunt ★★★★★ ()
Ответ на: (нытье, хотя почти development) freetype и fontconfig от Manhunt

(нытье, хотя почти development) freetype и fontconfig

>> Полагаю, основная масса памяти идет на порождение растеризованных символов, и в любом случае нуждается в инициализации нулями.

надо будет проверить, но есть подозрение, что придется переделывать...

sergej ★★★★★ ()
Ответ на: (нытье, хотя почти development) freetype и fontconfig от sergej

(нытье, хотя почти development) freetype и fontconfig

переписать алгоритм?

у меня например надо было при рисовании определять какую область занимает такой-то такст таким-то шрифтом (чтоб его обрезать).

Когда я стал тупо кэшировать размеры всех строк одного шрифта, скорость выросла, а объем памяти упал

namezys ★★★★ ()
Ответ на: (нытье, хотя почти development) freetype и fontconfig от namezys

(нытье, хотя почти development) freetype и fontconfig

Не сломал, эта функция вызывается всего один раз, т.к. в системе один шрифт.

А то, что это не будет работать на других машинах, где шрифтов много, меня совершенно не волнует.

sergej ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.