ROS Newsletter51

Материал из Русский WINE
Перейти к: навигация, поиск

Выпуск новостей ReactOS №51

Ошибки прорисовки

Недавно были исправлены две ошибки, вызывавшие некоторые проблемы в Firefox 2. Первая состояла в том, что загруженная страница пропадала примерно через минуту бездействия. Проблема была в функции NtGdiGetDIBitsInternal, которая использовала палитру контекста устройства вместо палитры побитового изображения. Вторая проблема проявляется в том, что логотипы и изображения на домашней странице Firefox в Google становились полностью чёрными или вообще пропадали. Эта проблема несколько более сложная, в неё были вовлечены три типа "побитовых изображений", поддерживаемых Windows.

Первым типом являются устройство-зависимые побитовые изображения (Device Dependent Bitmaps, DDB), которые вы создаёте, используя функцию CreateBitmap. Опираясь именно на такие изображения выполняются BitBlt и другие функции GDI. Второй тип - это устройство-независимые изображения (Device Independent Bitmaps, DIB), для которых у вас есть указатель на биты данных и вы можете рисовать самостоятельно, без какой-либо помощи от GDI. Последний тип - это устройство-независимые секции побитовых изображений (Device Independent Bitmap Sections, DIBS), которые состоят из двух предыдущих типов. С DIBS у вас имеются оба дескриптора изображения, поэтому вы можете не только использовать функции GDI, но и, при необходимости, управлять битами изображения через указатель.

GDI обрабатывает цвета для DDB, DIB и DIBS по-разному, и эти различия мы не учли. DDB полагается на набор цветов, который вы установили для целевого устройства (монитора или принтера, например), в то время как у DIB и DIBS имеются собственные таблицы цветов, которые определяют, как должно выглядеть изображение. При рисовании, GDI использовал цвета контекста устройства, не обращая внимания на то, является изображение устройство-зависимым или устройство-независимым. В связи с тем, что таблица цветов устройство-независимого изображения никак не связана с целевым устройством, мы получали значения "по умолчанию" - белый/чёрный.

Обе проблемы были исправлены Тимо Крейцером (Timo Kreuzer) и Firefox 2 вновь выглядит так, как и должен.

Работа над файловой системой

Пьер Швейцер (Pierre Schweitzer) был полностью поглощён работой над файловой системой в своей ветке репозитория, реализуя функционал FsRtl (библиотеки файловых систем) и служб в других компонентах, которые связаны с ней. Например: уведомления об изменении состояния раздела жёсткого диска или создании новых файлов. Ядро использует две структуры данных для подобных уведомлений, а Пьер использует лишь одну из них, по-этому он до сих пор продолжает исследование.

Кроме уведомлений, Пьер также работал над фильтрами связей. Их существует два типа: PerStream и FileObject (потоковый и файловый объекты). PerStream уже реализован, однако FileObject значительно более сложен, так как требует реализации дополнительного функционала в менеджере ввода-вывода. Те, кто давно следит за проектом, возможно, помнят о проблемах с драйвером-фильтром именованных каналов некоторое время назад. Возможно, завершив работу над фильтрами связей, мы, наконец-то решим и эту проблему.

Еще одним пунктом, которым занимался Пьер, является код, касающийся работы со строками. Проблема здесь заключается в том, что ASCII функции также должны поддерживать DBCS символы, которые используют два байта на символ. То есть, невозможно просто конвертировать ASCII строки в Unicode (подмножеством которого является DBCS) и передавать их в соответствующие Unicode-реализации функций для обработки.

Одна вещь, которая совершенно отсутствует в FsRtl - обеспечение блокировок. Всё необходимое сейчас выполнено в виде хака и корректная реализация будет, похоже, очень непростой задачей.

Хотя FsRtl находится в очень незаконченном состоянии, существуют части, которые уже завершены. Одна из них, FastIO (быстрый ввод-вывод), позволяет драйверам взаимодействовать с менеджером кеш-памяти в обход менеджера ввода-вывода, т.е. напрямую. Если Вы не используете менеджер ввода-вывода, то необходимо использовать IRP (I/O request packets, пакеты запросов ввода-вывода), которые должны быть выделены, отправлены, завершены и высвобождены, что влечёт за собой дополнительные накладные расходы на ваш запрос.

Doxygen

После многих месяцев, когда мы пытались держать людей подальше от наших файлов Doxygen (документации, генерируемой на основе исходных текстов), так как она попросту устарела, Гед (Ged Murphy) вновь запустил генерацию для транка и оказалось, что прежняя ошибка с зацикливанием процесса исчезла. Таким образом, ссылки на сайте были восстановлены. Страницы Doxygen, фактически, никуда и не пропадали, так как они всегда были доступны через поиск для конкретной внутренней функции в Google, что было неприятно, учитывая то, что информация была устаревшей. Надеюсь, что теперь человек, который ищет информацию о функциях и структурах данных, сможет найти что-нибудь более полезное, чем "заглушку" или неправильную реализацию. Doxygen также обладает некоторыми другими возможностями, такими как, например, маркировка напоминаний, ошибок и т.п., что должно обеспечить более подробную информацию о состоянии разработки ReactOS для интересующихся.

Newsletters
30-39 #30#31#32#33#34#35#36#37#38#39
40-49 #40#41#42#43#44#45#46#47#48#49
50-59 #50#51#52#53#54#55#56#57#58#59
60-69 #60#61#62#63#64#65#66#67#68#69
70-79 #70#71#72#73#74#75#76#77#78#79
80-89 #80#81#82#83#84#85#86#87#88#89
90-99 #90#91#92#93#94#95#96#97#98#99