sábado, enero 12, 2008

Experimento: DWM en acción

En los días pasados hablamos un poco sobre el funcionamiento de Windows Aero, la composición de escritorio, y Desktop Window Manager (DWM). En este artículo haremos un pequeño experimento para que observe que es el propio sistema operativo el que compone imágenes en pantalla, a diferencia de lo que ocurre en versiones anteriores de Windows.

Quizá haya experimentado alguna vez lo siguiente: Un programa se ha bloqueado (deja de responder) y, como consecuencia, si pasa ventanas por encima de la ventana bloqueada observa un feo efecto que consiste en que la ventana que mueve "va tapando" a la ventana bloqueada, hasta que ésta pierde por completo su representación. ¿Por qué ocurre esto? Como ya sabe, Windows determina que un programa está bloqueado cuando, entre otras cosas, no ha respondido a mensajes durante un tiempo prudencial (5 segundos en las implementaciones actuales). Uno de estos mensajes es WM_PAINT, que más o menos le dice a la ventana en cuestión: "Hay una nueva parte visible, así que píntate de nuevo". Cuando un proceso está bloqueado, no trata ningún tipo de mensajes, así que la ventana irá perdiendo su forma conforme vayamos tapando zonas de la misma pasando otras ventanas por encima. En Windows Vista esto no ocurre pues es DWM el encargado de componer cada ventana en búferes distintos. Las ventanas en segundo plano no necesitan responder a WM_PAINT, pues el motor de composición de escritorio ya tiene su representación completa.

Para llevar a cabo el experimento, necesitará dos sistemas, uno con Windows XP instalado y otro con Windows Vista. Para simular el "bloqueo" de la aplicación, haremos uso de la función "Suspend" de Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx), por lo que necesitará que esté presente en cada sistema operativo.
  • Arranque el sistema con Windows XP instalado.
  • Inicie una aplicación cualquiera, como Bloc de notas, por ejemplo.
  • Abra Process Explorer y seleccione el proceso Notepad.exe con el botón derecho del ratón.
  • Elija Suspend.
  • Mueva la propia ventana de Process Explorer sobre la ventana de Bloc de notas y observe el resultado.
  • Ahora arranque el sistema con Windows Vista instalado.
  • Repita los pasos anteriores y observe que la ventana de Bloc de notas no se ve afectada en absoluto. Por supuesto, necesitará tener activada la composición de escritorio en el sistema operativo.

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.