LINUX.ORG.RU
ФорумTalks

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


0

0

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

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

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

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

★★★★★

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

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


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

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

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

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

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

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

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

> ft_mem_alloc и ft_mem_realloc

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

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


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

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

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


Хакир?

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

почему 4.2?

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

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

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

Хакир?

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

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

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

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

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

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

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

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

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

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

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

видел ворованные исходники win2k.

да я понимаю, что линукс - говно, но все остальное еще хуже)

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

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

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

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

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

меня пока напрягает tt_face_load_eblc

придется переделывать выделения памяти в ней похоже.

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

face_load_eblc разогнался раза в 4-5 путем выделения памяти в статическом массиве для Load_SBit_Range_Codes и Load_SBit_Range.

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

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

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

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