Es hat mit ziemlicher Sicherheit mit dem Desktop Window Compositor zu tun.
Wenn Sie ein Video in einem Webbrowser-Fenster abspielen, und schlimmer noch, in einem Plugin , muss der Webbrowser seine Seite folgendermaßen rendern:
- Zeichnen Sie unsere Fensterdekorationen (Adressleiste, Lesezeichen, Schaltflächen usw.)
- Zeichnen Sie die ersten Teile der Webseite.
- Zeichne ein "schwarzes Quadrat", in dem sich das Video befinden soll, aber zeichne die relevanten Teile der Webseite auf beiden Seiten (links und rechts).
- Bitten Sie das Plugin, an der Stelle zu zeichnen, an der es sein Fenster haben möchte.
- Zeichnen Sie den Rest der Webseite unterhalb des Fensters bis zum Ende der Seite.
- Darüber hinaus muss der Compositing-Fenstermanager, der für die animierten Effekte verantwortlich ist (z. B. beim Minimieren und Maximieren von Fenstern usw.), den Inhalt jedes Fensters auf dem Bildschirm verfolgen. Als Teil davon muss es alles verfolgen, was in diesem Fenster gezeichnet wird, einschließlich des Plugins, das in Chrome ein Out-of-Process- Plugin ist (das heißt, es ist Teil eines anderen Prozesses, nicht des Chrome-Hauptprozesses). Wenn der Compositing-Fenstermanager dies nicht im Auge behalten und alles im Fenster als "3D-Textur" behandeln würde, wäre es nicht möglich, die Minimierung eines Fensters in Ihrer Taskleiste zu animieren, wenn Sie auf die Minus-Schaltfläche klicken.
Wenn Sie Flash (oder Silverlight) anweisen, das Video im Vollbildmodus abzuspielen, sagt Flash Chrome nicht mehr, dass etwas gerendert werden soll. Tatsächlich kann der gesamte Compositing-Fenstermanager vorübergehend deaktiviert werden, und jedes andere Programm, das möglicherweise für das Rendern von Grafiken auf dem Monitor verantwortlich ist, wird vorübergehend angewiesen, das Rendern zu beenden (oder sie dürfen möglicherweise Zeichnungsbefehle übermitteln, haben jedoch keine Effekt auf dem Bildschirm.)
Grafik-Pipeline ohne Vollbild:
Browser und Flash / Silverlight -> Compositing Window Manager -> Grafikhardware
Grafik-Pipeline im Vollbildmodus:
Flash / Silverlight -> Grafikhardware
Diese vereinfachte Pipeline reduziert den Overhead, da weniger Puffer "kopiert" wird und die gesamte Videoverarbeitung ungefähr so aussieht:
- Laden Sie den Videoinhalt aus dem Netzwerk herunter.
- Entschlüsseln Sie das Video mit dem DRM-System.
- Verwenden Sie einen speziellen Teil der GPU, die sogenannte Videodekodierungspipeline mit festen Funktionen, um die Hardwaredekodierung der Videodaten in ein nicht komprimiertes Format durchzuführen .
- Die Hardware-Videodekodierungs-Pipeline kann das dekodierte Video jetzt direkt in den Grafik-Framebuffer kopieren und wiedergeben - ohne es an die CPU / RAM zurückzusenden!
Die Fans drehen sich und es wird mehr Energie verbraucht, wenn das Video mit Fenstern versehen wird, gerade weil der Compositing-Fenstermanager immer sagt: "OK, wie sieht das Video gerade aus?" und es ist zu lesen wieder in die CPU (und wahrscheinlich gepuffert in RAM) , bevor das Compositing Window Manager entscheidet dann, es zu schreiben direkt zurück an die Grafikkarte, zusammen mit all den anderen Compositing - Daten (Browser, die Taskleiste, etc. .)
Das Compositing Window Manager hat für den Videoinhalt zu fragen zu halten , um die CPU zu übertragen zurück , weil unter normalen Umständen der einzige Prozess auf dem System , das zu schreiben ist erlaubt direkt zu dem Video - Framebuffer ist das Compositing Window Manager. Der Browser, der Videoplayer und alle anderen Komponenten des Systems müssen den Compositing-Fenstermanager wie einen Gatekeeper oder Sprecher durchlaufen, der sich zwischen der Hardware und dem Benutzerbereich befindet.
Dies dient zum Teil der Aktivierung von "Effekten" und zum Teil aus Sicherheits- und Stabilitätsgründen, da Programme den Desktop nicht direkt beschädigen können (entweder böswillig oder durch fehlerhafte Codierung). Der Compositing Window Manager lässt es nicht zu. Wenn jedoch der Compositing-Fenstermanager deaktiviert ist (auf Anforderung privilegierter Programme wie Flash und Silverlight), ist diese zusätzliche Schicht "Overhead" plötzlich weg.
Der Compositing Window Manager, der unter Mac OS X verwendet wird, heißt Quartz Compositor und ist seit langem Teil von OS X. Quartz Extreme ist die moderne Inkarnation des Quarz-Compositors, der alles, was ich oben beschrieben habe, auf der GPU selbst ausführt (obwohl diese Vorgänge nicht "kostenlos" sind, nur weil sie auf die GPU ausgelagert sind; die GPU verbraucht immer noch Strom, um diese Compositing-Schritte auszuführen .)
Eine Entwicklerperspektive darüber, wie ein Programm (wie Flash oder Silverlight) die Vollbildsteuerung übernehmen und den Quartz Compositor vorübergehend deaktivieren kann, finden Sie in diesem Apple-Entwicklerdokument .
Kurz gesagt: Quartz Compositor + sehr häufige Bildschirmaktualisierungen (30 bis 60 Mal pro Sekunde mit Video) == hohe CPU-Auslastung. Wenn Sie die Quartz Compositor-Komponente aus der Pipeline entfernen, sinkt die CPU-Auslastung drastisch, insbesondere weil Flash und Silverlight hardwarebeschleunigtes Video-Rendering und -Dekodierung bieten.