jueves, enero 03, 2008

Sobre Windows Aero [Parte II]

En la primera parte del artículo ya comenté resumidamente cómo era la arquitectura interna de Windows Presentation Foundation (WPF), y Media Integration Layer (MIL), componentes fundamentales en los que se sustenta la composición de escritorio, y en definitiva Windows Aero. Esta segunda parte se centrará en el componente en modo usuario denominado DWM (Desktop Window Manager).

Como ya dije en la primera parte, la característica más destacada de la composición de escritorio consiste en que las aplicaciones no dibujan directamente sobre la pantalla, sino que lo hacen sobre búferes internos, y es el sistema operativo el que en última instancia "compone" todas las imágenes en pantalla. Este proceso de redirección es complejo, y lo resumo para los dos tipos principales de aplicaciones gráficas: GDI y DirectX (existe también la "mezcla" de ambas, pero este tema no se tratará en este artículo).

Las aplicaciones que dispongan de ventanas GDI (la gran mayoría) disponen de dos búferes, uno en memoria del sistema y otro en memoria de vídeo. Todas las operaciones se realizan sobre memoria de sistema, el sistema operativo es el que decide actualizar cada cierto tiempo porciones de memoria de vídeo con las superficies almacenadas en memoria de sistema. La composición de escritorio se realiza con las superficies de memoria de vídeo.

Las aplicaciones de tipo DirectX sólo disponen de un búfer en memoria de vídeo, pues éstas ya renderizan píxeles en un formato que "entiende" DWM. La redirección ocurre cuando DWM y la aplicación DirectX comparten una superficie donde se realiza el renderizado, cosa que sólo es posible cuando DirectX se sustenta en controladores WDDM.

El proceso de redirección, como puede observar, es bastante complejo. Las funciones implicadas residen en la DLL Dwmredir.dll, que forma parte del componente Microsoft-Windows-DesktopWindowManager-core.

Todo empieza en Userinit.exe

Userinit.exe es el componente de Windows encargado de inicializar el entorno de sesión del usuario (una vez que éste ha iniciado sesión) y cargar el shell de su elección, que por defecto es Explorer.exe.

Antes de cargar el shell, Userinit.exe inicia el servicio encargado de ejecutar DWM.exe, el servicio "Desktop Window Manager Session Manager" (un nombre algo redundante :-P), implementado en la DLL UxSms.dll (el servicio anteriormente se denominaba "User Experience Session Manager", de ahí el nombre). Durante su inicialización, DWM analiza las características hardware con el fin de determinar si puede (o debe) activar la composición de escritorio. Para ello, emplea algunas funciones implementadas en Milcore.dll, que se ponen en contacto con la información gráfica disponible, residente en el kernel. El primer requisito que se debe cumplir es que los controladores sean WDDM. Si no lo son, no se puede activar la composición de escritorio. Asimismo, se realiza un análisis del ancho de banda de la tarjeta de vídeo, moviendo texturas. Si la tarjeta gráfica resulta ser lenta, tampoco se activará composición de escritorio. Note que es esencial que el hardware gráfico sea reciente para que la composición de escritorio se realice eficientemente. También se calcula, a partir de la resolución de pantalla y el tamaño de píxel empleado, la cantidad mínima de memoria de vídeo exigida. Por último, es necesario que el sistema disponga de, al menos, 512 MB de memoria RAM. Esto se debe a que la composición de escritorio requiere almacenar texturas de vídeo que pueden ocupar un importante espacio en memoria. Por supuesto, también es necesario que la licencia permita activar la composición de escritorio, y que el sistema sea calificado como genuino.

Resumen: Composición de escritorio se permite siempre y cuando:

  • La licencia del sistema lo permita (Windows Vista Home Premium o Ultimate).

  • No esté deshabilitada mediante directivas.

  • Los controladores gráficos sean WDDM.

  • La versión de Pixel Shader soportada por la tarjeta gráfica sea la 2.0.

  • El ancho de banda proporcionado por la tarjeta gráfica sea apropiado.

  • La cantidad de memoria de vídeo sea adecuada según la resolución empleada.

  • El sistema disponga de, al menos, 512 MB de memoria principal.

  • El sistema sea genuino.

Windows Aero = Composición de escritorio + Transparencias



Estas mediciones, bastante interrelacionadas con otro componente de Windows Vista denominado WinSAT, se implementan en la DLL Dwmapi.dll, que también contiene las APIs relacionadas con DWM, Flip3D, instantáneas, etc.


Problema: Windows Aero funcionaba correctamente pero de repente se han desactivado todos los efectos de transparencia, ¿qué ha pasado?

Hay dos escenarios principales por los que puede ocurrir este problema:

  • Alguna aplicación ha intentado dibujar directamente sobre la pantalla (recuerde que no está permitido leer/escribir directamente en pantalla mediante la función GetDC(NULL)). Cuando la aplicación en cuestión deje de ejecutarse, los efectos se restablecerán.

  • Windows ha decidido desactivar DWM porque ha determinado que el desempeño del mismo sería pobre, dada la carga del sistema. Reinicie el sistema y observe si todo vuelve a la normalidad.

Esta información también queda reflejada en Visor de sucesos, así que será su primer lugar de búsqueda ante un problema con Windows Aero/DWM.


¿Cómo se sabe qué temas hay disponibles?

Cuando el usuario accede al panel correspondiente para cambiar el tema de escritorio, el sistema realiza algunas comprobaciónes antes de mostrar los temas a elegir:

  1. Si el sistema no soporta composición de escritorio, o bien está deshabilitada mediante políticas, o mediante licencia (la licencia de Windows Vista Home Basic no permite composición de escritorio), sólo se mostrará el tema "Básico de Windows Vista".

  2. Si el sistema soporta composición de escritorio, pero no efectos de transparencia (de nuevo, ya sea por limitación hardware, directivas aplicadas, o licencia), se mostrarán los temas "Estándar de Windows Vista" y "Básico de Windows Vista".

  3. Si el sistema soporta tanto composición como transparencias, se mostrarán los dos temas anteriores junto con "Windows Aero". Éste sólo está presente en Windows Vista Home Premium y Ultimate.

Este artículo de dos partes ha sido una descripción más o menos práctica de DWM/Windows Aero y WPF/MIL. En un próximo artículo verá una demostración empírica muy sencilla de la composición de escritorio en acción.

4 comentarios:

Anónimo dijo...

"...el shell de windows, que por defecto es el explorer...."
Perdón: ¿Existe otro shell.?
Saludos.-

Daniel Martín dijo...

Puedes sustituir Explorer.exe por cualquier otro gestor de archivos de terceros; incluso puedes sustituirlo por la línea de comandos (Cmd.exe). Esto es lo que ocurre cuando inicias el sistema en "Modo seguro con símbolo del sistema".

davicho/floyd dijo...

Hola Daniel, Felicitaciones por el articulo.

A través del programa Vista Glazz, he logrado insertar temas y emular un efecto de transparencia en las ventanas maximizadas en un Windows vista home basic. Con el programa indicado, era posible acceder a la opción "habilitar la composicion de escritorio" (obviamente no con la performance de Vista Home premium u otro superior...).

Al instalar SP1 para vista, he tenido problemas pues ya no puedo acceder a los temas estandar de windows vista (solo a los temas basicos) y ya no tengo la opción de habilitar la composicion de escritorio.

existe alguna forma de volver a habilitarlo mediante editor de registro? o el problema se debe a la instalación del SP1?

saludos

David

Anónimo dijo...

Una consulta relación al escritorio Aero:
Tengo instalado Windows Vista Ultimate, en la primera instalación que realicé, apareció en el escritorio una barra superior tipo Dock. Al reinstalar Vista Ultimate, no logro que esa barra superior en el escritorio vuelva a aparecer. Posibles motivos? Como activarla manualmente? Como se llama dicha barra dado que no he encontrado información sobre ella?
Desde ya muchas gracias.