它几乎肯定与桌面窗口合成器有关。
当您在网络浏览器窗口中播放视频时,更糟糕的是,在 插入 ,Web浏览器必须如此呈现其页面:
- 画出我们的窗户装饰(地址栏,书签,按钮等)
- 绘制网页的第一部分。
- 绘制视频应该是的“黑色方块”,但在其两侧(左侧和右侧)绘制网页的相关部分。
- 请插件很好地在它说它想要窗口的地方绘制。
- 绘制窗口下方的其余网页,直到页面底部。
- 在此序列的顶部,合成窗口管理器负责动画效果(如最小化和最大化窗口等),必须跟踪屏幕上每个窗口的内容。作为其中的一部分,它必须跟踪窗口内的所有内容,包括Chrome中的插件 外的过程 插件(意思是,它是另一个进程的一部分,而不是chrome主进程)。如果合成窗口管理器没有跟踪这一点,并将窗口中的所有内容视为“3D纹理”,则单击减号按钮时,无法将窗口最小化设置为任务栏。
当你告诉Flash(或Silverlight)全屏播放视频时,Flash会停止告诉Chrome渲染任何内容。事实上,整个合成窗口管理器可以暂时禁用,并且可能负责向监视器渲染图形的每个其他程序暂时被告知停止渲染(或者,也许,他们可以提交绘图命令,但他们没有实际效果在屏幕上。)
图形管道虽然不是全屏:
浏览器和Flash / Silverlight - >合成窗口管理器 - >图形硬件
全屏图形管道:
Flash / Silverlight - >图形硬件
这种简化的管道减少了开销,因为缓冲“复制”的次数较少,整个视频处理看起来像这样:
- 从网络下载视频内容。
- 使用DRM系统解密视频。
- 使用称为固定功能视频解码管道的GPU的特殊部分来执行 硬件解码 将视频数据转换为未压缩格式。
- 硬件视频解码管道现在可以将解码后的视频直接复制到图形帧缓冲区并播放 - 无需将其发送回CPU / RAM!
由于合成窗口管理器总是说“好的,视频现在看起来像什么?”,因此当视频正好开窗时,粉丝会旋转并获得更多电量。它必须是 读 在合成窗口管理器然后决定将其直接写回到显卡以及所有其他合成数据(浏览器,任务栏等)之前,返回到CPU(并且可能缓冲在RAM中)
合成窗口管理器必须不断要求将视频内容传输回CPU,因为在正常情况下,系统上唯一允许写入的进程 直 到视频帧缓冲区 是 合成窗口管理器。浏览器,视频播放器和系统上的所有其他组件都必须通过合成窗口管理器,如网守或发言人,它位于硬件和用户空间之间。
这部分是为了实现“效果”,部分是出于安全性和稳定性的原因,因为程序无法直接破坏桌面(恶意或不良编码);合成窗口管理器不会让它。但是,当合成窗口管理器被禁用时(在Flash和Silverlight等特权程序的请求下),突然间,额外的“开销”层就消失了。
调用Mac OS X上使用的合成窗口管理器 Quartz Compositor 它已经成为OS X的一部分很长一段时间了。 石英至尊 是Quartz合成器的现代化身,它在GPU本身上完成了我上面描述的所有内容(虽然这些操作不是“免费”的,因为它们被卸载到GPU; GPU仍然消耗功率执行这些合成步骤。)
对于开发人员的角度,确切了解程序(如Flash或Silverlight)如何进行全屏控制并暂时禁用Quartz Compositor,请参阅 这个Apple开发者文档 。
长话短说: Quartz Compositor +非常频繁的屏幕更新(每秒30至60次视频)==高CPU使用率。从管道中删除Quartz Compositor组件,CPU使用率急剧下降,特别是因为Flash和Silverlight具有硬件加速的视频渲染和视频解码。