GeckoView 优先级提示 API

Cathy Lu <calu@mozilla.com>,Bug 1764998

2022 年 5 月 2 日

摘要

本文档描述了通过应用高优先级提示将进程设置为高优先级的 API。此 API 将显式设置优先级,而不是根据扩展的活动优先级推断优先级。

动机

此 API 将允许测量 Glean 指标,以便比较启用和禁用进程优先级时的性能和稳定性指标。以前,优先级取决于GeckoSession是否具有关联的界面,这降低了后台标签的优先级,并且需要更频繁地重新加载。

目标

应用可以为GeckoSession设置priorityHint

现有工作

Bug 1753700中,我们在 dom/ipc 中添加了一个 API,允许GeckoViewWebExtension设置特定remoteTab的布尔值priorityHint。这允许根据 Web 扩展程序处于活动状态但没有界面的标签具有高优先级。

实现

GeckoSession中,添加一个 API setPriorityHint,它接受一个整数作为参数。优先级整数可以是PRIORITY_DEFAULTPRIORITY_HIGH。指定的和活动标签将为PRIORITY_HIGH。默认值为PRIORITY_DEFAULT。此 API 将分派一个事件GeckoView:SetPriorityHint

public void setPriorityHint(final @Priority int priorityHint)

GeckoViewContent.sys.mjs中的监听器将this.browser.frameLoader.remoteTab.priorityHint设置为传入的布尔值。

case "GeckoView:setPriorityHint":
  if (this.browser.isRemoteBrowser) {
    let remoteTab = this.browser.frameLoader?.remoteTab;
    if (remoteTab) {
      remoteTab.renderLayers.priorityHint = val;
    }
  }
break;

其他复杂性

使用此 API 的应用需要在标签切换到前台或后台时手动使用 API 设置 priorityHint。