为什么 Netflix 在全屏模式下表现更好(更高效)?

为什么 Netflix 在全屏模式下表现更好(更高效)?

前几天我注意到,当我在 Retina MacBook Pro 上使用 Chrome 观看 Netflix 电影时,当我仅在常规窗口的单个选项卡中观看视频时,风扇会旋转得更快。 (即非全屏。)

切换到全屏模式后,大约一分钟内,风扇就会停止转动。

因此,我使用电池监视器应用程序在两种模式下观看时测量 mAh,在窗口模式下测得约 85 mAh,在全屏模式下测得约 50 mAh。

我还没有在其他浏览器上测试过。

活动监视器报告称,只要在选项卡中打开 Netflix 就会导致独立卡启动,所以我认为这与集成显卡和独立显卡无关。

我似乎无法确定为什么更大的观看区域和(理论上)更高质量的视频流会使用较少的系统资源。

答案1

它几乎肯定与桌面窗口合成器有关。

当你在网络浏览器窗口中播放视频时,更糟糕的是,插入,网络浏览器必须按如下方式呈现其页面:

  1. 绘制我们的窗口装饰(地址栏、书签、按钮等)
  2. 绘制网页的第一部分。
  3. 在视频所在的位置绘制一个“黑色方块”,但在其两侧(左侧和右侧)绘制网页的相关部分。
  4. 要求插件在它想要放置窗口的位置进行绘制。
  5. 将网页的其余部分绘制在窗口下方,直至页面底部。
  6. 除了这个序列之外,负责动画效果(例如最小化和最大化窗口等)的合成窗口管理器必须跟踪屏幕上每个窗口的内容。作为其中的一部分,它必须跟踪窗口内绘制的所有内容,包括插件,在 Chrome 中,插件是一个进程外插件(意思是,它是另一个进程的一部分,而不是 Chrome 主进程的一部分)。如果合成窗口管理器没有跟踪这一点,并将窗口中的所有内容视为“3D 纹理”,则当您单击减号按钮时,它将无法将窗口最小化到任务栏中。

当您告诉 Flash(或 Silverlight)全屏播放视频时,Flash 会停止告诉 Chrome 渲染任何内容。事实上,整个合成窗口管理器可能会被暂时禁用,并且负责将图形渲染到显示器的所有其他程序都会被暂时告知停止渲染(或者,也许允许它们提交绘图命令,但它们对屏幕没有实际影响。)

非全屏时的图形管道:

浏览器和 Flash/Silverlight -> 合成窗口管理器 -> 图形硬件

全屏时的图形管道:

Flash/Silverlight -> 图形硬件

这种简化的管道减少了开销,因为缓冲区“复制”较少,整个视频处理看起来像这样:

  1. 从网络下载视频内容。
  2. 使用 DRM 系统解密视频。
  3. 使用 GPU 的一个特殊部分(称为固定功能视频解码管道)来执行硬件解码将视频数据转换为未压缩的格式。
  4. 硬件视频解码管道现在可以将解码的视频直接复制到图形帧缓冲区并播放 - 而无需将其发送回 CPU/RAM!

当视频窗口化时,风扇会旋转起来,消耗更多的电量,因为合成窗口管理器总是在说,“好的,视频现在是什么样子的?”它必须是然后合成窗口管理器决定将其与所有其他合成数据(浏览器、任务栏等)一起写回到 CPU(可能在 RAM 中缓冲)。

合成窗口管理器必须不断请求将视频内容传输回 CPU,因为在正常情况下,系统上唯一允许写入的进程直接地到视频帧缓冲区合成窗口管理器。浏览器、视频播放器和系统上的所有其他组件都必须通过合成窗口管理器,它就像一个看门人或发言人,位于硬件和用户空间之间。

这部分是为了启用“效果”,部分是出于安全和稳定性的原因,因为程序无法直接破坏桌面(无论是恶意破坏还是通过错误编码);合成窗口管理器不会允许这种情况发生。但是,当合成窗口管理器被禁用时(应 Flash 和 Silverlight 等特权程序的要求),突然间,额外的“开销”层就消失了。

Mac OS X 上使用的合成窗口管理器称为石英合成器并且它早已成为 OS X 的一部分。石英至尊是 Quartz 合成器的现代化身,它在 GPU 本身上完成我上面描述的所有操作(尽管这些操作并不“免费”,因为它们被卸载到 GPU 上;GPU 在执行这些合成步骤时仍然会消耗电量。)

要从开发人员的角度了解程序(例如 Flash 或 Silverlight)如何实现全屏控制并暂时禁用 Quartz Compositor,请参阅这份 Apple 开发者文档

长话短说:Quartz Compositor + 非常频繁的屏幕更新(视频每秒 30 到 60 次)== 高 CPU 使用率。从管道中删除 Quartz Compositor 组件后,CPU 使用率会大幅下降,尤其是因为 Flash 和 Silverlight 具有硬件加速的视频渲染和视频解码。

答案2

这可能有几个原因。

原因还会根据您的屏幕分辨率和接收的 Netflix 分辨率而有所不同。

如果您以全屏方式观看,并以匹配的分辨率观看 Netflix,例如在高清显示器上观看高清,则流媒体会直接发布到屏幕上,无需任何实际努力。

但是,如果您在较小的窗口中观看高清流媒体,则需要在您的机器上进一步处理流媒体,以使其适合给定的观看窗口,并使用某种过滤。这显然会降低机器速度和/或消耗更多资源。

唯一的缺点是,如果您有适合较小窗口的较小分辨率流。在这种情况下,它应该类似于全屏。

除此之外,全屏模式下,您的机器只会渲染查看窗口。但是,窗口模式下,您还会渲染桌面、其他窗口等等。需要更多处理/资源。

可能还有更多我没有涉及的原因。

答案3

Chrome 有时会暂停一段时间未使用的标签页(或者如果您在后台打开了它们但尚未加载的标签页) - 也许让某些内容全屏显示会有同样的效果?

如果我的猜测是正确的,那么合理的解释是,当你在全屏模式下查看某些内容时,你不太可能切换标签(你甚至可能无法切换)。退出全屏模式所需的时间切换标签页的时间足以让 Chrome 恢复您最有可能切换到的标签页。这可以解释切换到全屏时功耗突然下降的原因。可能还需要注意的是,全屏视频流通常被视为单独的窗口,这意味着当 Netflix 处于全屏模式时,Chrome 本身不再具有焦点。

您可能希望将这些结果与其他全屏兼容网站(例如 YouTube)进行比较,并且(如果可能)还希望与其他同时提供 Silverlight 和全屏模式的网站进行比较。

相关内容