it-swarm-es.tech

¿Cuál es la arquitectura del sistema de ventanas de Mac OS X?

Estoy familiarizado con el funcionamiento del sistema X11, donde los clientes se conectan a través de un socket al proceso del servidor y envían operaciones al servidor de ventanas para realizar ciertas operaciones en su nombre.

Pero no entiendo (y no pude encontrar buenos documentos) que describan cómo interactúa una aplicación GUI con el sistema de ventanas en Mac OS X. Algunas de las preguntas que tengo incluyen:

  • ¿Cómo recibe una aplicación eventos del sistema de ventanas?
  • ¿La aplicación necesita registrarse con el kernel o algún servidor de sistema de ventanas?
  • ¿Cómo solicita el sistema de ventanas que una aplicación actualice su pantalla?
  • ¿Cómo activa una aplicación una operación de volver a mostrar?
  • ¿Existe un protocolo basado en socket o algún otro sistema RPC para el sistema de ventanas?
  • ¿Tiene el sistema de ventanas o la aplicación acceso directo al hardware?
  • ¿Cuáles son las operaciones disponibles entre las aplicaciones cliente y el sistema de ventanas?
35
miguel.de.icaza

Esto es lo que he podido reunir hasta ahora:

Las aplicaciones se comunican a través de algún tipo de API privada con el proceso WindowServer, el proceso WindowServer es el que realmente obtiene los eventos de hardware (mouse, teclado) y los envía a las aplicaciones cliente. (esta es todavía una pregunta abierta: qué protocolo usan, si lo hay, usan puertos Mach y MIG, o alguna API basada en Socket, no estoy seguro).

Alguna información está aquí:

https://developer.Apple.com/mac/library/documentation/MacOSX/Conceptual/OSX_Technology_Overview/GraphicsTechnologies/GraphicsTechnologies.html#//Apple_ref/doc/uid/TP40001067-CH273-SW1

WindowServer es Quartz Compositor. Normalmente, las aplicaciones utilizan la API Quartz2D que se expone en la API CoreGraphics (funciones CGXXX). Las aplicaciones crean "contextos" de CoreGraphics (CGContext) y dibujan allí. Si el contexto se empuja cuando se hace como mapa de bits grande, o si las operaciones se envían al servidor como en X11, sigue siendo una pregunta abierta.

Existe una API limitada expuesta para controlar ciertos aspectos del proceso de WindowServer, el tipo de ajustes de configuración que normalmente se realizan desde la aplicación Configuración, pero no hay documentación sobre cómo las aplicaciones realmente comunican solicitudes gráficas o bombean mensajes desde el servidor, aparte de las API de carbono/cacao expuestas.

14
miguel.de.icaza

El "¿Qué es el cacao?" La sección de Cocoa Fundamentals Guide tiene un montón de excelentes ilustraciones de la arquitectura desde abajo hacia arriba.

3
Kevin Cantu

El mejor recurso para los componentes internos de OS X es Amit Singh's Mac OS X Internals . Es asombrosamente detallado, pero desafortunadamente solo cubre OS X hasta 10.4. Google books tiene una vista previa .

Documentación de Apple para OS X también es un recurso agradable y, obviamente, está más actualizado.

2
redacted

XQuartz es el proyecto de código abierto del X.org X Window System que se ejecuta en Mac OS X. Su wiki de desarrollador y lista de correo debería ayudarlo con sus preguntas, parece que necesita a alguien profundamente involucrado en el proyecto para responder a esos.

1
invert

En versiones anteriores de MacOS, QuickDraw realizaba la elevación; en OS X, que ha sido reemplazado por Cocoa ...

Sin embargo, no es simplemente paralelo a X11. Por ejemplo, X11 no incluye audio, pero Cocoa sí.

1
Kevin Cantu