зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla-central to inbound r=merge
This commit is contained in:
Коммит
4027f91f3e
|
@ -34,11 +34,23 @@ var gEMEHandler = {
|
|||
}
|
||||
return true;
|
||||
},
|
||||
getLearnMoreLink(msgId) {
|
||||
let text = gNavigatorBundle.getString("emeNotifications." + msgId + ".learnMoreLabel");
|
||||
getEMEDisabledFragment(msgId) {
|
||||
let mainMessage = gNavigatorBundle.getString("emeNotifications.drmContentDisabled.message");
|
||||
let [prefix, suffix] = mainMessage.split(/%(?:\$\d)?S/).map(s => document.createTextNode(s));
|
||||
let text = gNavigatorBundle.getString("emeNotifications.drmContentDisabled.learnMoreLabel");
|
||||
let baseURL = Services.urlFormatter.formatURLPref("app.support.baseURL");
|
||||
return "<label class='text-link' href='" + baseURL + "drm-content'>" +
|
||||
text + "</label>";
|
||||
let link = document.createElement("label");
|
||||
link.className = "text-link";
|
||||
link.setAttribute("href", baseURL + "drm-content");
|
||||
link.textContent = text;
|
||||
|
||||
let fragment = document.createDocumentFragment();
|
||||
[prefix, link, suffix].forEach(n => fragment.appendChild(n));
|
||||
return fragment;
|
||||
},
|
||||
getMessageWithBrandName(notificationId) {
|
||||
let msgId = "emeNotifications." + notificationId + ".message";
|
||||
return gNavigatorBundle.getFormattedString(msgId, [this._brandShortName]);
|
||||
},
|
||||
receiveMessage({target: browser, data: data}) {
|
||||
let parsedData;
|
||||
|
@ -56,7 +68,8 @@ var gEMEHandler = {
|
|||
|
||||
let notificationId;
|
||||
let buttonCallback;
|
||||
let params = [];
|
||||
// Notification message can be either a string or a DOM fragment.
|
||||
let notificationMessage;
|
||||
switch (status) {
|
||||
case "available":
|
||||
case "cdm-created":
|
||||
|
@ -71,17 +84,17 @@ var gEMEHandler = {
|
|||
case "cdm-disabled":
|
||||
notificationId = "drmContentDisabled";
|
||||
buttonCallback = gEMEHandler.ensureEMEEnabled.bind(gEMEHandler, browser, keySystem);
|
||||
params = [this.getLearnMoreLink(notificationId)];
|
||||
notificationMessage = this.getEMEDisabledFragment();
|
||||
break;
|
||||
|
||||
case "cdm-insufficient-version":
|
||||
notificationId = "drmContentCDMInsufficientVersion";
|
||||
params = [this._brandShortName];
|
||||
notificationMessage = this.getMessageWithBrandName(notificationId);
|
||||
break;
|
||||
|
||||
case "cdm-not-installed":
|
||||
notificationId = "drmContentCDMInstalling";
|
||||
params = [this._brandShortName];
|
||||
notificationMessage = this.getMessageWithBrandName(notificationId);
|
||||
break;
|
||||
|
||||
case "cdm-not-supported":
|
||||
|
@ -93,44 +106,27 @@ var gEMEHandler = {
|
|||
return;
|
||||
}
|
||||
|
||||
this.showNotificationBar(browser, notificationId, keySystem, params, buttonCallback);
|
||||
},
|
||||
showNotificationBar(browser, notificationId, keySystem, labelParams, callback) {
|
||||
// Now actually create the notification
|
||||
|
||||
let box = gBrowser.getNotificationBox(browser);
|
||||
if (box.getNotificationWithValue(notificationId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
let msgPrefix = "emeNotifications." + notificationId + ".";
|
||||
let msgId = msgPrefix + "message";
|
||||
|
||||
let message = labelParams.length ?
|
||||
gNavigatorBundle.getFormattedString(msgId, labelParams) :
|
||||
gNavigatorBundle.getString(msgId);
|
||||
|
||||
let buttons = [];
|
||||
if (callback) {
|
||||
if (buttonCallback) {
|
||||
let msgPrefix = "emeNotifications." + notificationId + ".";
|
||||
let btnLabelId = msgPrefix + "button.label";
|
||||
let btnAccessKeyId = msgPrefix + "button.accesskey";
|
||||
buttons.push({
|
||||
label: gNavigatorBundle.getString(btnLabelId),
|
||||
accessKey: gNavigatorBundle.getString(btnAccessKeyId),
|
||||
callback
|
||||
callback: buttonCallback,
|
||||
});
|
||||
}
|
||||
|
||||
let iconURL = "chrome://browser/skin/drm-icon.svg";
|
||||
|
||||
// Do a little dance to get rich content into the notification:
|
||||
let fragment = document.createDocumentFragment();
|
||||
let descriptionContainer = document.createElement("description");
|
||||
// eslint-disable-next-line no-unsanitized/property
|
||||
descriptionContainer.innerHTML = message;
|
||||
while (descriptionContainer.childNodes.length) {
|
||||
fragment.appendChild(descriptionContainer.childNodes[0]);
|
||||
}
|
||||
|
||||
box.appendNotification(fragment, notificationId, iconURL, box.PRIORITY_WARNING_MEDIUM,
|
||||
box.appendNotification(notificationMessage, notificationId, iconURL, box.PRIORITY_WARNING_MEDIUM,
|
||||
buttons);
|
||||
},
|
||||
showPopupNotificationForSuccess(browser, keySystem) {
|
||||
|
|
|
@ -1507,6 +1507,7 @@ stubPackets.set("console.log('foobar', 'test')", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924471,
|
||||
|
@ -1533,6 +1534,7 @@ stubPackets.set("console.log(undefined)", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924479,
|
||||
|
@ -1557,6 +1559,7 @@ stubPackets.set("console.warn('danger, will robinson!')", {
|
|||
"groupName": "",
|
||||
"level": "warn",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924487,
|
||||
|
@ -1583,6 +1586,7 @@ stubPackets.set("console.log(NaN)", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924495,
|
||||
|
@ -1609,6 +1613,7 @@ stubPackets.set("console.log(null)", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924501,
|
||||
|
@ -1633,6 +1638,7 @@ stubPackets.set("console.log('鼬')", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924506,
|
||||
|
@ -1655,6 +1661,7 @@ stubPackets.set("console.clear()", {
|
|||
"groupName": "",
|
||||
"level": "clear",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924512,
|
||||
"timer": null,
|
||||
|
@ -1682,6 +1689,7 @@ stubPackets.set("console.count('bar')", {
|
|||
"groupName": "",
|
||||
"level": "count",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924515,
|
||||
"timer": null,
|
||||
|
@ -1729,6 +1737,7 @@ stubPackets.set("console.assert(false, {message: 'foobar'})", {
|
|||
"groupName": "",
|
||||
"level": "assert",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924521,
|
||||
|
@ -1761,6 +1770,7 @@ stubPackets.set("console.log('hello \nfrom \rthe \"string world!')", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924528,
|
||||
|
@ -1785,6 +1795,7 @@ stubPackets.set("console.log('úṇĩçödê țĕșť')", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924586,
|
||||
|
@ -1821,6 +1832,7 @@ stubPackets.set("console.dirxml(window)", {
|
|||
"groupName": "",
|
||||
"level": "dirxml",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924596,
|
||||
"timer": null,
|
||||
|
@ -1863,6 +1875,7 @@ stubPackets.set("console.log('myarray', ['red', 'green', 'blue'])", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924604,
|
||||
|
@ -1897,6 +1910,7 @@ stubPackets.set("console.log('myregex', /a.b.c/)", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924610,
|
||||
|
@ -1938,6 +1952,7 @@ stubPackets.set("console.table(['red', 'green', 'blue']);", {
|
|||
"groupName": "",
|
||||
"level": "table",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924612,
|
||||
"timer": null,
|
||||
|
@ -1998,6 +2013,7 @@ stubPackets.set("console.log('myobject', {red: 'redValue', green: 'greenValue',
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924614,
|
||||
|
@ -2022,6 +2038,7 @@ stubPackets.set("console.debug('debug message');", {
|
|||
"groupName": "",
|
||||
"level": "debug",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924621,
|
||||
|
@ -2046,6 +2063,7 @@ stubPackets.set("console.info('info message');", {
|
|||
"groupName": "",
|
||||
"level": "info",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924625,
|
||||
|
@ -2070,6 +2088,7 @@ stubPackets.set("console.error('error message');", {
|
|||
"groupName": "",
|
||||
"level": "error",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924628,
|
||||
|
@ -2125,6 +2144,7 @@ stubPackets.set("console.log('mymap')", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 5,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924631,
|
||||
|
@ -2166,6 +2186,7 @@ stubPackets.set("console.log('myset')", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924746,
|
||||
|
@ -2188,6 +2209,7 @@ stubPackets.set("console.trace()", {
|
|||
"groupName": "",
|
||||
"level": "trace",
|
||||
"lineNumber": 3,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924752,
|
||||
"timer": null,
|
||||
|
@ -2232,6 +2254,7 @@ stubPackets.set("console.time('bar')", {
|
|||
"groupName": "",
|
||||
"level": "time",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924757,
|
||||
"timer": {
|
||||
|
@ -2258,6 +2281,7 @@ stubPackets.set("timerAlreadyExists", {
|
|||
"groupName": "",
|
||||
"level": "time",
|
||||
"lineNumber": 3,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924758,
|
||||
"timer": {
|
||||
|
@ -2285,6 +2309,7 @@ stubPackets.set("console.timeEnd('bar')", {
|
|||
"groupName": "",
|
||||
"level": "timeEnd",
|
||||
"lineNumber": 4,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924759,
|
||||
"timer": {
|
||||
|
@ -2312,6 +2337,7 @@ stubPackets.set("timerDoesntExist", {
|
|||
"groupName": "",
|
||||
"level": "timeEnd",
|
||||
"lineNumber": 5,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924759,
|
||||
"timer": {
|
||||
|
@ -2339,6 +2365,7 @@ stubPackets.set("console.table('bar')", {
|
|||
"groupName": "",
|
||||
"level": "table",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924801,
|
||||
"timer": null,
|
||||
|
@ -2380,6 +2407,7 @@ stubPackets.set("console.table(['a', 'b', 'c'])", {
|
|||
"groupName": "",
|
||||
"level": "table",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924859,
|
||||
"timer": null,
|
||||
|
@ -2404,6 +2432,7 @@ stubPackets.set("console.group('bar')", {
|
|||
"groupName": "bar",
|
||||
"level": "group",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924863,
|
||||
|
@ -2426,6 +2455,7 @@ stubPackets.set("console.groupEnd('bar')", {
|
|||
"groupName": "bar",
|
||||
"level": "groupEnd",
|
||||
"lineNumber": 3,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924864,
|
||||
"timer": null,
|
||||
|
@ -2450,6 +2480,7 @@ stubPackets.set("console.groupCollapsed('foo')", {
|
|||
"groupName": "foo",
|
||||
"level": "groupCollapsed",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924870,
|
||||
|
@ -2472,6 +2503,7 @@ stubPackets.set("console.groupEnd('foo')", {
|
|||
"groupName": "foo",
|
||||
"level": "groupEnd",
|
||||
"lineNumber": 3,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924871,
|
||||
"timer": null,
|
||||
|
@ -2494,6 +2526,7 @@ stubPackets.set("console.group()", {
|
|||
"groupName": "",
|
||||
"level": "group",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [],
|
||||
"timeStamp": 1502884924878,
|
||||
|
@ -2516,6 +2549,7 @@ stubPackets.set("console.groupEnd()", {
|
|||
"groupName": "",
|
||||
"level": "groupEnd",
|
||||
"lineNumber": 3,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924879,
|
||||
"timer": null,
|
||||
|
@ -2541,6 +2575,7 @@ stubPackets.set("console.log(%cfoobar)", {
|
|||
"groupName": "",
|
||||
"level": "log",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [
|
||||
"color:blue;font-size:1.3em;background:url('http://example.com/test');position:absolute;top:10px",
|
||||
|
@ -2569,6 +2604,7 @@ stubPackets.set("console.group(%cfoo%cbar)", {
|
|||
"groupName": "foo bar",
|
||||
"level": "group",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [
|
||||
"color:blue;font-size:1.3em;background:url('http://example.com/test');position:absolute;top:10px",
|
||||
|
@ -2594,6 +2630,7 @@ stubPackets.set("console.groupEnd(%cfoo%cbar)", {
|
|||
"groupName": "foo bar",
|
||||
"level": "groupEnd",
|
||||
"lineNumber": 6,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924887,
|
||||
"timer": null,
|
||||
|
@ -2619,6 +2656,7 @@ stubPackets.set("console.groupCollapsed(%cfoo%cbaz)", {
|
|||
"groupName": "foo baz",
|
||||
"level": "groupCollapsed",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"styles": [
|
||||
"color:blue;font-size:1.3em;background:url('http://example.com/test');position:absolute;top:10px",
|
||||
|
@ -2644,6 +2682,7 @@ stubPackets.set("console.groupEnd(%cfoo%cbaz)", {
|
|||
"groupName": "foo baz",
|
||||
"level": "groupEnd",
|
||||
"lineNumber": 6,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924893,
|
||||
"timer": null,
|
||||
|
@ -2709,6 +2748,7 @@ stubPackets.set("console.dir({C, M, Y, K})", {
|
|||
"groupName": "",
|
||||
"level": "dir",
|
||||
"lineNumber": 1,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1502884924899,
|
||||
"timer": null,
|
||||
|
@ -2736,6 +2776,7 @@ stubPackets.set("console.count | default: 1", {
|
|||
"groupName": "",
|
||||
"level": "count",
|
||||
"lineNumber": 2,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1511365913333,
|
||||
"timer": null,
|
||||
|
@ -2763,6 +2804,7 @@ stubPackets.set("console.count | default: 2", {
|
|||
"groupName": "",
|
||||
"level": "count",
|
||||
"lineNumber": 3,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1511365913334,
|
||||
"timer": null,
|
||||
|
@ -2790,6 +2832,7 @@ stubPackets.set("console.count | test counter: 1", {
|
|||
"groupName": "",
|
||||
"level": "count",
|
||||
"lineNumber": 4,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1511365913334,
|
||||
"timer": null,
|
||||
|
@ -2817,6 +2860,7 @@ stubPackets.set("console.count | test counter: 2", {
|
|||
"groupName": "",
|
||||
"level": "count",
|
||||
"lineNumber": 5,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1511365913334,
|
||||
"timer": null,
|
||||
|
@ -2844,6 +2888,7 @@ stubPackets.set("console.count | default: 3", {
|
|||
"groupName": "",
|
||||
"level": "count",
|
||||
"lineNumber": 6,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1511365913334,
|
||||
"timer": null,
|
||||
|
@ -2866,6 +2911,7 @@ stubPackets.set("console.count | clear", {
|
|||
"groupName": "",
|
||||
"level": "clear",
|
||||
"lineNumber": 7,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1511365913334,
|
||||
"timer": null,
|
||||
|
@ -2893,6 +2939,7 @@ stubPackets.set("console.count | default: 4", {
|
|||
"groupName": "",
|
||||
"level": "count",
|
||||
"lineNumber": 8,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1511365913335,
|
||||
"timer": null,
|
||||
|
@ -2920,6 +2967,7 @@ stubPackets.set("console.count | test counter: 3", {
|
|||
"groupName": "",
|
||||
"level": "count",
|
||||
"lineNumber": 9,
|
||||
"prefix": "",
|
||||
"private": false,
|
||||
"timeStamp": 1511365913335,
|
||||
"timer": null,
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
#include "mozilla/dom/UnionTypes.h"
|
||||
#include "mozilla/dom/WindowBinding.h" // For IdleRequestCallback/Options
|
||||
#include "nsThreadUtils.h"
|
||||
#include "mozJSComponentLoader.h"
|
||||
#include "GeckoProfiler.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
@ -372,6 +374,53 @@ ChromeUtils::IdleDispatch(const GlobalObject& aGlobal,
|
|||
}
|
||||
}
|
||||
|
||||
/* static */ void
|
||||
ChromeUtils::Import(const GlobalObject& aGlobal,
|
||||
const nsAString& aResourceURI,
|
||||
const Optional<JS::Handle<JSObject*>>& aTargetObj,
|
||||
JS::MutableHandle<JSObject*> aRetval,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
|
||||
RefPtr<mozJSComponentLoader> moduleloader = mozJSComponentLoader::Get();
|
||||
MOZ_ASSERT(moduleloader);
|
||||
|
||||
NS_ConvertUTF16toUTF8 registryLocation(aResourceURI);
|
||||
|
||||
AUTO_PROFILER_LABEL_DYNAMIC_NSCSTRING(
|
||||
"ChromeUtils::Import", OTHER, registryLocation);
|
||||
|
||||
JSContext* cx = aGlobal.Context();
|
||||
JS::Rooted<JS::Value> targetObj(cx);
|
||||
uint8_t optionalArgc;
|
||||
if (aTargetObj.WasPassed()) {
|
||||
targetObj.setObjectOrNull(aTargetObj.Value());
|
||||
optionalArgc = 1;
|
||||
} else {
|
||||
targetObj.setUndefined();
|
||||
optionalArgc = 0;
|
||||
}
|
||||
|
||||
JS::Rooted<JS::Value> retval(cx);
|
||||
nsresult rv = moduleloader->Import(registryLocation, targetObj, cx,
|
||||
optionalArgc, &retval);
|
||||
if (NS_FAILED(rv)) {
|
||||
aRv.Throw(rv);
|
||||
return;
|
||||
}
|
||||
|
||||
// Import() on the component loader can return NS_OK while leaving an
|
||||
// exception on the JSContext. Check for that case.
|
||||
if (JS_IsExceptionPending(cx)) {
|
||||
aRv.NoteJSContextException(cx);
|
||||
return;
|
||||
}
|
||||
|
||||
// Now we better have an object.
|
||||
MOZ_ASSERT(retval.isObject());
|
||||
aRetval.set(&retval.toObject());
|
||||
}
|
||||
|
||||
/* static */ void
|
||||
ChromeUtils::OriginAttributesToSuffix(dom::GlobalObject& aGlobal,
|
||||
const dom::OriginAttributesDictionary& aAttrs,
|
||||
|
|
|
@ -154,6 +154,12 @@ public:
|
|||
ErrorResult& aRv);
|
||||
|
||||
static void ClearRecentJSDevError(GlobalObject& aGlobal);
|
||||
|
||||
static void Import(const GlobalObject& aGlobal,
|
||||
const nsAString& aResourceURI,
|
||||
const Optional<JS::Handle<JSObject*>>& aTargetObj,
|
||||
JS::MutableHandle<JSObject*> aRetval,
|
||||
ErrorResult& aRv);
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
|
|
|
@ -444,6 +444,7 @@ LOCAL_INCLUDES += [
|
|||
'/dom/xul',
|
||||
'/gfx/2d',
|
||||
'/image',
|
||||
'/js/xpconnect/loader',
|
||||
'/js/xpconnect/src',
|
||||
'/js/xpconnect/wrappers',
|
||||
'/layout/base',
|
||||
|
|
|
@ -1537,6 +1537,7 @@ Console::PopulateConsoleNotificationInTheTargetScope(JSContext* aCx,
|
|||
event.mConsoleID = mConsoleID;
|
||||
event.mLevel = aData->mMethodString;
|
||||
event.mFilename = frame.mFilename;
|
||||
event.mPrefix = mPrefix;
|
||||
|
||||
nsCOMPtr<nsIURI> filenameURI;
|
||||
nsAutoCString pass;
|
||||
|
@ -2602,8 +2603,8 @@ Console::MaybeExecuteDumpFunction(JSContext* aCx,
|
|||
message.Append(aMethodName);
|
||||
message.AppendLiteral(": ");
|
||||
|
||||
if (!mDumpPrefix.IsEmpty()) {
|
||||
message.Append(mDumpPrefix);
|
||||
if (!mPrefix.IsEmpty()) {
|
||||
message.Append(mPrefix);
|
||||
message.AppendLiteral(": ");
|
||||
}
|
||||
|
||||
|
@ -2640,8 +2641,8 @@ Console::MaybeExecuteDumpFunctionForTrace(JSContext* aCx, nsIStackFrame* aStack)
|
|||
nsAutoString message;
|
||||
message.AssignLiteral("console.trace:\n");
|
||||
|
||||
if (!mDumpPrefix.IsEmpty()) {
|
||||
message.Append(mDumpPrefix);
|
||||
if (!mPrefix.IsEmpty()) {
|
||||
message.Append(mPrefix);
|
||||
message.AppendLiteral(": ");
|
||||
}
|
||||
|
||||
|
|
|
@ -444,7 +444,7 @@ private:
|
|||
nsString mPassedInnerID;
|
||||
RefPtr<ConsoleInstanceDumpCallback> mDumpFunction;
|
||||
bool mDumpToStdout;
|
||||
nsString mDumpPrefix;
|
||||
nsString mPrefix;
|
||||
bool mChromeInstance;
|
||||
ConsoleLogLevel mMaxLogLevel;
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ ConsoleInstance::ConsoleInstance(const ConsoleInstanceOptions& aOptions)
|
|||
mConsole->mDumpToStdout = true;
|
||||
}
|
||||
|
||||
mConsole->mDumpPrefix = aOptions.mPrefix;
|
||||
mConsole->mPrefix = aOptions.mPrefix;
|
||||
|
||||
// Let's inform that this is a custom instance.
|
||||
mConsole->mChromeInstance = true;
|
||||
|
|
|
@ -38,6 +38,7 @@ consoleListener.prototype = {
|
|||
is(obj.ID, "jsm", "ID and InnerID are correctly set.");
|
||||
is(obj.arguments[0], "Hello world!", "Message matches");
|
||||
is(obj.consoleID, "", "No consoleID for console API");
|
||||
is(obj.prefix, "", "prefix is empty by default");
|
||||
|
||||
// We want to see 2 messages from this innerID, the first is generated
|
||||
// by console.log, the second one from createInstance().log();
|
||||
|
@ -46,11 +47,13 @@ consoleListener.prototype = {
|
|||
is(obj.ID, "jsm", "ID and InnerID are correctly set.");
|
||||
is(obj.arguments[0], "Hello world!", "Message matches");
|
||||
is(obj.consoleID, "wow", "consoleID is set by consoleInstance");
|
||||
is(obj.prefix, "_PREFIX_", "prefix is set by consoleInstance");
|
||||
++this.count;
|
||||
} else if (obj.innerID == "LEVEL") {
|
||||
// Nothing special... just we don't want to see 'invisible' messages.
|
||||
is(obj.ID, "jsm", "ID and InnerID are correctly set.");
|
||||
is(obj.arguments[0], "Hello world!", "Message matches");
|
||||
is(obj.prefix, "", "prefix is empty by default");
|
||||
++this.count;
|
||||
}
|
||||
|
||||
|
|
|
@ -234,6 +234,33 @@ partial namespace ChromeUtils {
|
|||
[Throws]
|
||||
void idleDispatch(IdleRequestCallback callback,
|
||||
optional IdleRequestOptions options);
|
||||
|
||||
/**
|
||||
* Synchronously loads and evaluates the js file located at
|
||||
* 'aResourceURI' with a new, fully privileged global object.
|
||||
*
|
||||
* If 'aTargetObj' is specified and null, this method just returns
|
||||
* the module's global object. Otherwise (if 'aTargetObj' is not
|
||||
* specified, or 'aTargetObj' is != null) looks for a property
|
||||
* 'EXPORTED_SYMBOLS' on the new global object. 'EXPORTED_SYMBOLS'
|
||||
* is expected to be an array of strings identifying properties on
|
||||
* the global object. These properties will be installed as
|
||||
* properties on 'targetObj', or, if 'aTargetObj' is not specified,
|
||||
* on the caller's global object. If 'EXPORTED_SYMBOLS' is not
|
||||
* found, an error is thrown.
|
||||
*
|
||||
* @param aResourceURI A resource:// URI string to load the module from.
|
||||
* @param aTargetObj the object to install the exported properties on or null.
|
||||
* @returns the module code's global object.
|
||||
*
|
||||
* The implementation maintains a hash of aResourceURI->global obj.
|
||||
* Subsequent invocations of import with 'aResourceURI' pointing to
|
||||
* the same file will not cause the module to be re-evaluated, but
|
||||
* the symbols in EXPORTED_SYMBOLS will be exported into the
|
||||
* specified target object and the global object returned as above.
|
||||
*/
|
||||
[Throws]
|
||||
object import(DOMString aResourceURI, optional object? aTargetObj);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -78,6 +78,7 @@ dictionary ConsoleEvent {
|
|||
DOMString groupName = "";
|
||||
any timer = null;
|
||||
any counter = null;
|
||||
DOMString prefix = "";
|
||||
};
|
||||
|
||||
// Event for profile operations
|
||||
|
|
|
@ -754,6 +754,12 @@ GLContext::InitWithPrefixImpl(const char* prefix, bool trygl)
|
|||
MarkUnsupported(GLFeature::depth_texture);
|
||||
}
|
||||
#endif
|
||||
|
||||
const auto versionStr = (const char*)fGetString(LOCAL_GL_VERSION);
|
||||
if (strstr(versionStr, "Mesa")) {
|
||||
// DrawElementsInstanced hangs the driver.
|
||||
MarkUnsupported(GLFeature::robust_buffer_access_behavior);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsExtensionSupported(GLContext::ARB_pixel_buffer_object)) {
|
||||
|
|
|
@ -13,11 +13,31 @@
|
|||
#include "mozilla/layers/IpcResourceUpdateQueue.h"
|
||||
#include "mozilla/layers/SharedSurfacesChild.h"
|
||||
#include "nsDisplayListInvalidation.h"
|
||||
#include "nsIFrame.h"
|
||||
#include "WebRenderCanvasRenderer.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace layers {
|
||||
|
||||
/* static */ bool
|
||||
WebRenderUserData::SupportsAsyncUpdate(nsIFrame* aFrame)
|
||||
{
|
||||
if (!aFrame ||
|
||||
!aFrame->HasProperty(nsIFrame::WebRenderUserDataProperty())) {
|
||||
return false;
|
||||
}
|
||||
RefPtr<WebRenderUserData> data;
|
||||
nsIFrame::WebRenderUserDataTable* userDataTable =
|
||||
aFrame->GetProperty(nsIFrame::WebRenderUserDataProperty());
|
||||
|
||||
userDataTable->Get(static_cast<uint32_t>(DisplayItemType::TYPE_VIDEO), getter_AddRefs(data));
|
||||
if (data && data->AsImageData()) {
|
||||
return data->AsImageData()->IsAsync();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
WebRenderUserData::WebRenderUserData(WebRenderLayerManager* aWRManager, nsDisplayItem* aItem)
|
||||
: mWRManager(aWRManager)
|
||||
, mFrame(aItem->Frame())
|
||||
|
@ -57,7 +77,7 @@ WebRenderImageData::WebRenderImageData(WebRenderLayerManager* aWRManager, nsDisp
|
|||
|
||||
WebRenderImageData::~WebRenderImageData()
|
||||
{
|
||||
ClearCachedResources();
|
||||
DoClearCachedResources();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -76,6 +96,12 @@ WebRenderImageData::ClearImageKey()
|
|||
|
||||
void
|
||||
WebRenderImageData::ClearCachedResources()
|
||||
{
|
||||
DoClearCachedResources();
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderImageData::DoClearCachedResources()
|
||||
{
|
||||
ClearImageKey();
|
||||
|
||||
|
@ -259,6 +285,14 @@ WebRenderFallbackData::~WebRenderFallbackData()
|
|||
{
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderFallbackData::ClearCachedResources()
|
||||
{
|
||||
WebRenderImageData::ClearCachedResources();
|
||||
mBasicLayerManager = nullptr;
|
||||
mInvalid = true;
|
||||
}
|
||||
|
||||
nsDisplayItemGeometry*
|
||||
WebRenderFallbackData::GetGeometry()
|
||||
{
|
||||
|
@ -296,11 +330,17 @@ WebRenderCanvasData::WebRenderCanvasData(WebRenderLayerManager* aWRManager, nsDi
|
|||
|
||||
WebRenderCanvasData::~WebRenderCanvasData()
|
||||
{
|
||||
ClearCachedResources();
|
||||
DoClearCachedResources();
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderCanvasData::ClearCachedResources()
|
||||
{
|
||||
DoClearCachedResources();
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderCanvasData::DoClearCachedResources()
|
||||
{
|
||||
if (mCanvasRenderer) {
|
||||
mCanvasRenderer->ClearCachedResources();
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "mozilla/layers/AnimationInfo.h"
|
||||
|
||||
class nsDisplayItemGeometry;
|
||||
class nsIFrame;
|
||||
|
||||
namespace mozilla {
|
||||
namespace wr {
|
||||
|
@ -35,6 +36,8 @@ class WebRenderUserData
|
|||
public:
|
||||
typedef nsTHashtable<nsRefPtrHashKey<WebRenderUserData> > WebRenderUserDataRefTable;
|
||||
|
||||
static bool SupportsAsyncUpdate(nsIFrame* aFrame);
|
||||
|
||||
NS_INLINE_DECL_REFCOUNTING(WebRenderUserData)
|
||||
|
||||
WebRenderUserData(WebRenderLayerManager* aWRManager, nsDisplayItem* aItem);
|
||||
|
@ -101,9 +104,16 @@ public:
|
|||
|
||||
void CreateImageClientIfNeeded();
|
||||
void ClearCachedResources() override;
|
||||
|
||||
bool IsAsync()
|
||||
{
|
||||
return mPipelineId.isSome();
|
||||
}
|
||||
|
||||
protected:
|
||||
void ClearImageKey();
|
||||
void CreateExternalImageIfNeeded();
|
||||
void DoClearCachedResources();
|
||||
|
||||
wr::MaybeExternalImageId mExternalImageId;
|
||||
Maybe<wr::ImageKey> mKey;
|
||||
|
@ -122,6 +132,7 @@ public:
|
|||
virtual WebRenderFallbackData* AsFallbackData() override { return this; }
|
||||
virtual UserDataType GetType() override { return UserDataType::eFallback; }
|
||||
static UserDataType Type() { return UserDataType::eFallback; }
|
||||
void ClearCachedResources() override;
|
||||
nsDisplayItemGeometry* GetGeometry() override;
|
||||
void SetGeometry(nsAutoPtr<nsDisplayItemGeometry> aGeometry);
|
||||
nsRect GetBounds() { return mBounds; }
|
||||
|
@ -168,6 +179,8 @@ public:
|
|||
WebRenderCanvasRendererAsync* CreateCanvasRenderer();
|
||||
void ClearCachedResources() override;
|
||||
protected:
|
||||
void DoClearCachedResources();
|
||||
|
||||
UniquePtr<WebRenderCanvasRendererAsync> mCanvasRenderer;
|
||||
};
|
||||
|
||||
|
|
|
@ -2015,7 +2015,7 @@ gfxFont::DrawMissingGlyph(const TextRunDrawParams& aRunParams,
|
|||
// of the drawTarget's transform, we need to undo
|
||||
// this before drawing the hexbox. (Bug 983985)
|
||||
gfxContextMatrixAutoSaveRestore matrixRestore;
|
||||
if (aFontParams.needsOblique && !textDrawer) {
|
||||
if (aFontParams.needsOblique && !aFontParams.isVerticalFont && !textDrawer) {
|
||||
matrixRestore.SetContext(aRunParams.context);
|
||||
gfx::Matrix mat =
|
||||
aRunParams.context->CurrentMatrix().
|
||||
|
|
|
@ -968,6 +968,8 @@ xpc::GlobalProperties::Parse(JSContext* cx, JS::HandleObject obj)
|
|||
messageChannel = true;
|
||||
} else if (!strcmp(name.ptr(), "InspectorUtils")) {
|
||||
inspectorUtils = true;
|
||||
} else if (!strcmp(name.ptr(), "ChromeUtils")) {
|
||||
ChromeUtils = true;
|
||||
} else {
|
||||
JS_ReportErrorUTF8(cx, "Unknown property name: %s", name.ptr());
|
||||
return false;
|
||||
|
@ -1057,6 +1059,9 @@ xpc::GlobalProperties::Define(JSContext* cx, JS::HandleObject obj)
|
|||
!dom::InspectorUtilsBinding::GetConstructorObject(cx))
|
||||
return false;
|
||||
|
||||
if (ChromeUtils && !dom::ChromeUtilsBinding::GetConstructorObject(cx))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -2698,6 +2698,7 @@ struct GlobalProperties {
|
|||
bool caches : 1;
|
||||
bool fileReader: 1;
|
||||
bool messageChannel: 1;
|
||||
bool ChromeUtils : 1;
|
||||
bool inspectorUtils : 1;
|
||||
private:
|
||||
bool Define(JSContext* cx, JS::HandleObject obj);
|
||||
|
|
|
@ -7223,6 +7223,13 @@ nsIFrame::InvalidateLayer(DisplayItemType aDisplayItemKey,
|
|||
nsIFrame* displayRoot = nsLayoutUtils::GetDisplayRootFrame(this);
|
||||
InvalidateRenderingObservers(displayRoot, this);
|
||||
|
||||
// Check if frame supports WebRender's async update
|
||||
if ((aFlags & UPDATE_IS_ASYNC) &&
|
||||
WebRenderUserData::SupportsAsyncUpdate(this)) {
|
||||
// WebRender does not use layer, then return nullptr.
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// If the layer is being updated asynchronously, and it's being forwarded
|
||||
// to a compositor, then we don't need to invalidate.
|
||||
if ((aFlags & UPDATE_IS_ASYNC) && layer && layer->SupportsAsyncUpdate()) {
|
||||
|
|
|
@ -986,6 +986,13 @@ nsInlineFrame::UpdateStyleOfOwnedAnonBoxesForIBSplit(
|
|||
}
|
||||
|
||||
nsIFrame* nextInline = blockFrame->GetProperty(nsIFrame::IBSplitSibling());
|
||||
|
||||
// This check is here due to bug 1431232. Please remove it once
|
||||
// that bug is fixed.
|
||||
if (MOZ_UNLIKELY(!nextInline)) {
|
||||
break;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(nextInline, "There is always a trailing inline in an IB split");
|
||||
|
||||
for (nsIFrame* cont = nextInline; cont; cont = cont->GetNextContinuation()) {
|
||||
|
|
|
@ -1228,6 +1228,7 @@ class PackageFrontend(MachCommandBase):
|
|||
import shutil
|
||||
|
||||
from taskgraph.generator import load_graph_config, Kind
|
||||
from taskgraph.parameters import Parameters
|
||||
from taskgraph.util.taskcluster import (
|
||||
get_artifact_url,
|
||||
list_artifacts,
|
||||
|
@ -1351,7 +1352,7 @@ class PackageFrontend(MachCommandBase):
|
|||
def tasks(kind_name):
|
||||
root_path = mozpath.join(self.topsrcdir, 'taskcluster', 'ci')
|
||||
graph_config = load_graph_config(root_path)
|
||||
tasks = Kind.load(root_path, graph_config, kind_name).load_tasks(params, {})
|
||||
tasks = Kind.load(root_path, graph_config, kind_name).load_tasks(Parameters(**params), {})
|
||||
return {
|
||||
task.task['metadata']['name']: task
|
||||
for task in tasks
|
||||
|
|
|
@ -423,25 +423,28 @@ class Talos(TestingMixin, MercurialScript, BlobUploadMixin, TooltoolMixin,
|
|||
else:
|
||||
self.info("Not downloading pageset because the no-download option was specified")
|
||||
|
||||
# if running speedometer locally, need to copy speedometer source into talos/tests
|
||||
if self.config.get('run_local') and 'speedometer' in self.suite:
|
||||
self.get_speedometer_source()
|
||||
# if running webkit tests locally, need to copy webkit source into talos/tests
|
||||
if self.config.get('run_local') and ('speedometer' in self.suite or
|
||||
'stylebench' in self.suite or
|
||||
'motionmark' in self.suite):
|
||||
self.get_webkit_source()
|
||||
|
||||
def get_speedometer_source(self):
|
||||
# in production the build system auto copies speedometer source into place;
|
||||
def get_webkit_source(self):
|
||||
# in production the build system auto copies webkit source into place;
|
||||
# but when run locally we need to do this manually, so that talos can find it
|
||||
src = os.path.join(self.repo_path, 'third_party', 'webkit',
|
||||
'PerformanceTests', 'Speedometer')
|
||||
'PerformanceTests')
|
||||
dest = os.path.join(self.talos_path, 'talos', 'tests', 'webkit',
|
||||
'PerformanceTests', 'Speedometer')
|
||||
if not os.path.exists(dest):
|
||||
self.info("Copying speedometer source from %s to %s" % (src, dest))
|
||||
try:
|
||||
shutil.copytree(src, dest)
|
||||
except:
|
||||
self.critical("Error copying speedometer source from %s to %s" % (src, dest))
|
||||
else:
|
||||
self.info("Speedometer source already found at %s" % dest)
|
||||
'PerformanceTests')
|
||||
|
||||
if os.path.exists(dest):
|
||||
shutil.rmtree(dest)
|
||||
|
||||
self.info("Copying webkit benchmarks from %s to %s" % (src, dest))
|
||||
try:
|
||||
shutil.copytree(src, dest)
|
||||
except:
|
||||
self.critical("Error copying webkit benchmarks from %s to %s" % (src, dest))
|
||||
|
||||
def setup_mitmproxy(self):
|
||||
"""Some talos tests require the use of mitmproxy to playback the pages,
|
||||
|
|
|
@ -84,7 +84,7 @@
|
|||
"talos_options": ["--disable-stylo"]
|
||||
},
|
||||
"speedometer-e10s": {
|
||||
"tests": ["speedometer"]
|
||||
"tests": ["speedometer", "stylebench"]
|
||||
},
|
||||
"speedometer-stylo-disabled-e10s": {
|
||||
"talos_options": ["--disable-stylo"],
|
||||
|
|
|
@ -843,6 +843,21 @@ class speedometer(PageloaderTest):
|
|||
unit = 'score'
|
||||
|
||||
|
||||
@register_test()
|
||||
class stylebench(PageloaderTest):
|
||||
"""
|
||||
StyleBench benchmark used by many browser vendors (from webkit)
|
||||
"""
|
||||
tpmanifest = '${talos}/tests/stylebench/stylebench.manifest'
|
||||
tpcycles = 1
|
||||
tppagecycles = 5
|
||||
tpmozafterpaint = False
|
||||
tpchrome = False
|
||||
format_pagename = False
|
||||
lower_is_better = False
|
||||
unit = 'score'
|
||||
|
||||
|
||||
@register_test()
|
||||
class perf_reftest(PageloaderTest):
|
||||
"""
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
% http://localhost/tests/webkit/PerformanceTests/StyleBench/index.html?gecko
|
|
@ -1,4 +1,4 @@
|
|||
<!DOCTYPE html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
|
@ -14,6 +14,9 @@
|
|||
addEventListener('load', () => {
|
||||
if (!window.location.protocol.startsWith('http'))
|
||||
showSection('local-message', false);
|
||||
|
||||
if (location.search("?gecko"))
|
||||
startTest();
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
|
|
@ -1259,24 +1259,22 @@
|
|||
},
|
||||
"GPU_PROCESS_LAUNCH_TIME_MS_2" : {
|
||||
"record_in_processes": ["main", "content"],
|
||||
"alert_emails": ["danderson@mozilla.com"],
|
||||
"expires_in_version": "never",
|
||||
"alert_emails": ["gfx-telemetry-alerts@mozilla.com","msreckovic@mozilla.com"],
|
||||
"expires_in_version": "66",
|
||||
"bug_numbers": [1297790, 1317796],
|
||||
"kind": "exponential",
|
||||
"high": 64000,
|
||||
"n_buckets": 100,
|
||||
"releaseChannelCollection": "opt-out",
|
||||
"description": "GPU process launch time in milliseconds"
|
||||
},
|
||||
"GPU_PROCESS_INITIALIZATION_TIME_MS" : {
|
||||
"record_in_processes": ["main", "content", "gpu"],
|
||||
"alert_emails": ["danderson@mozilla.com"],
|
||||
"expires_in_version": "never",
|
||||
"alert_emails": ["gfx-telemetry-alerts@mozilla.com","msreckovic@mozilla.com"],
|
||||
"expires_in_version": "66",
|
||||
"bug_numbers": [1324095],
|
||||
"kind": "exponential",
|
||||
"high": 64000,
|
||||
"n_buckets": 100,
|
||||
"releaseChannelCollection": "opt-out",
|
||||
"description": "GPU process initialization (excluding XPCOM and fork time) time in milliseconds"
|
||||
},
|
||||
"GPU_PROCESS_CRASH_FALLBACKS": {
|
||||
|
@ -12260,7 +12258,7 @@
|
|||
"D3D11_SYNC_HANDLE_FAILURE": {
|
||||
"record_in_processes": ["main", "content", "gpu"],
|
||||
"alert_emails": ["gfx-telemetry-alerts@mozilla.com","bschouten@mozilla.com","danderson@mozilla.com","msreckovic@mozilla.com","ashughes@mozilla.com"],
|
||||
"expires_in_version": "60",
|
||||
"expires_in_version": "66",
|
||||
"releaseChannelCollection": "opt-out",
|
||||
"kind": "count",
|
||||
"description": "Number of times the D3D11 compositor failed to get a texture sync handle."
|
||||
|
@ -12445,7 +12443,7 @@
|
|||
},
|
||||
"PLUGIN_DRAWING_MODEL": {
|
||||
"record_in_processes": ["main", "content"],
|
||||
"alert_emails": ["danderson@mozilla.com"],
|
||||
"alert_emails": ["gfx-telemetry-alerts@mozilla.com","msreckovic@mozilla.com"],
|
||||
"expires_in_version": "never",
|
||||
"kind": "enumerated",
|
||||
"bug_numbers": [1229961],
|
||||
|
@ -12624,7 +12622,7 @@
|
|||
},
|
||||
"MEDIA_DECODER_BACKEND_USED": {
|
||||
"record_in_processes": ["main", "content", "gpu"],
|
||||
"alert_emails": ["danderson@mozilla.com"],
|
||||
"alert_emails": ["gfx-telemetry-alerts@mozilla.com","msreckovic@mozilla.com"],
|
||||
"bug_numbers": [1259695],
|
||||
"expires_in_version": "never",
|
||||
"kind": "enumerated",
|
||||
|
@ -13018,9 +13016,9 @@
|
|||
},
|
||||
"CONTENT_PAINT_TIME": {
|
||||
"record_in_processes": ["main", "content"],
|
||||
"alert_emails": ["danderson@mozilla.com","gfx-telemetry-alerts@mozilla.com"],
|
||||
"alert_emails": ["mwoodrow@mozilla.com","gfx-telemetry-alerts@mozilla.com"],
|
||||
"bug_numbers": [1309442],
|
||||
"expires_in_version": "60",
|
||||
"expires_in_version": "66",
|
||||
"kind": "exponential",
|
||||
"high": 1000,
|
||||
"n_buckets": 50,
|
||||
|
@ -13028,9 +13026,9 @@
|
|||
},
|
||||
"CONTENT_LARGE_PAINT_PHASE_WEIGHT": {
|
||||
"record_in_processes": ["main", "content"],
|
||||
"alert_emails": ["danderson@mozilla.com","gfx-telemetry-alerts@mozilla.com"],
|
||||
"alert_emails": ["mwoodrow@mozilla.com","gfx-telemetry-alerts@mozilla.com"],
|
||||
"bug_numbers": [1309442],
|
||||
"expires_in_version": "60",
|
||||
"expires_in_version": "66",
|
||||
"keyed": true,
|
||||
"kind": "linear",
|
||||
"high": 100,
|
||||
|
@ -13841,8 +13839,8 @@
|
|||
},
|
||||
"GFX_OMTP_PAINT_WAIT_TIME": {
|
||||
"record_in_processes": ["content"],
|
||||
"alert_emails": ["gfx-telemetry-alerts@mozilla.com","danderson@mozilla.com"],
|
||||
"expires_in_version": "61",
|
||||
"alert_emails": ["gfx-telemetry-alerts@mozilla.com","rhunt@mozilla.com"],
|
||||
"expires_in_version": "66",
|
||||
"kind": "exponential",
|
||||
"high": 200,
|
||||
"n_buckets": 50,
|
||||
|
|
|
@ -1091,10 +1091,10 @@ gfx.omtp:
|
|||
for a paint for more than 200us, versus the total number of paints.
|
||||
keyed: false
|
||||
kind: uint
|
||||
expires: "61"
|
||||
expires: "66"
|
||||
notification_emails:
|
||||
- gfx-telemetry-alerts@mozilla.com
|
||||
- danderson@mozilla.com
|
||||
- rhunt@mozilla.com
|
||||
record_in_processes:
|
||||
- 'content'
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче