зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla-inbound to mozilla-central. a=merge
This commit is contained in:
Коммит
a612973f64
|
@ -4,9 +4,10 @@
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const { PureComponent } = require("devtools/client/shared/vendor/react");
|
const { createRef, PureComponent } = require("devtools/client/shared/vendor/react");
|
||||||
const dom = require("devtools/client/shared/vendor/react-dom-factories");
|
const dom = require("devtools/client/shared/vendor/react-dom-factories");
|
||||||
const PropTypes = require("devtools/client/shared/vendor/react-prop-types");
|
const PropTypes = require("devtools/client/shared/vendor/react-prop-types");
|
||||||
|
const { editableItem } = require("devtools/client/shared/inplace-editor");
|
||||||
|
|
||||||
const { getStr } = require("../utils/l10n");
|
const { getStr } = require("../utils/l10n");
|
||||||
const Types = require("../types");
|
const Types = require("../types");
|
||||||
|
@ -15,7 +16,9 @@ class Declaration extends PureComponent {
|
||||||
static get propTypes() {
|
static get propTypes() {
|
||||||
return {
|
return {
|
||||||
declaration: PropTypes.shape(Types.declaration).isRequired,
|
declaration: PropTypes.shape(Types.declaration).isRequired,
|
||||||
|
isUserAgentStyle: PropTypes.bool.isRequired,
|
||||||
onToggleDeclaration: PropTypes.func.isRequired,
|
onToggleDeclaration: PropTypes.func.isRequired,
|
||||||
|
showDeclarationNameEditor: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,10 +30,28 @@ class Declaration extends PureComponent {
|
||||||
isComputedListExpanded: false,
|
isComputedListExpanded: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.nameSpanRef = createRef();
|
||||||
|
|
||||||
this.onComputedExpanderClick = this.onComputedExpanderClick.bind(this);
|
this.onComputedExpanderClick = this.onComputedExpanderClick.bind(this);
|
||||||
this.onToggleDeclarationClick = this.onToggleDeclarationClick.bind(this);
|
this.onToggleDeclarationClick = this.onToggleDeclarationClick.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
if (this.props.isUserAgentStyle) {
|
||||||
|
// Declaration is not editable.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { declaration } = this.props;
|
||||||
|
|
||||||
|
editableItem({
|
||||||
|
element: this.nameSpanRef.current,
|
||||||
|
}, element => {
|
||||||
|
this.props.showDeclarationNameEditor(element, declaration.ruleId,
|
||||||
|
declaration.id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
onComputedExpanderClick(event) {
|
onComputedExpanderClick(event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
||||||
|
@ -144,7 +165,14 @@ class Declaration extends PureComponent {
|
||||||
tabIndex: -1,
|
tabIndex: -1,
|
||||||
}),
|
}),
|
||||||
dom.span({ className: "ruleview-namecontainer" },
|
dom.span({ className: "ruleview-namecontainer" },
|
||||||
dom.span({ className: "ruleview-propertyname theme-fg-color3" }, name),
|
dom.span(
|
||||||
|
{
|
||||||
|
className: "ruleview-propertyname theme-fg-color3",
|
||||||
|
ref: this.nameSpanRef,
|
||||||
|
tabIndex: 0,
|
||||||
|
},
|
||||||
|
name
|
||||||
|
),
|
||||||
": "
|
": "
|
||||||
),
|
),
|
||||||
dom.span({
|
dom.span({
|
||||||
|
|
|
@ -16,14 +16,18 @@ class Declarations extends PureComponent {
|
||||||
static get propTypes() {
|
static get propTypes() {
|
||||||
return {
|
return {
|
||||||
declarations: PropTypes.arrayOf(PropTypes.shape(Types.declaration)).isRequired,
|
declarations: PropTypes.arrayOf(PropTypes.shape(Types.declaration)).isRequired,
|
||||||
|
isUserAgentStyle: PropTypes.bool.isRequired,
|
||||||
onToggleDeclaration: PropTypes.func.isRequired,
|
onToggleDeclaration: PropTypes.func.isRequired,
|
||||||
|
showDeclarationNameEditor: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const {
|
const {
|
||||||
declarations,
|
declarations,
|
||||||
|
isUserAgentStyle,
|
||||||
onToggleDeclaration,
|
onToggleDeclaration,
|
||||||
|
showDeclarationNameEditor,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
if (!declarations.length) {
|
if (!declarations.length) {
|
||||||
|
@ -36,7 +40,9 @@ class Declarations extends PureComponent {
|
||||||
return Declaration({
|
return Declaration({
|
||||||
key: declaration.id,
|
key: declaration.id,
|
||||||
declaration,
|
declaration,
|
||||||
|
isUserAgentStyle,
|
||||||
onToggleDeclaration,
|
onToggleDeclaration,
|
||||||
|
showDeclarationNameEditor,
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
|
@ -21,6 +21,7 @@ class Rule extends PureComponent {
|
||||||
onToggleDeclaration: PropTypes.func.isRequired,
|
onToggleDeclaration: PropTypes.func.isRequired,
|
||||||
onToggleSelectorHighlighter: PropTypes.func.isRequired,
|
onToggleSelectorHighlighter: PropTypes.func.isRequired,
|
||||||
rule: PropTypes.shape(Types.rule).isRequired,
|
rule: PropTypes.shape(Types.rule).isRequired,
|
||||||
|
showDeclarationNameEditor: PropTypes.func.isRequired,
|
||||||
showSelectorEditor: PropTypes.func.isRequired,
|
showSelectorEditor: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -30,6 +31,7 @@ class Rule extends PureComponent {
|
||||||
onToggleDeclaration,
|
onToggleDeclaration,
|
||||||
onToggleSelectorHighlighter,
|
onToggleSelectorHighlighter,
|
||||||
rule,
|
rule,
|
||||||
|
showDeclarationNameEditor,
|
||||||
showSelectorEditor,
|
showSelectorEditor,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const {
|
const {
|
||||||
|
@ -70,7 +72,9 @@ class Rule extends PureComponent {
|
||||||
),
|
),
|
||||||
Declarations({
|
Declarations({
|
||||||
declarations,
|
declarations,
|
||||||
|
isUserAgentStyle,
|
||||||
onToggleDeclaration,
|
onToggleDeclaration,
|
||||||
|
showDeclarationNameEditor,
|
||||||
}),
|
}),
|
||||||
dom.div({ className: "ruleview-ruleclose" }, "}")
|
dom.div({ className: "ruleview-ruleclose" }, "}")
|
||||||
)
|
)
|
||||||
|
|
|
@ -17,6 +17,7 @@ class Rules extends PureComponent {
|
||||||
onToggleDeclaration: PropTypes.func.isRequired,
|
onToggleDeclaration: PropTypes.func.isRequired,
|
||||||
onToggleSelectorHighlighter: PropTypes.func.isRequired,
|
onToggleSelectorHighlighter: PropTypes.func.isRequired,
|
||||||
rules: PropTypes.arrayOf(PropTypes.shape(Types.rule)).isRequired,
|
rules: PropTypes.arrayOf(PropTypes.shape(Types.rule)).isRequired,
|
||||||
|
showDeclarationNameEditor: PropTypes.func.isRequired,
|
||||||
showSelectorEditor: PropTypes.func.isRequired,
|
showSelectorEditor: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -26,6 +27,7 @@ class Rules extends PureComponent {
|
||||||
onToggleDeclaration,
|
onToggleDeclaration,
|
||||||
onToggleSelectorHighlighter,
|
onToggleSelectorHighlighter,
|
||||||
rules,
|
rules,
|
||||||
|
showDeclarationNameEditor,
|
||||||
showSelectorEditor,
|
showSelectorEditor,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
|
@ -35,6 +37,7 @@ class Rules extends PureComponent {
|
||||||
onToggleDeclaration,
|
onToggleDeclaration,
|
||||||
onToggleSelectorHighlighter,
|
onToggleSelectorHighlighter,
|
||||||
rule,
|
rule,
|
||||||
|
showDeclarationNameEditor,
|
||||||
showSelectorEditor,
|
showSelectorEditor,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -35,6 +35,7 @@ class RulesApp extends PureComponent {
|
||||||
onTogglePseudoClass: PropTypes.func.isRequired,
|
onTogglePseudoClass: PropTypes.func.isRequired,
|
||||||
onToggleSelectorHighlighter: PropTypes.func.isRequired,
|
onToggleSelectorHighlighter: PropTypes.func.isRequired,
|
||||||
rules: PropTypes.arrayOf(PropTypes.shape(Types.rule)).isRequired,
|
rules: PropTypes.arrayOf(PropTypes.shape(Types.rule)).isRequired,
|
||||||
|
showDeclarationNameEditor: PropTypes.func.isRequired,
|
||||||
showSelectorEditor: PropTypes.func.isRequired,
|
showSelectorEditor: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -43,6 +44,7 @@ class RulesApp extends PureComponent {
|
||||||
return {
|
return {
|
||||||
onToggleDeclaration: this.props.onToggleDeclaration,
|
onToggleDeclaration: this.props.onToggleDeclaration,
|
||||||
onToggleSelectorHighlighter: this.props.onToggleSelectorHighlighter,
|
onToggleSelectorHighlighter: this.props.onToggleSelectorHighlighter,
|
||||||
|
showDeclarationNameEditor: this.props.showDeclarationNameEditor,
|
||||||
showSelectorEditor: this.props.showSelectorEditor,
|
showSelectorEditor: this.props.showSelectorEditor,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ const UserProperties = require("devtools/client/inspector/rules/models/user-prop
|
||||||
const { ELEMENT_STYLE } = require("devtools/shared/specs/styles");
|
const { ELEMENT_STYLE } = require("devtools/shared/specs/styles");
|
||||||
|
|
||||||
loader.lazyRequireGetter(this, "promiseWarn", "devtools/client/inspector/shared/utils", true);
|
loader.lazyRequireGetter(this, "promiseWarn", "devtools/client/inspector/shared/utils", true);
|
||||||
|
loader.lazyRequireGetter(this, "parseDeclarations", "devtools/shared/css/parsing-utils", true);
|
||||||
loader.lazyRequireGetter(this, "isCssVariable", "devtools/shared/fronts/css-properties", true);
|
loader.lazyRequireGetter(this, "isCssVariable", "devtools/shared/fronts/css-properties", true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -332,6 +333,42 @@ ElementStyle.prototype = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given the id of the rule and the new declaration name, modifies the existing
|
||||||
|
* declaration name to the new given value.
|
||||||
|
*
|
||||||
|
* @param {String} ruleID
|
||||||
|
* The Rule id of the given CSS declaration.
|
||||||
|
* @param {String} declarationId
|
||||||
|
* The TextProperty id for the CSS declaration.
|
||||||
|
* @param {String} name
|
||||||
|
* The new declaration name.
|
||||||
|
*/
|
||||||
|
modifyDeclarationName: async function(ruleID, declarationId, name) {
|
||||||
|
const rule = this.getRule(ruleID);
|
||||||
|
if (!rule) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const declaration = rule.getDeclaration(declarationId);
|
||||||
|
if (!declaration || declaration.name === name) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adding multiple rules inside of name field overwrites the current
|
||||||
|
// property with the first, then adds any more onto the property list.
|
||||||
|
const declarations = parseDeclarations(this.cssProperties.isKnown, name);
|
||||||
|
if (!declarations.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await declaration.setName(declarations[0].name);
|
||||||
|
|
||||||
|
if (!declaration.enabled) {
|
||||||
|
await declaration.setEnabled(true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Modifies the existing rule's selector to the new given value.
|
* Modifies the existing rule's selector to the new given value.
|
||||||
*
|
*
|
||||||
|
|
|
@ -387,16 +387,17 @@ Rule.prototype = {
|
||||||
* The property to rename.
|
* The property to rename.
|
||||||
* @param {String} name
|
* @param {String} name
|
||||||
* The new property name (such as "background" or "border-top").
|
* The new property name (such as "background" or "border-top").
|
||||||
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
setPropertyName: function(property, name) {
|
setPropertyName: function(property, name) {
|
||||||
if (name === property.name) {
|
if (name === property.name) {
|
||||||
return;
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
const oldName = property.name;
|
const oldName = property.name;
|
||||||
property.name = name;
|
property.name = name;
|
||||||
const index = this.textProps.indexOf(property);
|
const index = this.textProps.indexOf(property);
|
||||||
this.applyProperties((modifications) => {
|
return this.applyProperties(modifications => {
|
||||||
modifications.renameProperty(index, oldName, name);
|
modifications.renameProperty(index, oldName, name);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -421,7 +422,7 @@ Rule.prototype = {
|
||||||
property.priority = priority;
|
property.priority = priority;
|
||||||
|
|
||||||
const index = this.textProps.indexOf(property);
|
const index = this.textProps.indexOf(property);
|
||||||
return this.applyProperties((modifications) => {
|
return this.applyProperties(modifications => {
|
||||||
modifications.setProperty(index, property.name, value, priority);
|
modifications.setProperty(index, property.name, value, priority);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -162,15 +162,14 @@ TextProperty.prototype = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
setName: function(name) {
|
setName: async function(name) {
|
||||||
const store = this.rule.elementStyle.store;
|
if (name !== this.name && this.editor) {
|
||||||
|
const store = this.rule.elementStyle.store;
|
||||||
if (name !== this.name) {
|
|
||||||
store.userProperties.setProperty(this.rule.domRule, name,
|
store.userProperties.setProperty(this.rule.domRule, name,
|
||||||
this.editor.committed.value);
|
this.editor.committed.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.rule.setPropertyName(this, name);
|
await this.rule.setPropertyName(this, name);
|
||||||
this.updateEditor();
|
this.updateEditor();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ const INSPECTOR_L10N =
|
||||||
new LocalizationHelper("devtools/client/locales/inspector.properties");
|
new LocalizationHelper("devtools/client/locales/inspector.properties");
|
||||||
|
|
||||||
loader.lazyRequireGetter(this, "ClassList", "devtools/client/inspector/rules/models/class-list");
|
loader.lazyRequireGetter(this, "ClassList", "devtools/client/inspector/rules/models/class-list");
|
||||||
|
loader.lazyRequireGetter(this, "AutocompletePopup", "devtools/client/shared/autocomplete-popup");
|
||||||
loader.lazyRequireGetter(this, "InplaceEditor", "devtools/client/shared/inplace-editor", true);
|
loader.lazyRequireGetter(this, "InplaceEditor", "devtools/client/shared/inplace-editor", true);
|
||||||
|
|
||||||
const PREF_UA_STYLES = "devtools.inspector.showUserAgentStyles";
|
const PREF_UA_STYLES = "devtools.inspector.showUserAgentStyles";
|
||||||
|
@ -55,6 +56,7 @@ class RulesView {
|
||||||
this.onToggleDeclaration = this.onToggleDeclaration.bind(this);
|
this.onToggleDeclaration = this.onToggleDeclaration.bind(this);
|
||||||
this.onTogglePseudoClass = this.onTogglePseudoClass.bind(this);
|
this.onTogglePseudoClass = this.onTogglePseudoClass.bind(this);
|
||||||
this.onToggleSelectorHighlighter = this.onToggleSelectorHighlighter.bind(this);
|
this.onToggleSelectorHighlighter = this.onToggleSelectorHighlighter.bind(this);
|
||||||
|
this.showDeclarationNameEditor = this.showDeclarationNameEditor.bind(this);
|
||||||
this.showSelectorEditor = this.showSelectorEditor.bind(this);
|
this.showSelectorEditor = this.showSelectorEditor.bind(this);
|
||||||
this.updateClassList = this.updateClassList.bind(this);
|
this.updateClassList = this.updateClassList.bind(this);
|
||||||
this.updateRules = this.updateRules.bind(this);
|
this.updateRules = this.updateRules.bind(this);
|
||||||
|
@ -80,6 +82,7 @@ class RulesView {
|
||||||
onToggleDeclaration: this.onToggleDeclaration,
|
onToggleDeclaration: this.onToggleDeclaration,
|
||||||
onTogglePseudoClass: this.onTogglePseudoClass,
|
onTogglePseudoClass: this.onTogglePseudoClass,
|
||||||
onToggleSelectorHighlighter: this.onToggleSelectorHighlighter,
|
onToggleSelectorHighlighter: this.onToggleSelectorHighlighter,
|
||||||
|
showDeclarationNameEditor: this.showDeclarationNameEditor,
|
||||||
showSelectorEditor: this.showSelectorEditor,
|
showSelectorEditor: this.showSelectorEditor,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -99,6 +102,11 @@ class RulesView {
|
||||||
this.selection.off("detached-front", this.onSelection);
|
this.selection.off("detached-front", this.onSelection);
|
||||||
this.selection.off("new-node-front", this.onSelection);
|
this.selection.off("new-node-front", this.onSelection);
|
||||||
|
|
||||||
|
if (this._autocompletePopup) {
|
||||||
|
this._autocompletePopup.destroy();
|
||||||
|
this._autocompletePopup = null;
|
||||||
|
}
|
||||||
|
|
||||||
if (this._classList) {
|
if (this._classList) {
|
||||||
this._classList.off("current-node-class-changed", this.refreshClassList);
|
this._classList.off("current-node-class-changed", this.refreshClassList);
|
||||||
this._classList.destroy();
|
this._classList.destroy();
|
||||||
|
@ -127,6 +135,22 @@ class RulesView {
|
||||||
this.toolbox = null;
|
this.toolbox = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an instance of the AutocompletePopup.
|
||||||
|
*
|
||||||
|
* @return {AutocompletePopup}
|
||||||
|
*/
|
||||||
|
get autocompletePopup() {
|
||||||
|
if (!this._autocompletePopup) {
|
||||||
|
this._autocompletePopup = new AutocompletePopup(this.doc, {
|
||||||
|
autoSelect: true,
|
||||||
|
theme: "auto",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._autocompletePopup;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an instance of the ClassList model used to manage the list of CSS classes
|
* Get an instance of the ClassList model used to manage the list of CSS classes
|
||||||
* applied to the element.
|
* applied to the element.
|
||||||
|
@ -327,6 +351,37 @@ class RulesView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for showing the inplace editor when an editable property name is clicked in
|
||||||
|
* the rules view.
|
||||||
|
*
|
||||||
|
* @param {DOMNode} element
|
||||||
|
* The declaration name span element to be edited.
|
||||||
|
* @param {String} ruleId
|
||||||
|
* The id of the Rule object to be edited.
|
||||||
|
* @param {String} declarationId
|
||||||
|
* The id of the TextProperty object to be edited.
|
||||||
|
*/
|
||||||
|
showDeclarationNameEditor(element, ruleId, declarationId) {
|
||||||
|
new InplaceEditor({
|
||||||
|
advanceChars: ":",
|
||||||
|
contentType: InplaceEditor.CONTENT_TYPES.CSS_PROPERTY,
|
||||||
|
cssProperties: this.cssProperties,
|
||||||
|
done: (name, commit) => {
|
||||||
|
if (!commit) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.elementStyle.modifyDeclarationName(ruleId, declarationId, name);
|
||||||
|
this.telemetry.recordEvent("edit_rule", "ruleview", null, {
|
||||||
|
"session_id": this.toolbox.sessionId,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
element,
|
||||||
|
popup: this.autocompletePopup,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows the inplace editor for the a selector.
|
* Shows the inplace editor for the a selector.
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
#define ANGLE_COMMIT_HASH "790e8e6b4179"
|
#define ANGLE_COMMIT_HASH "eff6bfdb1db9"
|
||||||
#define ANGLE_COMMIT_HASH_SIZE 12
|
#define ANGLE_COMMIT_HASH_SIZE 12
|
||||||
#define ANGLE_COMMIT_DATE "2018-10-09 17:41:46 -0700"
|
#define ANGLE_COMMIT_DATE "2019-01-22 11:11:06 -0800"
|
||||||
|
|
|
@ -124,8 +124,8 @@ void PixelTransfer11::setBufferToTextureCopyParams(const gl::Box &destArea, cons
|
||||||
{
|
{
|
||||||
StructZero(parametersOut);
|
StructZero(parametersOut);
|
||||||
|
|
||||||
float texelCenterX = 0.5f / static_cast<float>(destSize.width - 1);
|
float texelCenterX = 0.5f / static_cast<float>(destSize.width);
|
||||||
float texelCenterY = 0.5f / static_cast<float>(destSize.height - 1);
|
float texelCenterY = 0.5f / static_cast<float>(destSize.height);
|
||||||
|
|
||||||
unsigned int bytesPerPixel = gl::GetSizedInternalFormatInfo(internalFormat).pixelBytes;
|
unsigned int bytesPerPixel = gl::GetSizedInternalFormatInfo(internalFormat).pixelBytes;
|
||||||
unsigned int alignmentBytes = static_cast<unsigned int>(unpack.alignment);
|
unsigned int alignmentBytes = static_cast<unsigned int>(unpack.alignment);
|
||||||
|
|
|
@ -1,3 +1,15 @@
|
||||||
|
commit eff6bfdb1db99505122a37f2911bdd3b845e19b8
|
||||||
|
Author: Jeff Gilbert <jgilbert@mozilla.com>
|
||||||
|
Date: Thu Jan 3 23:38:44 2019 -0800
|
||||||
|
|
||||||
|
In PixelTransfer11, center offset should be 1/size, not 1/(size-1).
|
||||||
|
|
||||||
|
Bug: angleproject:3039
|
||||||
|
Change-Id: Ie97bfb5aa3cfe7cd2c4b1d22b5b4a8d82a5e5170
|
||||||
|
Reviewed-on: https://chromium-review.googlesource.com/c/1407251
|
||||||
|
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
||||||
|
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
||||||
|
|
||||||
commit 790e8e6b417905eca335d06c16ec54c977188110
|
commit 790e8e6b417905eca335d06c16ec54c977188110
|
||||||
Author: Olli Etuaho <oetuaho@nvidia.com>
|
Author: Olli Etuaho <oetuaho@nvidia.com>
|
||||||
Date: Thu Sep 20 13:20:50 2018 +0300
|
Date: Thu Sep 20 13:20:50 2018 +0300
|
||||||
|
|
|
@ -31,6 +31,7 @@ DEFINES['_CRT_RAND_S'] = True
|
||||||
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
||||||
#DEFINES['_DEBUG'] = True
|
#DEFINES['_DEBUG'] = True
|
||||||
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
||||||
|
#DEFINES['_HAS_ITERATOR_DEBUGGING'] = '0'
|
||||||
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
||||||
DEFINES['_SECURE_ATL'] = True
|
DEFINES['_SECURE_ATL'] = True
|
||||||
DEFINES['_UNICODE'] = True
|
DEFINES['_UNICODE'] = True
|
||||||
|
@ -67,13 +68,21 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4117',
|
# '/wd4117',
|
||||||
# '/wd4121',
|
# '/wd4121',
|
||||||
# '/wd4127',
|
# '/wd4127',
|
||||||
|
# '/wd4200',
|
||||||
|
# '/wd4201',
|
||||||
|
# '/wd4204',
|
||||||
|
# '/wd4221',
|
||||||
# '/wd4244',
|
# '/wd4244',
|
||||||
|
# '/wd4245',
|
||||||
# '/wd4251',
|
# '/wd4251',
|
||||||
|
# '/wd4267',
|
||||||
# '/wd4275',
|
# '/wd4275',
|
||||||
|
# '/wd4305',
|
||||||
# '/wd4312',
|
# '/wd4312',
|
||||||
# '/wd4324',
|
# '/wd4324',
|
||||||
# '/wd4351',
|
# '/wd4351',
|
||||||
# '/wd4355',
|
# '/wd4355',
|
||||||
|
# '/wd4389',
|
||||||
# '/wd4456',
|
# '/wd4456',
|
||||||
# '/wd4457',
|
# '/wd4457',
|
||||||
# '/wd4458',
|
# '/wd4458',
|
||||||
|
@ -86,7 +95,12 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4589',
|
# '/wd4589',
|
||||||
# '/wd4610',
|
# '/wd4610',
|
||||||
# '/wd4611',
|
# '/wd4611',
|
||||||
|
# '/wd4661',
|
||||||
|
# '/wd4701',
|
||||||
# '/wd4702',
|
# '/wd4702',
|
||||||
|
# '/wd4703',
|
||||||
|
# '/wd4706',
|
||||||
|
# '/wd4715',
|
||||||
# '/wd4838',
|
# '/wd4838',
|
||||||
# '/wd4995',
|
# '/wd4995',
|
||||||
# '/wd4996',
|
# '/wd4996',
|
||||||
|
@ -137,6 +151,7 @@ if CONFIG['OS_ARCH'] not in ('Darwin', 'WINNT'):
|
||||||
|
|
||||||
#LDFLAGS += [
|
#LDFLAGS += [
|
||||||
# '/DEBUG',
|
# '/DEBUG',
|
||||||
|
# '/pdbaltpath:%_PDB%',
|
||||||
# '/WX',
|
# '/WX',
|
||||||
#]
|
#]
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ DEFINES['_CRT_RAND_S'] = True
|
||||||
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
||||||
#DEFINES['_DEBUG'] = True
|
#DEFINES['_DEBUG'] = True
|
||||||
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
||||||
|
#DEFINES['_HAS_ITERATOR_DEBUGGING'] = '0'
|
||||||
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
||||||
DEFINES['_SECURE_ATL'] = True
|
DEFINES['_SECURE_ATL'] = True
|
||||||
DEFINES['_UNICODE'] = True
|
DEFINES['_UNICODE'] = True
|
||||||
|
@ -67,13 +68,21 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4117',
|
# '/wd4117',
|
||||||
# '/wd4121',
|
# '/wd4121',
|
||||||
# '/wd4127',
|
# '/wd4127',
|
||||||
|
# '/wd4200',
|
||||||
|
# '/wd4201',
|
||||||
|
# '/wd4204',
|
||||||
|
# '/wd4221',
|
||||||
# '/wd4244',
|
# '/wd4244',
|
||||||
|
# '/wd4245',
|
||||||
# '/wd4251',
|
# '/wd4251',
|
||||||
|
# '/wd4267',
|
||||||
# '/wd4275',
|
# '/wd4275',
|
||||||
|
# '/wd4305',
|
||||||
# '/wd4312',
|
# '/wd4312',
|
||||||
# '/wd4324',
|
# '/wd4324',
|
||||||
# '/wd4351',
|
# '/wd4351',
|
||||||
# '/wd4355',
|
# '/wd4355',
|
||||||
|
# '/wd4389',
|
||||||
# '/wd4456',
|
# '/wd4456',
|
||||||
# '/wd4457',
|
# '/wd4457',
|
||||||
# '/wd4458',
|
# '/wd4458',
|
||||||
|
@ -86,7 +95,12 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4589',
|
# '/wd4589',
|
||||||
# '/wd4610',
|
# '/wd4610',
|
||||||
# '/wd4611',
|
# '/wd4611',
|
||||||
|
# '/wd4661',
|
||||||
|
# '/wd4701',
|
||||||
# '/wd4702',
|
# '/wd4702',
|
||||||
|
# '/wd4703',
|
||||||
|
# '/wd4706',
|
||||||
|
# '/wd4715',
|
||||||
# '/wd4838',
|
# '/wd4838',
|
||||||
# '/wd4995',
|
# '/wd4995',
|
||||||
# '/wd4996',
|
# '/wd4996',
|
||||||
|
@ -123,6 +137,7 @@ OS_LIBS += [
|
||||||
|
|
||||||
#LDFLAGS += [
|
#LDFLAGS += [
|
||||||
# '/DEBUG',
|
# '/DEBUG',
|
||||||
|
# '/pdbaltpath:%_PDB%',
|
||||||
# '/WX',
|
# '/WX',
|
||||||
#]
|
#]
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ DEFINES['_CRT_RAND_S'] = True
|
||||||
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
||||||
#DEFINES['_DEBUG'] = True
|
#DEFINES['_DEBUG'] = True
|
||||||
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
||||||
|
#DEFINES['_HAS_ITERATOR_DEBUGGING'] = '0'
|
||||||
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
||||||
DEFINES['_SECURE_ATL'] = True
|
DEFINES['_SECURE_ATL'] = True
|
||||||
DEFINES['_UNICODE'] = True
|
DEFINES['_UNICODE'] = True
|
||||||
|
@ -66,13 +67,21 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4117',
|
# '/wd4117',
|
||||||
# '/wd4121',
|
# '/wd4121',
|
||||||
# '/wd4127',
|
# '/wd4127',
|
||||||
|
# '/wd4200',
|
||||||
|
# '/wd4201',
|
||||||
|
# '/wd4204',
|
||||||
|
# '/wd4221',
|
||||||
# '/wd4244',
|
# '/wd4244',
|
||||||
|
# '/wd4245',
|
||||||
# '/wd4251',
|
# '/wd4251',
|
||||||
|
# '/wd4267',
|
||||||
# '/wd4275',
|
# '/wd4275',
|
||||||
|
# '/wd4305',
|
||||||
# '/wd4312',
|
# '/wd4312',
|
||||||
# '/wd4324',
|
# '/wd4324',
|
||||||
# '/wd4351',
|
# '/wd4351',
|
||||||
# '/wd4355',
|
# '/wd4355',
|
||||||
|
# '/wd4389',
|
||||||
# '/wd4456',
|
# '/wd4456',
|
||||||
# '/wd4457',
|
# '/wd4457',
|
||||||
# '/wd4458',
|
# '/wd4458',
|
||||||
|
@ -85,7 +94,12 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4589',
|
# '/wd4589',
|
||||||
# '/wd4610',
|
# '/wd4610',
|
||||||
# '/wd4611',
|
# '/wd4611',
|
||||||
|
# '/wd4661',
|
||||||
|
# '/wd4701',
|
||||||
# '/wd4702',
|
# '/wd4702',
|
||||||
|
# '/wd4703',
|
||||||
|
# '/wd4706',
|
||||||
|
# '/wd4715',
|
||||||
# '/wd4838',
|
# '/wd4838',
|
||||||
# '/wd4995',
|
# '/wd4995',
|
||||||
# '/wd4996',
|
# '/wd4996',
|
||||||
|
@ -116,6 +130,7 @@ DIRS += [
|
||||||
|
|
||||||
#LDFLAGS += [
|
#LDFLAGS += [
|
||||||
# '/DEBUG',
|
# '/DEBUG',
|
||||||
|
# '/pdbaltpath:%_PDB%',
|
||||||
# '/WX',
|
# '/WX',
|
||||||
#]
|
#]
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ DEFINES['_CRT_RAND_S'] = True
|
||||||
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
||||||
#DEFINES['_DEBUG'] = True
|
#DEFINES['_DEBUG'] = True
|
||||||
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
||||||
|
#DEFINES['_HAS_ITERATOR_DEBUGGING'] = '0'
|
||||||
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
||||||
DEFINES['_SECURE_ATL'] = True
|
DEFINES['_SECURE_ATL'] = True
|
||||||
DEFINES['_UNICODE'] = True
|
DEFINES['_UNICODE'] = True
|
||||||
|
@ -72,13 +73,21 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4117',
|
# '/wd4117',
|
||||||
# '/wd4121',
|
# '/wd4121',
|
||||||
# '/wd4127',
|
# '/wd4127',
|
||||||
|
# '/wd4200',
|
||||||
|
# '/wd4201',
|
||||||
|
# '/wd4204',
|
||||||
|
# '/wd4221',
|
||||||
# '/wd4244',
|
# '/wd4244',
|
||||||
|
# '/wd4245',
|
||||||
# '/wd4251',
|
# '/wd4251',
|
||||||
|
# '/wd4267',
|
||||||
# '/wd4275',
|
# '/wd4275',
|
||||||
|
# '/wd4305',
|
||||||
# '/wd4312',
|
# '/wd4312',
|
||||||
# '/wd4324',
|
# '/wd4324',
|
||||||
# '/wd4351',
|
# '/wd4351',
|
||||||
# '/wd4355',
|
# '/wd4355',
|
||||||
|
# '/wd4389',
|
||||||
# '/wd4456',
|
# '/wd4456',
|
||||||
# '/wd4457',
|
# '/wd4457',
|
||||||
# '/wd4458',
|
# '/wd4458',
|
||||||
|
@ -92,7 +101,12 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4589',
|
# '/wd4589',
|
||||||
# '/wd4610',
|
# '/wd4610',
|
||||||
# '/wd4611',
|
# '/wd4611',
|
||||||
|
# '/wd4661',
|
||||||
|
# '/wd4701',
|
||||||
# '/wd4702',
|
# '/wd4702',
|
||||||
|
# '/wd4703',
|
||||||
|
# '/wd4706',
|
||||||
|
# '/wd4715',
|
||||||
# '/wd4838',
|
# '/wd4838',
|
||||||
# '/wd4995',
|
# '/wd4995',
|
||||||
# '/wd4996',
|
# '/wd4996',
|
||||||
|
@ -278,6 +292,7 @@ OS_LIBS += [
|
||||||
|
|
||||||
#LDFLAGS += [
|
#LDFLAGS += [
|
||||||
# '/DEBUG',
|
# '/DEBUG',
|
||||||
|
# '/pdbaltpath:%_PDB%',
|
||||||
# '/WX',
|
# '/WX',
|
||||||
#]
|
#]
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ DEFINES['_CRT_RAND_S'] = True
|
||||||
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
||||||
#DEFINES['_DEBUG'] = True
|
#DEFINES['_DEBUG'] = True
|
||||||
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
||||||
|
#DEFINES['_HAS_ITERATOR_DEBUGGING'] = '0'
|
||||||
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
||||||
DEFINES['_SECURE_ATL'] = True
|
DEFINES['_SECURE_ATL'] = True
|
||||||
DEFINES['_UNICODE'] = True
|
DEFINES['_UNICODE'] = True
|
||||||
|
@ -68,13 +69,21 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4117',
|
# '/wd4117',
|
||||||
# '/wd4121',
|
# '/wd4121',
|
||||||
# '/wd4127',
|
# '/wd4127',
|
||||||
|
# '/wd4200',
|
||||||
|
# '/wd4201',
|
||||||
|
# '/wd4204',
|
||||||
|
# '/wd4221',
|
||||||
# '/wd4244',
|
# '/wd4244',
|
||||||
|
# '/wd4245',
|
||||||
# '/wd4251',
|
# '/wd4251',
|
||||||
|
# '/wd4267',
|
||||||
# '/wd4275',
|
# '/wd4275',
|
||||||
|
# '/wd4305',
|
||||||
# '/wd4312',
|
# '/wd4312',
|
||||||
# '/wd4324',
|
# '/wd4324',
|
||||||
# '/wd4351',
|
# '/wd4351',
|
||||||
# '/wd4355',
|
# '/wd4355',
|
||||||
|
# '/wd4389',
|
||||||
# '/wd4456',
|
# '/wd4456',
|
||||||
# '/wd4457',
|
# '/wd4457',
|
||||||
# '/wd4458',
|
# '/wd4458',
|
||||||
|
@ -87,7 +96,12 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4589',
|
# '/wd4589',
|
||||||
# '/wd4610',
|
# '/wd4610',
|
||||||
# '/wd4611',
|
# '/wd4611',
|
||||||
|
# '/wd4661',
|
||||||
|
# '/wd4701',
|
||||||
# '/wd4702',
|
# '/wd4702',
|
||||||
|
# '/wd4703',
|
||||||
|
# '/wd4706',
|
||||||
|
# '/wd4715',
|
||||||
# '/wd4838',
|
# '/wd4838',
|
||||||
# '/wd4995',
|
# '/wd4995',
|
||||||
# '/wd4996',
|
# '/wd4996',
|
||||||
|
@ -149,6 +163,7 @@ OS_LIBS += [
|
||||||
# '/INCREMENTAL',
|
# '/INCREMENTAL',
|
||||||
# '/MACHINE:X64',
|
# '/MACHINE:X64',
|
||||||
# '/NXCOMPAT',
|
# '/NXCOMPAT',
|
||||||
|
# '/pdbaltpath:%_PDB%',
|
||||||
# '/SUBSYSTEM:CONSOLE,5.02',
|
# '/SUBSYSTEM:CONSOLE,5.02',
|
||||||
# '/WX',
|
# '/WX',
|
||||||
#]
|
#]
|
||||||
|
|
|
@ -37,6 +37,7 @@ DEFINES['_CRT_RAND_S'] = True
|
||||||
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
||||||
#DEFINES['_DEBUG'] = True
|
#DEFINES['_DEBUG'] = True
|
||||||
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
||||||
|
#DEFINES['_HAS_ITERATOR_DEBUGGING'] = '0'
|
||||||
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
||||||
DEFINES['_SECURE_ATL'] = True
|
DEFINES['_SECURE_ATL'] = True
|
||||||
DEFINES['_UNICODE'] = True
|
DEFINES['_UNICODE'] = True
|
||||||
|
@ -73,13 +74,21 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4117',
|
# '/wd4117',
|
||||||
# '/wd4121',
|
# '/wd4121',
|
||||||
# '/wd4127',
|
# '/wd4127',
|
||||||
|
# '/wd4200',
|
||||||
|
# '/wd4201',
|
||||||
|
# '/wd4204',
|
||||||
|
# '/wd4221',
|
||||||
# '/wd4244',
|
# '/wd4244',
|
||||||
|
# '/wd4245',
|
||||||
# '/wd4251',
|
# '/wd4251',
|
||||||
|
# '/wd4267',
|
||||||
# '/wd4275',
|
# '/wd4275',
|
||||||
|
# '/wd4305',
|
||||||
# '/wd4312',
|
# '/wd4312',
|
||||||
# '/wd4324',
|
# '/wd4324',
|
||||||
# '/wd4351',
|
# '/wd4351',
|
||||||
# '/wd4355',
|
# '/wd4355',
|
||||||
|
# '/wd4389',
|
||||||
# '/wd4456',
|
# '/wd4456',
|
||||||
# '/wd4457',
|
# '/wd4457',
|
||||||
# '/wd4458',
|
# '/wd4458',
|
||||||
|
@ -93,7 +102,12 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4589',
|
# '/wd4589',
|
||||||
# '/wd4610',
|
# '/wd4610',
|
||||||
# '/wd4611',
|
# '/wd4611',
|
||||||
|
# '/wd4661',
|
||||||
|
# '/wd4701',
|
||||||
# '/wd4702',
|
# '/wd4702',
|
||||||
|
# '/wd4703',
|
||||||
|
# '/wd4706',
|
||||||
|
# '/wd4715',
|
||||||
# '/wd4838',
|
# '/wd4838',
|
||||||
# '/wd4995',
|
# '/wd4995',
|
||||||
# '/wd4996',
|
# '/wd4996',
|
||||||
|
@ -167,6 +181,7 @@ OS_LIBS += [
|
||||||
# '/INCREMENTAL',
|
# '/INCREMENTAL',
|
||||||
# '/MACHINE:X64',
|
# '/MACHINE:X64',
|
||||||
# '/NXCOMPAT',
|
# '/NXCOMPAT',
|
||||||
|
# '/pdbaltpath:%_PDB%',
|
||||||
# '/SUBSYSTEM:CONSOLE,5.02',
|
# '/SUBSYSTEM:CONSOLE,5.02',
|
||||||
# '/WX',
|
# '/WX',
|
||||||
#]
|
#]
|
||||||
|
|
|
@ -30,6 +30,7 @@ DEFINES['_CRT_RAND_S'] = True
|
||||||
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
||||||
#DEFINES['_DEBUG'] = True
|
#DEFINES['_DEBUG'] = True
|
||||||
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
||||||
|
#DEFINES['_HAS_ITERATOR_DEBUGGING'] = '0'
|
||||||
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
||||||
DEFINES['_SECURE_ATL'] = True
|
DEFINES['_SECURE_ATL'] = True
|
||||||
DEFINES['_UNICODE'] = True
|
DEFINES['_UNICODE'] = True
|
||||||
|
@ -66,13 +67,21 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4117',
|
# '/wd4117',
|
||||||
# '/wd4121',
|
# '/wd4121',
|
||||||
# '/wd4127',
|
# '/wd4127',
|
||||||
|
# '/wd4200',
|
||||||
|
# '/wd4201',
|
||||||
|
# '/wd4204',
|
||||||
|
# '/wd4221',
|
||||||
# '/wd4244',
|
# '/wd4244',
|
||||||
|
# '/wd4245',
|
||||||
# '/wd4251',
|
# '/wd4251',
|
||||||
|
# '/wd4267',
|
||||||
# '/wd4275',
|
# '/wd4275',
|
||||||
|
# '/wd4305',
|
||||||
# '/wd4312',
|
# '/wd4312',
|
||||||
# '/wd4324',
|
# '/wd4324',
|
||||||
# '/wd4351',
|
# '/wd4351',
|
||||||
# '/wd4355',
|
# '/wd4355',
|
||||||
|
# '/wd4389',
|
||||||
# '/wd4456',
|
# '/wd4456',
|
||||||
# '/wd4457',
|
# '/wd4457',
|
||||||
# '/wd4458',
|
# '/wd4458',
|
||||||
|
@ -85,7 +94,12 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4589',
|
# '/wd4589',
|
||||||
# '/wd4610',
|
# '/wd4610',
|
||||||
# '/wd4611',
|
# '/wd4611',
|
||||||
|
# '/wd4661',
|
||||||
|
# '/wd4701',
|
||||||
# '/wd4702',
|
# '/wd4702',
|
||||||
|
# '/wd4703',
|
||||||
|
# '/wd4706',
|
||||||
|
# '/wd4715',
|
||||||
# '/wd4838',
|
# '/wd4838',
|
||||||
# '/wd4995',
|
# '/wd4995',
|
||||||
# '/wd4996',
|
# '/wd4996',
|
||||||
|
@ -123,6 +137,7 @@ DIRS += [
|
||||||
|
|
||||||
#LDFLAGS += [
|
#LDFLAGS += [
|
||||||
# '/DEBUG',
|
# '/DEBUG',
|
||||||
|
# '/pdbaltpath:%_PDB%',
|
||||||
# '/WX',
|
# '/WX',
|
||||||
#]
|
#]
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ DEFINES['_CRT_RAND_S'] = True
|
||||||
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
|
||||||
#DEFINES['_DEBUG'] = True
|
#DEFINES['_DEBUG'] = True
|
||||||
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
DEFINES['_HAS_EXCEPTIONS'] = '0'
|
||||||
|
#DEFINES['_HAS_ITERATOR_DEBUGGING'] = '0'
|
||||||
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
|
||||||
DEFINES['_SECURE_ATL'] = True
|
DEFINES['_SECURE_ATL'] = True
|
||||||
DEFINES['_UNICODE'] = True
|
DEFINES['_UNICODE'] = True
|
||||||
|
@ -69,13 +70,21 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4117',
|
# '/wd4117',
|
||||||
# '/wd4121',
|
# '/wd4121',
|
||||||
# '/wd4127',
|
# '/wd4127',
|
||||||
|
# '/wd4200',
|
||||||
|
# '/wd4201',
|
||||||
|
# '/wd4204',
|
||||||
|
# '/wd4221',
|
||||||
# '/wd4244',
|
# '/wd4244',
|
||||||
|
# '/wd4245',
|
||||||
# '/wd4251',
|
# '/wd4251',
|
||||||
|
# '/wd4267',
|
||||||
# '/wd4275',
|
# '/wd4275',
|
||||||
|
# '/wd4305',
|
||||||
# '/wd4312',
|
# '/wd4312',
|
||||||
# '/wd4324',
|
# '/wd4324',
|
||||||
# '/wd4351',
|
# '/wd4351',
|
||||||
# '/wd4355',
|
# '/wd4355',
|
||||||
|
# '/wd4389',
|
||||||
# '/wd4456',
|
# '/wd4456',
|
||||||
# '/wd4457',
|
# '/wd4457',
|
||||||
# '/wd4458',
|
# '/wd4458',
|
||||||
|
@ -88,7 +97,12 @@ LOCAL_INCLUDES += [
|
||||||
# '/wd4589',
|
# '/wd4589',
|
||||||
# '/wd4610',
|
# '/wd4610',
|
||||||
# '/wd4611',
|
# '/wd4611',
|
||||||
|
# '/wd4661',
|
||||||
|
# '/wd4701',
|
||||||
# '/wd4702',
|
# '/wd4702',
|
||||||
|
# '/wd4703',
|
||||||
|
# '/wd4706',
|
||||||
|
# '/wd4715',
|
||||||
# '/wd4718',
|
# '/wd4718',
|
||||||
# '/wd4838',
|
# '/wd4838',
|
||||||
# '/wd4995',
|
# '/wd4995',
|
||||||
|
@ -232,6 +246,7 @@ DIRS += [
|
||||||
|
|
||||||
#LDFLAGS += [
|
#LDFLAGS += [
|
||||||
# '/DEBUG',
|
# '/DEBUG',
|
||||||
|
# '/pdbaltpath:%_PDB%',
|
||||||
# '/WX',
|
# '/WX',
|
||||||
#]
|
#]
|
||||||
|
|
||||||
|
|
|
@ -234,6 +234,7 @@ IGNORED_INCLUDES = {
|
||||||
'libANGLE/renderer/vulkan/android/DisplayVkAndroid.h',
|
'libANGLE/renderer/vulkan/android/DisplayVkAndroid.h',
|
||||||
'libANGLE/renderer/vulkan/win32/DisplayVkWin32.h',
|
'libANGLE/renderer/vulkan/win32/DisplayVkWin32.h',
|
||||||
'libANGLE/renderer/vulkan/xcb/DisplayVkXcb.h',
|
'libANGLE/renderer/vulkan/xcb/DisplayVkXcb.h',
|
||||||
|
'kernel/image.h',
|
||||||
}
|
}
|
||||||
|
|
||||||
IGNORED_INCLUDE_PREFIXES = {
|
IGNORED_INCLUDE_PREFIXES = {
|
||||||
|
@ -302,6 +303,7 @@ REGISTERED_DEFINES = {
|
||||||
'_CRT_SECURE_NO_DEPRECATE': True,
|
'_CRT_SECURE_NO_DEPRECATE': True,
|
||||||
'_DEBUG': False,
|
'_DEBUG': False,
|
||||||
'_HAS_EXCEPTIONS': True,
|
'_HAS_EXCEPTIONS': True,
|
||||||
|
'_HAS_ITERATOR_DEBUGGING': False,
|
||||||
'_SCL_SECURE_NO_DEPRECATE': True,
|
'_SCL_SECURE_NO_DEPRECATE': True,
|
||||||
'_SECURE_ATL': True,
|
'_SECURE_ATL': True,
|
||||||
'_UNICODE': True,
|
'_UNICODE': True,
|
||||||
|
@ -480,7 +482,7 @@ def export_target(root):
|
||||||
(b, e) = x.rsplit('.', 1)
|
(b, e) = x.rsplit('.', 1)
|
||||||
if e in ['h', 'y', 'l', 'inc', 'inl']:
|
if e in ['h', 'y', 'l', 'inc', 'inl']:
|
||||||
continue
|
continue
|
||||||
elif e in ['cpp', 'cc']:
|
elif e in ['cpp', 'cc', 'c']:
|
||||||
if b.endswith('_win'):
|
if b.endswith('_win'):
|
||||||
config = "CONFIG['OS_ARCH'] == 'WINNT'"
|
config = "CONFIG['OS_ARCH'] == 'WINNT'"
|
||||||
elif b.endswith('_linux'):
|
elif b.endswith('_linux'):
|
||||||
|
|
|
@ -933,7 +933,7 @@ JS_FRIEND_API uint32_t JS_GetDataViewByteLength(JSObject* obj) {
|
||||||
JS_FRIEND_API JSObject* JS_NewDataView(JSContext* cx, HandleObject buffer,
|
JS_FRIEND_API JSObject* JS_NewDataView(JSContext* cx, HandleObject buffer,
|
||||||
uint32_t byteOffset,
|
uint32_t byteOffset,
|
||||||
int32_t byteLength) {
|
int32_t byteLength) {
|
||||||
JSProtoKey key = JSCLASS_CACHED_PROTO_KEY(&DataViewObject::class_);
|
JSProtoKey key = JSProto_DataView;
|
||||||
RootedObject constructor(cx, GlobalObject::getOrCreateConstructor(cx, key));
|
RootedObject constructor(cx, GlobalObject::getOrCreateConstructor(cx, key));
|
||||||
if (!constructor) {
|
if (!constructor) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
|
@ -2173,7 +2173,7 @@ static bool FinishObjectClassInit(JSContext* cx, JS::HandleObject ctor,
|
||||||
*/
|
*/
|
||||||
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
|
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
|
||||||
if (global->shouldSplicePrototype()) {
|
if (global->shouldSplicePrototype()) {
|
||||||
if (!JSObject::splicePrototype(cx, global, global->getClass(), tagged)) {
|
if (!JSObject::splicePrototype(cx, global, tagged)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7284,50 +7284,43 @@ GCRuntime::IncrementalResult GCRuntime::budgetIncrementalGC(
|
||||||
return IncrementalResult::Ok;
|
return IncrementalResult::Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
static void ScheduleZones(GCRuntime* gc) {
|
||||||
|
JSRuntime* rt = gc->rt;
|
||||||
|
|
||||||
class AutoScheduleZonesForGC {
|
for (ZonesIter zone(rt, WithAtoms); !zone.done(); zone.next()) {
|
||||||
JSRuntime* rt_;
|
if (!zone->canCollect()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
if (gc->gcMode() == JSGC_MODE_GLOBAL) {
|
||||||
explicit AutoScheduleZonesForGC(GCRuntime* gc) : rt_(gc->rt) {
|
zone->scheduleGC();
|
||||||
for (ZonesIter zone(rt_, WithAtoms); !zone.done(); zone.next()) {
|
}
|
||||||
if (!zone->canCollect()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gc->gcMode() == JSGC_MODE_GLOBAL) {
|
// To avoid resets, continue to collect any zones that were being
|
||||||
zone->scheduleGC();
|
// collected in a previous slice.
|
||||||
}
|
if (gc->isIncrementalGCInProgress() && zone->wasGCStarted()) {
|
||||||
|
zone->scheduleGC();
|
||||||
|
}
|
||||||
|
|
||||||
// To avoid resets, continue to collect any zones that were being
|
// This is a heuristic to reduce the total number of collections.
|
||||||
// collected in a previous slice.
|
bool inHighFrequencyMode = gc->schedulingState.inHighFrequencyGCMode();
|
||||||
if (gc->isIncrementalGCInProgress() && zone->wasGCStarted()) {
|
if (zone->zoneSize.gcBytes() >=
|
||||||
zone->scheduleGC();
|
zone->threshold.eagerAllocTrigger(inHighFrequencyMode)) {
|
||||||
}
|
zone->scheduleGC();
|
||||||
|
}
|
||||||
|
|
||||||
// This is a heuristic to reduce the total number of collections.
|
// This ensures we collect zones that have reached the malloc limit.
|
||||||
bool inHighFrequencyMode = gc->schedulingState.inHighFrequencyGCMode();
|
if (zone->shouldTriggerGCForTooMuchMalloc()) {
|
||||||
if (zone->zoneSize.gcBytes() >=
|
zone->scheduleGC();
|
||||||
zone->threshold.eagerAllocTrigger(inHighFrequencyMode)) {
|
|
||||||
zone->scheduleGC();
|
|
||||||
}
|
|
||||||
|
|
||||||
// This ensures we collect zones that have reached the malloc limit.
|
|
||||||
if (zone->shouldTriggerGCForTooMuchMalloc()) {
|
|
||||||
zone->scheduleGC();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
~AutoScheduleZonesForGC() {
|
static void UnScheduleZones(GCRuntime* gc) {
|
||||||
for (ZonesIter zone(rt_, WithAtoms); !zone.done(); zone.next()) {
|
for (ZonesIter zone(gc->rt, WithAtoms); !zone.done(); zone.next()) {
|
||||||
zone->unscheduleGC();
|
zone->unscheduleGC();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
} /* anonymous namespace */
|
|
||||||
|
|
||||||
class js::gc::AutoCallGCCallbacks {
|
class js::gc::AutoCallGCCallbacks {
|
||||||
GCRuntime& gc_;
|
GCRuntime& gc_;
|
||||||
|
@ -7387,6 +7380,7 @@ MOZ_NEVER_INLINE GCRuntime::IncrementalResult GCRuntime::gcCycle(
|
||||||
// Note that GC callbacks are allowed to re-enter GC.
|
// Note that GC callbacks are allowed to re-enter GC.
|
||||||
AutoCallGCCallbacks callCallbacks(*this);
|
AutoCallGCCallbacks callCallbacks(*this);
|
||||||
|
|
||||||
|
ScheduleZones(this);
|
||||||
gcstats::AutoGCSlice agc(stats(), scanZonesBeforeGC(), invocationKind, budget,
|
gcstats::AutoGCSlice agc(stats(), scanZonesBeforeGC(), invocationKind, budget,
|
||||||
reason);
|
reason);
|
||||||
|
|
||||||
|
@ -7595,7 +7589,6 @@ void GCRuntime::collect(bool nonincrementalByAPI, SliceBudget budget,
|
||||||
AutoTraceLog logGC(TraceLoggerForCurrentThread(), TraceLogger_GC);
|
AutoTraceLog logGC(TraceLoggerForCurrentThread(), TraceLogger_GC);
|
||||||
AutoStopVerifyingBarriers av(rt, IsShutdownGC(reason));
|
AutoStopVerifyingBarriers av(rt, IsShutdownGC(reason));
|
||||||
AutoEnqueuePendingParseTasksAfterGC aept(*this);
|
AutoEnqueuePendingParseTasksAfterGC aept(*this);
|
||||||
AutoScheduleZonesForGC asz(this);
|
|
||||||
|
|
||||||
bool repeat;
|
bool repeat;
|
||||||
do {
|
do {
|
||||||
|
@ -7655,6 +7648,8 @@ void GCRuntime::collect(bool nonincrementalByAPI, SliceBudget budget,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
stats().writeLogMessage("GC ending in state %s", StateName(incrementalState));
|
stats().writeLogMessage("GC ending in state %s", StateName(incrementalState));
|
||||||
|
|
||||||
|
UnScheduleZones(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
js::AutoEnqueuePendingParseTasksAfterGC::
|
js::AutoEnqueuePendingParseTasksAfterGC::
|
||||||
|
|
|
@ -3294,8 +3294,7 @@ static bool TryAttachFunCallStub(JSContext* cx, ICCall_Fallback* stub,
|
||||||
|
|
||||||
static bool GetTemplateObjectForNative(JSContext* cx, HandleFunction target,
|
static bool GetTemplateObjectForNative(JSContext* cx, HandleFunction target,
|
||||||
const CallArgs& args,
|
const CallArgs& args,
|
||||||
MutableHandleObject res,
|
MutableHandleObject res) {
|
||||||
bool* skipAttach) {
|
|
||||||
Native native = target->native();
|
Native native = target->native();
|
||||||
|
|
||||||
// Check for natives to which template objects can be attached. This is
|
// Check for natives to which template objects can be attached. This is
|
||||||
|
@ -3314,16 +3313,6 @@ static bool GetTemplateObjectForNative(JSContext* cx, HandleFunction target,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count <= ArrayObject::EagerAllocationMaxLength) {
|
if (count <= ArrayObject::EagerAllocationMaxLength) {
|
||||||
ObjectGroup* group =
|
|
||||||
ObjectGroup::callingAllocationSiteGroup(cx, JSProto_Array);
|
|
||||||
if (!group) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (group->maybePreliminaryObjectsDontCheckGeneration()) {
|
|
||||||
*skipAttach = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// With this and other array templates, analyze the group so that
|
// With this and other array templates, analyze the group so that
|
||||||
// we don't end up with a template whose structure might change later.
|
// we don't end up with a template whose structure might change later.
|
||||||
res.set(NewFullyAllocatedArrayForCallingAllocationSite(cx, count,
|
res.set(NewFullyAllocatedArrayForCallingAllocationSite(cx, count,
|
||||||
|
@ -3351,10 +3340,6 @@ static bool GetTemplateObjectForNative(JSContext* cx, HandleFunction target,
|
||||||
if (args.thisv().isObject()) {
|
if (args.thisv().isObject()) {
|
||||||
RootedObject obj(cx, &args.thisv().toObject());
|
RootedObject obj(cx, &args.thisv().toObject());
|
||||||
if (!obj->isSingleton()) {
|
if (!obj->isSingleton()) {
|
||||||
if (obj->group()->maybePreliminaryObjectsDontCheckGeneration()) {
|
|
||||||
*skipAttach = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
res.set(NewFullyAllocatedArrayTryReuseGroup(cx, obj, 0, TenuredObject));
|
res.set(NewFullyAllocatedArrayTryReuseGroup(cx, obj, 0, TenuredObject));
|
||||||
return !!res;
|
return !!res;
|
||||||
}
|
}
|
||||||
|
@ -3694,16 +3679,10 @@ static bool TryAttachCallStub(JSContext* cx, ICCall_Fallback* stub,
|
||||||
|
|
||||||
RootedObject templateObject(cx);
|
RootedObject templateObject(cx);
|
||||||
if (MOZ_LIKELY(!isSpread && !isSuper && !isCrossRealm)) {
|
if (MOZ_LIKELY(!isSpread && !isSuper && !isCrossRealm)) {
|
||||||
bool skipAttach = false;
|
|
||||||
CallArgs args = CallArgsFromVp(argc, vp);
|
CallArgs args = CallArgsFromVp(argc, vp);
|
||||||
if (!GetTemplateObjectForNative(cx, fun, args, &templateObject,
|
if (!GetTemplateObjectForNative(cx, fun, args, &templateObject)) {
|
||||||
&skipAttach)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (skipAttach) {
|
|
||||||
*handled = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
MOZ_ASSERT_IF(templateObject,
|
MOZ_ASSERT_IF(templateObject,
|
||||||
!templateObject->group()
|
!templateObject->group()
|
||||||
->maybePreliminaryObjectsDontCheckGeneration());
|
->maybePreliminaryObjectsDontCheckGeneration());
|
||||||
|
@ -6072,8 +6051,7 @@ static bool DoNewArray(JSContext* cx, BaselineFrame* frame,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!obj->isSingleton() &&
|
if (!obj->isSingleton()) {
|
||||||
!obj->group()->maybePreliminaryObjectsDontCheckGeneration()) {
|
|
||||||
JSObject* templateObject =
|
JSObject* templateObject =
|
||||||
NewArrayOperation(cx, script, pc, length, TenuredObject);
|
NewArrayOperation(cx, script, pc, length, TenuredObject);
|
||||||
if (!templateObject) {
|
if (!templateObject) {
|
||||||
|
|
|
@ -4981,12 +4981,6 @@ bool CallIRGenerator::tryAttachArrayPush() {
|
||||||
|
|
||||||
RootedArrayObject thisarray(cx_, &thisobj->as<ArrayObject>());
|
RootedArrayObject thisarray(cx_, &thisobj->as<ArrayObject>());
|
||||||
|
|
||||||
// And the object group for the array is not collecting preliminary objects.
|
|
||||||
AutoSweepObjectGroup sweep(thisobj->group());
|
|
||||||
if (thisobj->group()->maybePreliminaryObjects(sweep)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for other indexed properties or class hooks.
|
// Check for other indexed properties or class hooks.
|
||||||
if (!CanAttachAddElement(thisarray, /* isInit = */ false)) {
|
if (!CanAttachAddElement(thisarray, /* isInit = */ false)) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1841,10 +1841,6 @@ IonBuilder::InliningResult IonBuilder::inlineStringSplitString(
|
||||||
if (!group) {
|
if (!group) {
|
||||||
return InliningStatus_NotInlined;
|
return InliningStatus_NotInlined;
|
||||||
}
|
}
|
||||||
AutoSweepObjectGroup sweep(group);
|
|
||||||
if (group->maybePreliminaryObjects(sweep)) {
|
|
||||||
return InliningStatus_NotInlined;
|
|
||||||
}
|
|
||||||
|
|
||||||
TypeSet::ObjectKey* retKey = TypeSet::ObjectKey::get(group);
|
TypeSet::ObjectKey* retKey = TypeSet::ObjectKey::get(group);
|
||||||
if (retKey->unknownProperties()) {
|
if (retKey->unknownProperties()) {
|
||||||
|
|
|
@ -119,7 +119,7 @@ JS_FRIEND_API bool JS_SplicePrototype(JSContext* cx, HandleObject obj,
|
||||||
}
|
}
|
||||||
|
|
||||||
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
|
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
|
||||||
return JSObject::splicePrototype(cx, obj, obj->getClass(), tagged);
|
return JSObject::splicePrototype(cx, obj, tagged);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_FRIEND_API JSObject* JS_NewObjectWithUniqueType(JSContext* cx,
|
JS_FRIEND_API JSObject* JS_NewObjectWithUniqueType(JSContext* cx,
|
||||||
|
|
|
@ -276,6 +276,11 @@ class GlobalObject : public NativeObject {
|
||||||
JS::OnNewGlobalHookOption hookOption,
|
JS::OnNewGlobalHookOption hookOption,
|
||||||
const JS::RealmOptions& options);
|
const JS::RealmOptions& options);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For bootstrapping, whether to splice a prototype for the global object.
|
||||||
|
*/
|
||||||
|
bool shouldSplicePrototype();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a constructor function with the specified name and length using
|
* Create a constructor function with the specified name and length using
|
||||||
* ctor, a method which creates objects with the given class.
|
* ctor, a method which creates objects with the given class.
|
||||||
|
|
|
@ -5233,13 +5233,9 @@ JSObject* js::NewArrayOperation(JSContext* cx, HandleScript script,
|
||||||
if (!group) {
|
if (!group) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
AutoSweepObjectGroup sweep(group);
|
|
||||||
if (group->maybePreliminaryObjects(sweep)) {
|
|
||||||
group->maybePreliminaryObjects(sweep)->maybeAnalyze(cx, group);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (group->shouldPreTenure(sweep) ||
|
AutoSweepObjectGroup sweep(group);
|
||||||
group->maybePreliminaryObjects(sweep)) {
|
if (group->shouldPreTenure(sweep)) {
|
||||||
newKind = TenuredObject;
|
newKind = TenuredObject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1001,8 +1001,8 @@ bool js::NewObjectScriptedCall(JSContext* cx, MutableHandleObject pobj) {
|
||||||
RootedScript script(cx, cx->currentScript(&pc));
|
RootedScript script(cx, cx->currentScript(&pc));
|
||||||
gc::AllocKind allocKind = NewObjectGCKind(&PlainObject::class_);
|
gc::AllocKind allocKind = NewObjectGCKind(&PlainObject::class_);
|
||||||
NewObjectKind newKind = GenericObject;
|
NewObjectKind newKind = GenericObject;
|
||||||
if (script && ObjectGroup::useSingletonForAllocationSite(
|
if (script &&
|
||||||
script, pc, &PlainObject::class_)) {
|
ObjectGroup::useSingletonForAllocationSite(script, pc, JSProto_Object)) {
|
||||||
newKind = SingletonObject;
|
newKind = SingletonObject;
|
||||||
}
|
}
|
||||||
RootedObject obj(
|
RootedObject obj(
|
||||||
|
@ -1066,7 +1066,7 @@ static inline JSObject* CreateThisForFunctionWithGroup(JSContext* cx,
|
||||||
if (newKind == SingletonObject) {
|
if (newKind == SingletonObject) {
|
||||||
Rooted<TaggedProto> proto(
|
Rooted<TaggedProto> proto(
|
||||||
cx, TaggedProto(templateObject->staticPrototype()));
|
cx, TaggedProto(templateObject->staticPrototype()));
|
||||||
if (!JSObject::splicePrototype(cx, res, &PlainObject::class_, proto)) {
|
if (!JSObject::splicePrototype(cx, res, proto)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2113,7 +2113,7 @@ static NativeObject* DefineConstructorAndPrototype(
|
||||||
/* Bootstrap Function.prototype (see also JS_InitStandardClasses). */
|
/* Bootstrap Function.prototype (see also JS_InitStandardClasses). */
|
||||||
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
|
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
|
||||||
if (ctor->getClass() == clasp &&
|
if (ctor->getClass() == clasp &&
|
||||||
!JSObject::splicePrototype(cx, ctor, clasp, tagged)) {
|
!JSObject::splicePrototype(cx, ctor, tagged)) {
|
||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2256,9 +2256,8 @@ static bool ReshapeForProtoMutation(JSContext* cx, HandleObject obj) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool SetClassAndProto(JSContext* cx, HandleObject obj,
|
static bool SetProto(JSContext* cx, HandleObject obj,
|
||||||
const Class* clasp,
|
Handle<js::TaggedProto> proto) {
|
||||||
Handle<js::TaggedProto> proto) {
|
|
||||||
// Regenerate object shape (and possibly prototype shape) to invalidate JIT
|
// Regenerate object shape (and possibly prototype shape) to invalidate JIT
|
||||||
// code that is affected by a prototype mutation.
|
// code that is affected by a prototype mutation.
|
||||||
if (!ReshapeForProtoMutation(cx, obj)) {
|
if (!ReshapeForProtoMutation(cx, obj)) {
|
||||||
|
@ -2277,7 +2276,7 @@ static bool SetClassAndProto(JSContext* cx, HandleObject obj,
|
||||||
* Just splice the prototype, but mark the properties as unknown for
|
* Just splice the prototype, but mark the properties as unknown for
|
||||||
* consistent behavior.
|
* consistent behavior.
|
||||||
*/
|
*/
|
||||||
if (!JSObject::splicePrototype(cx, obj, clasp, proto)) {
|
if (!JSObject::splicePrototype(cx, obj, proto)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
MarkObjectGroupUnknownProperties(cx, obj->group());
|
MarkObjectGroupUnknownProperties(cx, obj->group());
|
||||||
|
@ -2299,7 +2298,7 @@ static bool SetClassAndProto(JSContext* cx, HandleObject obj,
|
||||||
}
|
}
|
||||||
newGroup->setInterpretedFunction(oldGroup->maybeInterpretedFunction());
|
newGroup->setInterpretedFunction(oldGroup->maybeInterpretedFunction());
|
||||||
} else {
|
} else {
|
||||||
newGroup = ObjectGroup::defaultNewGroup(cx, clasp, proto);
|
newGroup = ObjectGroup::defaultNewGroup(cx, obj->getClass(), proto);
|
||||||
if (!newGroup) {
|
if (!newGroup) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2945,7 +2944,7 @@ bool js::SetPrototype(JSContext* cx, HandleObject obj, HandleObject proto,
|
||||||
}
|
}
|
||||||
|
|
||||||
Rooted<TaggedProto> taggedProto(cx, TaggedProto(proto));
|
Rooted<TaggedProto> taggedProto(cx, TaggedProto(proto));
|
||||||
if (!SetClassAndProto(cx, obj, obj->getClass(), taggedProto)) {
|
if (!SetProto(cx, obj, taggedProto)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -392,15 +392,8 @@ class JSObject : public js::gc::Cell {
|
||||||
|
|
||||||
/* Set a new prototype for an object with a singleton type. */
|
/* Set a new prototype for an object with a singleton type. */
|
||||||
static bool splicePrototype(JSContext* cx, js::HandleObject obj,
|
static bool splicePrototype(JSContext* cx, js::HandleObject obj,
|
||||||
const js::Class* clasp,
|
|
||||||
js::Handle<js::TaggedProto> proto);
|
js::Handle<js::TaggedProto> proto);
|
||||||
|
|
||||||
/*
|
|
||||||
* For bootstrapping, whether to splice a prototype for Function.prototype
|
|
||||||
* or the global object.
|
|
||||||
*/
|
|
||||||
bool shouldSplicePrototype();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Environment chains.
|
* Environment chains.
|
||||||
*
|
*
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include "js/CharacterEncoding.h"
|
#include "js/CharacterEncoding.h"
|
||||||
#include "js/UniquePtr.h"
|
#include "js/UniquePtr.h"
|
||||||
#include "vm/ArrayObject.h"
|
#include "vm/ArrayObject.h"
|
||||||
|
#include "vm/GlobalObject.h"
|
||||||
#include "vm/JSObject.h"
|
#include "vm/JSObject.h"
|
||||||
#include "vm/RegExpObject.h"
|
#include "vm/RegExpObject.h"
|
||||||
#include "vm/Shape.h"
|
#include "vm/Shape.h"
|
||||||
|
@ -241,31 +242,18 @@ void ObjectGroup::setAddendum(AddendumKind kind, void* addendum,
|
||||||
return SingletonObject;
|
return SingletonObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool ObjectGroup::useSingletonForAllocationSite(
|
|
||||||
JSScript* script, jsbytecode* pc, const Class* clasp) {
|
|
||||||
return useSingletonForAllocationSite(script, pc,
|
|
||||||
JSCLASS_CACHED_PROTO_KEY(clasp));
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
// JSObject
|
// JSObject
|
||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
bool JSObject::shouldSplicePrototype() {
|
bool GlobalObject::shouldSplicePrototype() {
|
||||||
/*
|
// During bootstrapping, we need to make sure not to splice a new prototype in
|
||||||
* During bootstrapping, if inference is enabled we need to make sure not
|
// for the global object if its __proto__ had previously been set to non-null,
|
||||||
* to splice a new prototype in for Function.prototype or the global
|
// as this will change the prototype for all other objects with the same type.
|
||||||
* object if their __proto__ had previously been set to null, as this
|
return staticPrototype() == nullptr;
|
||||||
* will change the prototype for all other objects with the same type.
|
|
||||||
*/
|
|
||||||
if (staticPrototype() != nullptr) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return isSingleton();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool JSObject::splicePrototype(JSContext* cx, HandleObject obj,
|
/* static */ bool JSObject::splicePrototype(JSContext* cx, HandleObject obj,
|
||||||
const Class* clasp,
|
|
||||||
Handle<TaggedProto> proto) {
|
Handle<TaggedProto> proto) {
|
||||||
MOZ_ASSERT(cx->compartment() == obj->compartment());
|
MOZ_ASSERT(cx->compartment() == obj->compartment());
|
||||||
|
|
||||||
|
@ -279,6 +267,10 @@ bool JSObject::shouldSplicePrototype() {
|
||||||
// Windows may not appear on prototype chains.
|
// Windows may not appear on prototype chains.
|
||||||
MOZ_ASSERT_IF(proto.isObject(), !IsWindow(proto.toObject()));
|
MOZ_ASSERT_IF(proto.isObject(), !IsWindow(proto.toObject()));
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
const Class* oldClass = obj->getClass();
|
||||||
|
#endif
|
||||||
|
|
||||||
if (proto.isObject()) {
|
if (proto.isObject()) {
|
||||||
RootedObject protoObj(cx, proto.toObject());
|
RootedObject protoObj(cx, proto.toObject());
|
||||||
if (!JSObject::setDelegate(cx, protoObj)) {
|
if (!JSObject::setDelegate(cx, protoObj)) {
|
||||||
|
@ -300,7 +292,8 @@ bool JSObject::shouldSplicePrototype() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
group->setClasp(clasp);
|
MOZ_ASSERT(group->clasp() == oldClass,
|
||||||
|
"splicing a prototype doesn't change a group's class");
|
||||||
group->setProto(proto);
|
group->setProto(proto);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -726,17 +719,6 @@ inline const Class* GetClassForProtoKey(JSProtoKey key) {
|
||||||
case JSProto_Array:
|
case JSProto_Array:
|
||||||
return &ArrayObject::class_;
|
return &ArrayObject::class_;
|
||||||
|
|
||||||
case JSProto_Number:
|
|
||||||
return &NumberObject::class_;
|
|
||||||
case JSProto_Boolean:
|
|
||||||
return &BooleanObject::class_;
|
|
||||||
case JSProto_String:
|
|
||||||
return &StringObject::class_;
|
|
||||||
case JSProto_Symbol:
|
|
||||||
return &SymbolObject::class_;
|
|
||||||
case JSProto_RegExp:
|
|
||||||
return &RegExpObject::class_;
|
|
||||||
|
|
||||||
case JSProto_Int8Array:
|
case JSProto_Int8Array:
|
||||||
case JSProto_Uint8Array:
|
case JSProto_Uint8Array:
|
||||||
case JSProto_Int16Array:
|
case JSProto_Int16Array:
|
||||||
|
@ -748,16 +730,8 @@ inline const Class* GetClassForProtoKey(JSProtoKey key) {
|
||||||
case JSProto_Uint8ClampedArray:
|
case JSProto_Uint8ClampedArray:
|
||||||
return &TypedArrayObject::classes[key - JSProto_Int8Array];
|
return &TypedArrayObject::classes[key - JSProto_Int8Array];
|
||||||
|
|
||||||
case JSProto_ArrayBuffer:
|
|
||||||
return &ArrayBufferObject::class_;
|
|
||||||
|
|
||||||
case JSProto_SharedArrayBuffer:
|
|
||||||
return &SharedArrayBufferObject::class_;
|
|
||||||
|
|
||||||
case JSProto_DataView:
|
|
||||||
return &DataViewObject::class_;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
// We only expect to see plain objects, arrays, and typed arrays here.
|
||||||
MOZ_CRASH("Bad proto key");
|
MOZ_CRASH("Bad proto key");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1764,15 +1738,13 @@ ObjectGroup* ObjectGroupRealm::getStringSplitStringGroup(JSContext* cx) {
|
||||||
// The following code is a specialized version of the code
|
// The following code is a specialized version of the code
|
||||||
// for ObjectGroup::allocationSiteGroup().
|
// for ObjectGroup::allocationSiteGroup().
|
||||||
|
|
||||||
const Class* clasp = GetClassForProtoKey(JSProto_Array);
|
|
||||||
|
|
||||||
JSObject* proto = GlobalObject::getOrCreateArrayPrototype(cx, cx->global());
|
JSObject* proto = GlobalObject::getOrCreateArrayPrototype(cx, cx->global());
|
||||||
if (!proto) {
|
if (!proto) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
|
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
|
||||||
|
|
||||||
group = makeGroup(cx, cx->realm(), clasp, tagged, /* initialFlags = */ 0);
|
group = makeGroup(cx, cx->realm(), &ArrayObject::class_, tagged);
|
||||||
if (!group) {
|
if (!group) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -521,8 +521,6 @@ class ObjectGroup : public gc::TenuredCell {
|
||||||
// Whether to make a singleton object at an allocation site.
|
// Whether to make a singleton object at an allocation site.
|
||||||
static bool useSingletonForAllocationSite(JSScript* script, jsbytecode* pc,
|
static bool useSingletonForAllocationSite(JSScript* script, jsbytecode* pc,
|
||||||
JSProtoKey key);
|
JSProtoKey key);
|
||||||
static bool useSingletonForAllocationSite(JSScript* script, jsbytecode* pc,
|
|
||||||
const Class* clasp);
|
|
||||||
|
|
||||||
// Static accessors for ObjectGroupRealm NewTable.
|
// Static accessors for ObjectGroupRealm NewTable.
|
||||||
|
|
||||||
|
|
|
@ -363,6 +363,14 @@ class TypedArrayObjectTemplate : public TypedArrayObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static TypedArrayObject* newBuiltinClassInstance(JSContext* cx,
|
||||||
|
gc::AllocKind allocKind,
|
||||||
|
NewObjectKind newKind) {
|
||||||
|
JSObject* obj =
|
||||||
|
NewBuiltinClassInstance(cx, instanceClass(), allocKind, newKind);
|
||||||
|
return obj ? &obj->as<TypedArrayObject>() : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
static TypedArrayObject* makeProtoInstance(JSContext* cx, HandleObject proto,
|
static TypedArrayObject* makeProtoInstance(JSContext* cx, HandleObject proto,
|
||||||
gc::AllocKind allocKind) {
|
gc::AllocKind allocKind) {
|
||||||
MOZ_ASSERT(proto);
|
MOZ_ASSERT(proto);
|
||||||
|
@ -375,35 +383,24 @@ class TypedArrayObjectTemplate : public TypedArrayObject {
|
||||||
static TypedArrayObject* makeTypedInstance(JSContext* cx,
|
static TypedArrayObject* makeTypedInstance(JSContext* cx,
|
||||||
CreateSingleton createSingleton,
|
CreateSingleton createSingleton,
|
||||||
gc::AllocKind allocKind) {
|
gc::AllocKind allocKind) {
|
||||||
const Class* clasp = instanceClass();
|
|
||||||
if (createSingleton == CreateSingleton::Yes) {
|
if (createSingleton == CreateSingleton::Yes) {
|
||||||
JSObject* obj =
|
return newBuiltinClassInstance(cx, allocKind, SingletonObject);
|
||||||
NewBuiltinClassInstance(cx, clasp, allocKind, SingletonObject);
|
|
||||||
if (!obj) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
return &obj->as<TypedArrayObject>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
jsbytecode* pc;
|
jsbytecode* pc;
|
||||||
RootedScript script(cx, cx->currentScript(&pc));
|
RootedScript script(cx, cx->currentScript(&pc));
|
||||||
NewObjectKind newKind = GenericObject;
|
Rooted<TypedArrayObject*> obj(
|
||||||
if (script &&
|
cx, newBuiltinClassInstance(cx, allocKind, GenericObject));
|
||||||
ObjectGroup::useSingletonForAllocationSite(script, pc, clasp)) {
|
|
||||||
newKind = SingletonObject;
|
|
||||||
}
|
|
||||||
RootedObject obj(cx,
|
|
||||||
NewBuiltinClassInstance(cx, clasp, allocKind, newKind));
|
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (script && !ObjectGroup::setAllocationSiteObjectGroup(
|
if (script && !ObjectGroup::setAllocationSiteObjectGroup(
|
||||||
cx, script, pc, obj, newKind == SingletonObject)) {
|
cx, script, pc, obj, /* singleton = */ false)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &obj->as<TypedArrayObject>();
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
static TypedArrayObject* makeInstance(
|
static TypedArrayObject* makeInstance(
|
||||||
|
@ -421,8 +418,7 @@ class TypedArrayObjectTemplate : public TypedArrayObject {
|
||||||
// it isn't, we can do some more TI optimizations.
|
// it isn't, we can do some more TI optimizations.
|
||||||
RootedObject checkProto(cx);
|
RootedObject checkProto(cx);
|
||||||
if (proto) {
|
if (proto) {
|
||||||
checkProto = GlobalObject::getOrCreatePrototype(
|
checkProto = GlobalObject::getOrCreatePrototype(cx, protoKey());
|
||||||
cx, JSCLASS_CACHED_PROTO_KEY(instanceClass()));
|
|
||||||
if (!checkProto) {
|
if (!checkProto) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -447,25 +443,19 @@ class TypedArrayObjectTemplate : public TypedArrayObject {
|
||||||
size_t nbytes;
|
size_t nbytes;
|
||||||
MOZ_ALWAYS_TRUE(CalculateAllocSize<NativeType>(len, &nbytes));
|
MOZ_ALWAYS_TRUE(CalculateAllocSize<NativeType>(len, &nbytes));
|
||||||
MOZ_ASSERT(nbytes < TypedArrayObject::SINGLETON_BYTE_LENGTH);
|
MOZ_ASSERT(nbytes < TypedArrayObject::SINGLETON_BYTE_LENGTH);
|
||||||
NewObjectKind newKind = TenuredObject;
|
|
||||||
bool fitsInline = nbytes <= INLINE_BUFFER_LIMIT;
|
bool fitsInline = nbytes <= INLINE_BUFFER_LIMIT;
|
||||||
const Class* clasp = instanceClass();
|
gc::AllocKind allocKind = !fitsInline ? gc::GetGCObjectKind(instanceClass())
|
||||||
gc::AllocKind allocKind = !fitsInline ? gc::GetGCObjectKind(clasp)
|
|
||||||
: AllocKindForLazyBuffer(nbytes);
|
: AllocKindForLazyBuffer(nbytes);
|
||||||
|
|
||||||
AutoSetNewObjectMetadata metadata(cx);
|
AutoSetNewObjectMetadata metadata(cx);
|
||||||
jsbytecode* pc;
|
jsbytecode* pc;
|
||||||
RootedScript script(cx, cx->currentScript(&pc));
|
RootedScript script(cx, cx->currentScript(&pc));
|
||||||
if (script &&
|
Rooted<TypedArrayObject*> tarray(
|
||||||
ObjectGroup::useSingletonForAllocationSite(script, pc, clasp)) {
|
cx, newBuiltinClassInstance(cx, allocKind, TenuredObject));
|
||||||
newKind = SingletonObject;
|
if (!tarray) {
|
||||||
}
|
|
||||||
JSObject* tmp = NewBuiltinClassInstance(cx, clasp, allocKind, newKind);
|
|
||||||
if (!tmp) {
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rooted<TypedArrayObject*> tarray(cx, &tmp->as<TypedArrayObject>());
|
|
||||||
initTypedArraySlots(tarray, len);
|
initTypedArraySlots(tarray, len);
|
||||||
|
|
||||||
// Template objects do not need memory for its elements, since there
|
// Template objects do not need memory for its elements, since there
|
||||||
|
@ -474,7 +464,7 @@ class TypedArrayObjectTemplate : public TypedArrayObject {
|
||||||
tarray->initPrivate(nullptr);
|
tarray->initPrivate(nullptr);
|
||||||
|
|
||||||
if (script && !ObjectGroup::setAllocationSiteObjectGroup(
|
if (script && !ObjectGroup::setAllocationSiteObjectGroup(
|
||||||
cx, script, pc, tarray, newKind == SingletonObject)) {
|
cx, script, pc, tarray, /* singleton = */ false)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -787,8 +777,7 @@ class TypedArrayObjectTemplate : public TypedArrayObject {
|
||||||
// this compartment.
|
// this compartment.
|
||||||
RootedObject protoRoot(cx, proto);
|
RootedObject protoRoot(cx, proto);
|
||||||
if (!protoRoot) {
|
if (!protoRoot) {
|
||||||
protoRoot = GlobalObject::getOrCreatePrototype(
|
protoRoot = GlobalObject::getOrCreatePrototype(cx, protoKey());
|
||||||
cx, JSCLASS_CACHED_PROTO_KEY(instanceClass()));
|
|
||||||
if (!protoRoot) {
|
if (!protoRoot) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1462,9 +1462,7 @@ bool js::TryConvertToUnboxedLayout(JSContext* cx, AutoEnterAnalysis& enter,
|
||||||
size_t layoutSize = 0;
|
size_t layoutSize = 0;
|
||||||
if (objectCount <= 1) {
|
if (objectCount <= 1) {
|
||||||
// If only one of the objects has been created, it is more likely
|
// If only one of the objects has been created, it is more likely
|
||||||
// to have new properties added later. This heuristic is not used
|
// to have new properties added later.
|
||||||
// for array objects, where we might want an unboxed representation
|
|
||||||
// even if there is only one large array.
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10115,6 +10115,12 @@ void nsIPresShell::SetVisualViewportSize(nscoord aWidth, nscoord aHeight) {
|
||||||
if (auto* window = nsGlobalWindowInner::Cast(mDocument->GetInnerWindow())) {
|
if (auto* window = nsGlobalWindowInner::Cast(mDocument->GetInnerWindow())) {
|
||||||
window->VisualViewport()->PostResizeEvent();
|
window->VisualViewport()->PostResizeEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nsIScrollableFrame* rootScrollFrame =
|
||||||
|
GetRootScrollFrameAsScrollable()) {
|
||||||
|
ScrollAnchorContainer* container = rootScrollFrame->GetAnchor();
|
||||||
|
container->UserScrolled();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10130,6 +10136,12 @@ bool nsIPresShell::SetVisualViewportOffset(
|
||||||
window->VisualViewport()->PostScrollEvent(prevOffset,
|
window->VisualViewport()->PostScrollEvent(prevOffset,
|
||||||
aPrevLayoutScrollPos);
|
aPrevLayoutScrollPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nsIScrollableFrame* rootScrollFrame =
|
||||||
|
GetRootScrollFrameAsScrollable()) {
|
||||||
|
ScrollAnchorContainer* container = rootScrollFrame->GetAnchor();
|
||||||
|
container->UserScrolled();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return didChange;
|
return didChange;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "GeckoProfiler.h"
|
#include "GeckoProfiler.h"
|
||||||
#include "mozilla/dom/Text.h"
|
#include "mozilla/dom/Text.h"
|
||||||
#include "mozilla/StaticPrefs.h"
|
#include "mozilla/StaticPrefs.h"
|
||||||
|
#include "mozilla/ToString.h"
|
||||||
#include "nsGfxScrollFrame.h"
|
#include "nsGfxScrollFrame.h"
|
||||||
#include "nsLayoutUtils.h"
|
#include "nsLayoutUtils.h"
|
||||||
|
|
||||||
|
@ -163,9 +164,9 @@ void ScrollAnchorContainer::SelectAnchor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
AUTO_PROFILER_LABEL("ScrollAnchorContainer::SelectAnchor", LAYOUT);
|
AUTO_PROFILER_LABEL("ScrollAnchorContainer::SelectAnchor", LAYOUT);
|
||||||
ANCHOR_LOG("Selecting anchor for %p with scroll-port [%d %d x %d %d].\n",
|
ANCHOR_LOG(
|
||||||
this, mScrollFrame->mScrollPort.x, mScrollFrame->mScrollPort.y,
|
"Selecting anchor for %p with scroll-port=%s.\n", this,
|
||||||
mScrollFrame->mScrollPort.width, mScrollFrame->mScrollPort.height);
|
mozilla::ToString(mScrollFrame->GetVisualOptimalViewingRect()).c_str());
|
||||||
|
|
||||||
const nsStyleDisplay* disp = Frame()->StyleDisplay();
|
const nsStyleDisplay* disp = Frame()->StyleDisplay();
|
||||||
|
|
||||||
|
@ -436,7 +437,8 @@ ScrollAnchorContainer::ExamineAnchorCandidate(nsIFrame* aFrame) const {
|
||||||
//
|
//
|
||||||
// [1] https://github.com/w3c/csswg-drafts/issues/3483
|
// [1] https://github.com/w3c/csswg-drafts/issues/3483
|
||||||
nsRect visibleRect;
|
nsRect visibleRect;
|
||||||
if (!visibleRect.IntersectRect(rect, mScrollFrame->mScrollPort)) {
|
if (!visibleRect.IntersectRect(rect,
|
||||||
|
mScrollFrame->GetVisualOptimalViewingRect())) {
|
||||||
return ExamineResult::Exclude;
|
return ExamineResult::Exclude;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3983,6 +3983,17 @@ nsPoint ScrollFrameHelper::GetVisualViewportOffset() const {
|
||||||
return GetScrollPosition();
|
return GetScrollPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsRect ScrollFrameHelper::GetVisualOptimalViewingRect() const {
|
||||||
|
nsIPresShell* presShell = mOuter->PresShell();
|
||||||
|
|
||||||
|
if (mIsRoot && presShell->IsVisualViewportSizeSet() &&
|
||||||
|
presShell->IsVisualViewportOffsetSet()) {
|
||||||
|
return nsRect(presShell->GetVisualViewportOffset(),
|
||||||
|
presShell->GetVisualViewportSize());
|
||||||
|
}
|
||||||
|
return mScrollPort;
|
||||||
|
}
|
||||||
|
|
||||||
static void AdjustForWholeDelta(int32_t aDelta, nscoord* aCoord) {
|
static void AdjustForWholeDelta(int32_t aDelta, nscoord* aCoord) {
|
||||||
if (aDelta < 0) {
|
if (aDelta < 0) {
|
||||||
*aCoord = nscoord_MIN;
|
*aCoord = nscoord_MIN;
|
||||||
|
|
|
@ -220,6 +220,15 @@ class ScrollFrameHelper : public nsIReflowCallback {
|
||||||
nsRect GetScrollRange(nscoord aWidth, nscoord aHeight) const;
|
nsRect GetScrollRange(nscoord aWidth, nscoord aHeight) const;
|
||||||
nsSize GetVisualViewportSize() const;
|
nsSize GetVisualViewportSize() const;
|
||||||
nsPoint GetVisualViewportOffset() const;
|
nsPoint GetVisualViewportOffset() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the 'optimal viewing region' [1] as a rect suitable for use by
|
||||||
|
* scroll anchoring.
|
||||||
|
*
|
||||||
|
* [1] https://drafts.csswg.org/css-scroll-snap-1/#optimal-viewing-region
|
||||||
|
*/
|
||||||
|
nsRect GetVisualOptimalViewingRect() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For LTR frames, this is the same as GetVisualViewportOffset().
|
* For LTR frames, this is the same as GetVisualViewportOffset().
|
||||||
* For RTL frames, we take the offset from the top right corner of the frame
|
* For RTL frames, we take the offset from the top right corner of the frame
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "nsIChannel.h"
|
#include "nsIChannel.h"
|
||||||
#include "nsIURI.h"
|
#include "nsIURI.h"
|
||||||
|
#include "nsProxyRelease.h"
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace net {
|
namespace net {
|
||||||
|
@ -84,7 +85,14 @@ TrackingDummyChannel::TrackingDummyChannel(nsIURI* aURI, nsIURI* aTopWindowURI,
|
||||||
SetLoadInfo(aLoadInfo);
|
SetLoadInfo(aLoadInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackingDummyChannel::~TrackingDummyChannel() = default;
|
TrackingDummyChannel::~TrackingDummyChannel() {
|
||||||
|
NS_ReleaseOnMainThreadSystemGroup("TrackingDummyChannel::mLoadInfo",
|
||||||
|
mLoadInfo.forget());
|
||||||
|
NS_ReleaseOnMainThreadSystemGroup("TrackingDummyChannel::mURI",
|
||||||
|
mURI.forget());
|
||||||
|
NS_ReleaseOnMainThreadSystemGroup("TrackingDummyChannel::mTopWindowURI",
|
||||||
|
mTopWindowURI.forget());
|
||||||
|
}
|
||||||
|
|
||||||
bool TrackingDummyChannel::IsTrackingResource() const {
|
bool TrackingDummyChannel::IsTrackingResource() const {
|
||||||
return mIsTrackingResource;
|
return mIsTrackingResource;
|
||||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -37,6 +37,7 @@ class StructuredOutputParser(OutputParser):
|
||||||
|
|
||||||
tbpl_compact = kwargs.pop("log_compact", False)
|
tbpl_compact = kwargs.pop("log_compact", False)
|
||||||
super(StructuredOutputParser, self).__init__(**kwargs)
|
super(StructuredOutputParser, self).__init__(**kwargs)
|
||||||
|
self.allow_crashes = kwargs.pop("allow_crashes", False)
|
||||||
|
|
||||||
mozlog = self._get_mozlog_module()
|
mozlog = self._get_mozlog_module()
|
||||||
self.formatter = mozlog.formatters.TbplFormatter(compact=tbpl_compact)
|
self.formatter = mozlog.formatters.TbplFormatter(compact=tbpl_compact)
|
||||||
|
@ -46,6 +47,7 @@ class StructuredOutputParser(OutputParser):
|
||||||
self.worst_log_level = INFO
|
self.worst_log_level = INFO
|
||||||
self.tbpl_status = TBPL_SUCCESS
|
self.tbpl_status = TBPL_SUCCESS
|
||||||
self.harness_retry_re = TinderBoxPrintRe['harness_error']['retry_regex']
|
self.harness_retry_re = TinderBoxPrintRe['harness_error']['retry_regex']
|
||||||
|
self.prev_was_unstructured = False
|
||||||
|
|
||||||
def _get_mozlog_module(self):
|
def _get_mozlog_module(self):
|
||||||
try:
|
try:
|
||||||
|
@ -78,13 +80,19 @@ class StructuredOutputParser(OutputParser):
|
||||||
|
|
||||||
if data is None:
|
if data is None:
|
||||||
if self.strict:
|
if self.strict:
|
||||||
self.critical(("Test harness output was not a valid structured log message: "
|
if not self.prev_was_unstructured:
|
||||||
"\n%s") % line)
|
self.critical(("Test harness output was not a valid structured log message: "
|
||||||
|
"\n%s") % line)
|
||||||
|
else:
|
||||||
|
self.critical(line)
|
||||||
self.update_levels(TBPL_FAILURE, log.CRITICAL)
|
self.update_levels(TBPL_FAILURE, log.CRITICAL)
|
||||||
|
self.prev_was_unstructured = True
|
||||||
else:
|
else:
|
||||||
self._handle_unstructured_output(line)
|
self._handle_unstructured_output(line)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
self.prev_was_unstructured = False
|
||||||
|
|
||||||
self.handler(data)
|
self.handler(data)
|
||||||
|
|
||||||
action = data["action"]
|
action = data["action"]
|
||||||
|
@ -172,13 +180,24 @@ class StructuredOutputParser(OutputParser):
|
||||||
|
|
||||||
# These are warning/orange statuses.
|
# These are warning/orange statuses.
|
||||||
failure_conditions = [
|
failure_conditions = [
|
||||||
sum(summary.unexpected_statuses.values()) > 0,
|
(sum(summary.unexpected_statuses.values()), 0, "statuses", False),
|
||||||
summary.action_counts.get('crash', 0) > summary.expected_statuses.get('CRASH', 0),
|
(summary.action_counts.get('crash', 0),
|
||||||
summary.action_counts.get('valgrind_error', 0) > 0
|
summary.expected_statuses.get('CRASH', 0), "crashes", self.allow_crashes),
|
||||||
|
(summary.action_counts.get('valgrind_error', 0), 0,
|
||||||
|
"valgrind errors", False)
|
||||||
]
|
]
|
||||||
for condition in failure_conditions:
|
for value, limit, type_name, allow in failure_conditions:
|
||||||
if condition:
|
if value > limit:
|
||||||
self.update_levels(*fail_pair)
|
msg = "%d unexpected %s" % (value, type_name)
|
||||||
|
if limit != 0:
|
||||||
|
msg += " expected at most %d" % (limit)
|
||||||
|
if not allow:
|
||||||
|
self.update_levels(*fail_pair)
|
||||||
|
msg = "Got " + msg
|
||||||
|
self.error(msg)
|
||||||
|
else:
|
||||||
|
msg = "Ignored " + msg
|
||||||
|
self.warning(msg)
|
||||||
|
|
||||||
# These are error/red statuses. A message is output here every time something
|
# These are error/red statuses. A message is output here every time something
|
||||||
# wouldn't otherwise be highlighted in the UI.
|
# wouldn't otherwise be highlighted in the UI.
|
||||||
|
|
|
@ -342,7 +342,8 @@ class WebPlatformTest(TestingMixin, MercurialScript, CodeCoverageMixin, AndroidM
|
||||||
parser = StructuredOutputParser(config=self.config,
|
parser = StructuredOutputParser(config=self.config,
|
||||||
log_obj=self.log_obj,
|
log_obj=self.log_obj,
|
||||||
log_compact=True,
|
log_compact=True,
|
||||||
error_list=BaseErrorList + HarnessErrorList)
|
error_list=BaseErrorList + HarnessErrorList,
|
||||||
|
allow_crashes=True)
|
||||||
|
|
||||||
env = {'MINIDUMP_SAVE_PATH': dirs['abs_blob_upload_dir']}
|
env = {'MINIDUMP_SAVE_PATH': dirs['abs_blob_upload_dir']}
|
||||||
env['RUST_BACKTRACE'] = 'full'
|
env['RUST_BACKTRACE'] = 'full'
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
[2d.text.draw.fontface.notinpage.html]
|
[2d.text.draw.fontface.notinpage.html]
|
||||||
disabled:
|
disabled:
|
||||||
if verify: fails in verify mode
|
if verify: fails in verify mode
|
||||||
|
if debug: true
|
||||||
|
[@font-face fonts should work even if they are not used in the page]
|
||||||
|
expected:
|
||||||
|
if os == "android": PASS
|
||||||
|
FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[multi-global-origin-serialization.sub.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
[idbfactory_open4.htm]
|
||||||
|
disabled: true
|
||||||
|
[IDBFactory.open() - new database has default version]
|
||||||
|
expected:
|
||||||
|
if not debug and not webrender and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[transaction-lifecycle.htm]
|
||||||
|
disabled: Bug 1519865
|
|
@ -0,0 +1,2 @@
|
||||||
|
[transaction-lifetime.htm]
|
||||||
|
disabled: Bug 1519865
|
|
@ -1,3 +1,8 @@
|
||||||
[storage-smoke-test.tentative.https.html]
|
[storage-smoke-test.tentative.https.html]
|
||||||
expected:
|
expected:
|
||||||
TIMEOUT
|
if (os == "linux") and debug and not webrender: TIMEOUT
|
||||||
|
if (os == "linux") and debug and webrender: TIMEOUT
|
||||||
|
if (os == "linux") and not debug: TIMEOUT
|
||||||
|
if os == "win": TIMEOUT
|
||||||
|
if os == "android": TIMEOUT
|
||||||
|
if os == "mac": TIMEOUT
|
||||||
|
|
|
@ -6,3 +6,6 @@
|
||||||
[filesystem-urls-do-not-match-self]
|
[filesystem-urls-do-not-match-self]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Expecting logs: ["violated-directive=script-src-elem"\]]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
[list-style-021.xht]
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
[computed-style-animation-parsing.html]
|
||||||
|
[Test an animation name that is the same as a possible animation fill-mode.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test an animation name that is the same as a possible running state.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test a non-conflicting animation name.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test an animation name that is the same as a possible animation direction.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[contain-layout-baseline-005.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,5 @@
|
||||||
|
[documentElement-clientWidth-on-minimum-scale-size.tentative.html]
|
||||||
|
[documentElement clientWidth should be equal to device-width even if overflow:hidden region is visible]
|
||||||
|
expected:
|
||||||
|
if (os == "android"): FAIL
|
||||||
|
|
|
@ -7,4 +7,3 @@
|
||||||
if not debug and not webrender and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
|
if not debug and not webrender and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
|
||||||
if debug and e10s and (os == "win") and (version == "10.0.15063") and (processor == "x86_64") and (bits == 64): FAIL
|
if debug and e10s and (os == "win") and (version == "10.0.15063") and (processor == "x86_64") and (bits == 64): FAIL
|
||||||
if not debug and e10s and (os == "win") and (version == "10.0.15063") and (processor == "x86_64") and (bits == 64): FAIL
|
if not debug and e10s and (os == "win") and (version == "10.0.15063") and (processor == "x86_64") and (bits == 64): FAIL
|
||||||
if os == "android": FAIL
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
leak-threshold: [tab:409600]
|
|
@ -10,3 +10,4 @@
|
||||||
[Test that inset-block shorthand sets longhands and serializes correctly.]
|
[Test that inset-block shorthand sets longhands and serializes correctly.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=137688
|
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=137688
|
||||||
|
|
||||||
|
|
|
@ -8,3 +8,8 @@
|
||||||
[FFE0 FULLWIDTH CENT SIGN may appear at line start if ja and loose]
|
[FFE0 FULLWIDTH CENT SIGN may appear at line start if ja and loose]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[2035 REVERSED PRIME may appear at line start if ja and loose]
|
||||||
|
expected:
|
||||||
|
if debug and not webrender and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
|
||||||
|
if not debug and not webrender and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
[available-size-006.html]
|
[available-size-006.html]
|
||||||
expected: FAIL
|
expected:
|
||||||
|
if not debug and not webrender and not e10s and (os == "android") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): PASS
|
||||||
|
FAIL
|
||||||
disabled:
|
disabled:
|
||||||
if os == "android": https://github.com/web-platform-tests/wpt/issues/14933
|
if os == "android": https://github.com/web-platform-tests/wpt/issues/14933
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
[available-size-007.html]
|
[available-size-007.html]
|
||||||
expected: FAIL
|
expected:
|
||||||
|
if not debug and not webrender and not e10s and (os == "android") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): PASS
|
||||||
|
FAIL
|
||||||
disabled:
|
disabled:
|
||||||
if os == "android": https://github.com/web-platform-tests/wpt/issues/14933
|
if os == "android": https://github.com/web-platform-tests/wpt/issues/14933
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
[available-size-008.html]
|
[available-size-008.html]
|
||||||
expected: FAIL
|
expected:
|
||||||
|
if not debug and not webrender and not e10s and (os == "android") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): PASS
|
||||||
|
FAIL
|
||||||
disabled:
|
disabled:
|
||||||
if os == "android": https://github.com/web-platform-tests/wpt/issues/14933
|
if os == "android": https://github.com/web-platform-tests/wpt/issues/14933
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
[available-size-015.html]
|
[available-size-015.html]
|
||||||
expected: FAIL
|
expected:
|
||||||
|
if not debug and not webrender and not e10s and (os == "android") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): PASS
|
||||||
|
FAIL
|
||||||
disabled:
|
disabled:
|
||||||
if os == "android": https://github.com/web-platform-tests/wpt/issues/14933
|
if os == "android": https://github.com/web-platform-tests/wpt/issues/14933
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
[available-size-019.html]
|
[available-size-019.html]
|
||||||
expected: FAIL
|
expected:
|
||||||
|
if not debug and not webrender and not e10s and (os == "android") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): PASS
|
||||||
|
FAIL
|
||||||
disabled:
|
disabled:
|
||||||
if os == "android": https://github.com/web-platform-tests/wpt/issues/14933
|
if os == "android": https://github.com/web-platform-tests/wpt/issues/14933
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
[text-orientation-script-001.html]
|
[text-orientation-script-001.html]
|
||||||
|
disabled:
|
||||||
|
if os == "mac": true
|
||||||
[Default orientation for vo=R]
|
[Default orientation for vo=R]
|
||||||
expected:
|
expected:
|
||||||
if debug and not webrender and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
|
if debug and not webrender and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
|
||||||
|
|
|
@ -2,3 +2,7 @@
|
||||||
[BODY element scroll-behavior should not propagate to viewport]
|
[BODY element scroll-behavior should not propagate to viewport]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Smooth scrolling while doing history navigation.]
|
||||||
|
expected:
|
||||||
|
if os == "android": FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
[CSSStyleSheet-constructable.html]
|
||||||
|
[Constructed stylesheet can be used and modified in multiple TreeScopes]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSSStyleSheet.replaceSync throws exception when there is import rule inside]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Constructed style sheets can be applied on document]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Adding non-constructed stylesheet to AdoptedStyleSheets is not allowed when the owner document of the stylesheet and the AdoptedStyleSheets are in different document trees]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSSStyleSheet.replaceSync replaces stylesheet text synchronously]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Adding non-constructed stylesheet to AdoptedStyleSheets is not allowed when the owner document of the stylesheet is in the same document tree as the AdoptedStyleSheets]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Stylesheets constructed on the main Document cannot be used in iframes]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSSStyleSheet.replace allows import rule inside]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Constructed style sheets can be applied on shadow root]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Changes to constructed stylesheets through CSSOM is reflected]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Stylesheet constructed on iframe cannot be used in the main Document]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSSStyleSheet.replace produces Promise<CSSStyleSheet>]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[document.adoptedStyleSheets should initially have length 0.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Inserting an @import rule through insertRule on a constructed stylesheet throws an exception]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSSStyleSheet.replace returns rejected promise on failed imports]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[new CSSStyleSheet produces empty CSSStyleSheet]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Adopting a shadow host will move adoptedStyleSheets but it is not applied]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Cloning a shadow host will not clone shadow root, and also adoptedStyleSheets]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Importing a shadow host will not copy shadow root, and also adoptedStyleSheets]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -2,3 +2,6 @@
|
||||||
[Origin-clean check in cross-origin CSSOM Stylesheets (redirect from cross-origin to same-origin)]
|
[Origin-clean check in cross-origin CSSOM Stylesheets (redirect from cross-origin to same-origin)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Origin-clean check in loading error CSSOM Stylesheets]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -3,5 +3,10 @@
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Programmatic focus after click should not match :focus-visible]
|
[Programmatic focus after click should not match :focus-visible]
|
||||||
expected: FAIL
|
expected:
|
||||||
|
if debug and not webrender and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
|
||||||
|
if debug and not webrender and e10s and (os == "win") and (version == "10.0.15063") and (processor == "x86_64") and (bits == 64): PASS
|
||||||
|
if not debug and not webrender and e10s and (os == "win") and (version == "10.0.15063") and (processor == "x86_64") and (bits == 64): PASS
|
||||||
|
if not debug and not webrender and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
|
||||||
|
FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
[flexbox-justify-content-horiz-001b.xhtml]
|
[flexbox-justify-content-horiz-001b.xhtml]
|
||||||
expected: FAIL
|
expected:
|
||||||
|
if not debug and not webrender and not e10s and (os == "android") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): PASS
|
||||||
|
FAIL
|
||||||
disabled:
|
disabled:
|
||||||
if os == "android": https://github.com/web-platform-tests/wpt/pull/14965
|
if os == "android": https://github.com/web-platform-tests/wpt/pull/14965
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
[box-sizing-replaced-003.xht]
|
[box-sizing-replaced-003.xht]
|
||||||
disabled:
|
disabled:
|
||||||
if (os == "mac"): https://bugzilla.mozilla.org/show_bug.cgi?id=1383454
|
if os == "mac": https://bugzilla.mozilla.org/show_bug.cgi?id=1383454
|
||||||
|
|
|
@ -725,6 +725,9 @@
|
||||||
[[["delete",""\]\] "<div style=white-space:pre>foo [\]bar</div>" compare innerHTML]
|
[[["delete",""\]\] "<div style=white-space:pre>foo [\]bar</div>" compare innerHTML]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[delete - HTML editing conformance tests]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[delete.html?6001-last]
|
[delete.html?6001-last]
|
||||||
[[["delete",""\]\] "<ol><li>fo[o</ol><ol><li>b\]ar</ol>" compare innerHTML]
|
[[["delete",""\]\] "<ol><li>fo[o</ol><ol><li>b\]ar</ol>" compare innerHTML]
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
[euckr-encode-form-csksc56011987.html?15001-16000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?6001-7000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?5001-6000]
|
||||||
|
[csksc56011987 encoding (form)]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?2001-3000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?12001-13000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?14001-15000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?11001-12000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?8001-9000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?1-1000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?10001-11000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?3001-4000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?7001-8000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?13001-14000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?9001-10000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?1001-2000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?4001-5000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?16001-17000]
|
||||||
|
|
||||||
|
[euckr-encode-form-csksc56011987.html?17001-last]
|
|
@ -0,0 +1,38 @@
|
||||||
|
[euckr-encode-form-korean.html?13001-14000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?17001-last]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?15001-16000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?1001-2000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?12001-13000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?1-1000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?11001-12000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?5001-6000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?2001-3000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?7001-8000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?9001-10000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?16001-17000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?10001-11000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?3001-4000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?4001-5000]
|
||||||
|
[korean encoding (form)]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?8001-9000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?14001-15000]
|
||||||
|
|
||||||
|
[euckr-encode-form-korean.html?6001-7000]
|
|
@ -1,2 +0,0 @@
|
||||||
[eventsource-constructor-document-domain.htm]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -1,4 +1,6 @@
|
||||||
[layout-animations-disabled-tentative.html]
|
[layout-animations-disabled-tentative.html]
|
||||||
|
disabled:
|
||||||
|
if os == "linux" and webrender: true
|
||||||
[Verify that animations which are not affected by the policy run as expected.]
|
[Verify that animations which are not affected by the policy run as expected.]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,11 @@
|
||||||
[layout-animations-disabled-violation-report-js-tentative.html]
|
[layout-animations-disabled-violation-report-js-tentative.html]
|
||||||
expected: TIMEOUT
|
expected:
|
||||||
|
if (os == "linux") and not debug and not webrender: TIMEOUT
|
||||||
|
if (os == "linux") and not debug and webrender: TIMEOUT
|
||||||
|
if (os == "linux") and debug: TIMEOUT
|
||||||
|
if os == "win": TIMEOUT
|
||||||
|
if os == "android": TIMEOUT
|
||||||
|
if os == "mac": TIMEOUT
|
||||||
[layout-animations-disabled-violation-report-js-tentative]
|
[layout-animations-disabled-violation-report-js-tentative]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
leak-threshold: [default:51200]
|
|
@ -1,2 +1,3 @@
|
||||||
prefs: [javascript.options.streams:true]
|
prefs: [javascript.options.streams:true]
|
||||||
lsan-allowed: [mozilla::dom::FetchStream::Create, mozilla::dom::WorkerPrivate::WorkerPrivate, nsSegmentedBuffer::AppendNewSegment]
|
lsan-allowed: [NS_NewInputStreamReadyEvent, mozilla::dom::FetchStream::Create, mozilla::dom::WorkerPrivate::WorkerPrivate, nsSegmentedBuffer::AppendNewSegment]
|
||||||
|
leak-threshold: [default:51200]
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
lsan-allowed: [Alloc, Create, EntrySlotOrCreate, FetchDriverObserver, Malloc, NewPage, Realloc, alloc_system::platform::_$LT$impl$u20$core..alloc..GlobalAlloc$u20$for$u20$alloc_system..System$GT$::alloc, alloc_system::platform::_$LT$impl$u20$core..alloc..GlobalAlloc$u20$for$u20$alloc_system..System$GT$::realloc, mozilla::SchedulerGroup::CreateEventTargetFor, mozilla::ThrottledEventQueue::Create, mozilla::dom::ChromeUtils::GenerateQI, mozilla::dom::InternalRequest::GetRequestConstructorCopy, mozilla::dom::Performance::CreateForMainThread, mozilla::dom::PerformanceMainThread::CreateNavigationTimingEntry, mozilla::dom::PerformanceStorageWorker::Create, mozilla::dom::PromiseWorkerProxy::Create, mozilla::dom::WorkerCSPEventListener::Create, mozilla::dom::WorkerFetchResolver::Create, mozilla::net::nsStandardURL::TemplatedMutator]
|
||||||
|
leak-threshold: [tab:307200]
|
|
@ -11,3 +11,12 @@
|
||||||
["no-cors" Headers object cannot have content-language set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
|
["no-cors" Headers object cannot have content-language set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
["no-cors" Headers object cannot have content-language set to , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["no-cors" Headers object cannot have accept-language set to , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["no-cors" Headers object cannot have accept set to , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
lsan-allowed: [Alloc, DoCORSChecks, EntrySlotOrCreate, MakeUnique, Malloc, NewChannelFromURIWithProxyFlagsInternal, NewEmptyScopeData, Realloc, __rdl_alloc, __rdl_realloc, js_new, js_pod_calloc, js_pod_malloc, js_pod_realloc, mozilla::dom::ChromeUtils::GenerateQI, mozilla::dom::FetchDriver::Fetch, mozilla::dom::FetchRequest, mozilla::dom::InternalRequest::GetRequestConstructorCopy, mozilla::dom::Performance::CreateForMainThread, mozilla::net::HttpBaseChannel::HttpBaseChannel, mozilla::net::HttpChannelChild::HttpChannelChild, mozilla::net::nsHttpHandler::NewProxiedChannel2, mozilla::net::nsStandardURL::TemplatedMutator]
|
||||||
|
leak-threshold: [tab:768000]
|
|
@ -0,0 +1 @@
|
||||||
|
leak-threshold: [default:307200]
|
|
@ -1,6 +1,7 @@
|
||||||
[script-resource-with-json-parser-breaker.tentative.sub.html]
|
[script-resource-with-json-parser-breaker.tentative.sub.html]
|
||||||
disabled:
|
disabled:
|
||||||
if os == "android": https://bugzilla.mozilla.org/show_bug.cgi?id=1499003
|
if os == "android": https://bugzilla.mozilla.org/show_bug.cgi?id=1499003
|
||||||
|
expected: ERROR
|
||||||
[CORB-blocks 'application/pdf' that starts with the following JSON parser breaker: {} &&]
|
[CORB-blocks 'application/pdf' that starts with the following JSON parser breaker: {} &&]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,2 @@
|
||||||
[prompt-and-unload-script-closeable.html]
|
[prompt-and-unload-script-closeable.html]
|
||||||
disabled:
|
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1519417
|
||||||
if os == "android": https://bugzilla.mozilla.org/show_bug.cgi?id=1499003
|
|
||||||
expected:
|
|
||||||
if os == "android": CRASH
|
|
||||||
ERROR
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[location-prototype-setting-same-origin-domain.sub.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -0,0 +1 @@
|
||||||
|
lsan-allowed: [Alloc, alloc_system::platform::_$LT$impl$u20$core..alloc..GlobalAlloc$u20$for$u20$alloc_system..System$GT$::alloc, alloc_system::platform::_$LT$impl$u20$core..alloc..GlobalAlloc$u20$for$u20$alloc_system..System$GT$::realloc, mozilla::dom::ChromeUtils::GenerateQI]
|
|
@ -1,2 +0,0 @@
|
||||||
[document_domain_feature_policy.tentative.sub.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -1,5 +1,4 @@
|
||||||
[sandboxed-document_domain.html]
|
[sandboxed-document_domain.html]
|
||||||
expected: TIMEOUT
|
|
||||||
[Sandboxed document.domain 1]
|
[Sandboxed document.domain 1]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,13 @@
|
||||||
[no_window_open_when_term_nesting_level_nonzero.window.html]
|
[no_window_open_when_term_nesting_level_nonzero.window.html]
|
||||||
expected:
|
expected: ERROR
|
||||||
if not debug and webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): TIMEOUT
|
|
||||||
ERROR
|
|
||||||
[no popups from synchronously reachable window]
|
[no popups from synchronously reachable window]
|
||||||
expected: FAIL
|
expected:
|
||||||
|
if not debug and webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): TIMEOUT
|
||||||
|
FAIL
|
||||||
|
|
||||||
[no popups with frame navigation]
|
[no popups with frame navigation]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[no popups from another synchronously reachable window]
|
[no popups from another synchronously reachable window]
|
||||||
expected:
|
expected: FAIL
|
||||||
if not debug and webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): TIMEOUT
|
|
||||||
FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[windowproxy-prototype-setting-same-origin-domain.sub.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -1,3 +1,3 @@
|
||||||
[opener-setter.html]
|
[opener-setter.html]
|
||||||
disabled:
|
disabled:
|
||||||
if os == 'linux' and bits == 32 and debug: https://bugzilla.mozilla.org/show_bug.cgi?id=1483696
|
if (os == "linux") and (bits == 32) and debug: https://bugzilla.mozilla.org/show_bug.cgi?id=1483696
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[window-domain-success.sub.html]
|
[window-domain-success.sub.html]
|
||||||
expected: TIMEOUT
|
|
||||||
[postMessaging to a same-origin-domain (but not same-origin) iframe allows them to see each others' modifications]
|
[postMessaging to a same-origin-domain (but not same-origin) iframe allows them to see each others' modifications]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[window-similar-but-cross-origin-success.sub.html]
|
[window-similar-but-cross-origin-success.sub.html]
|
||||||
expected: TIMEOUT
|
|
||||||
[postMessaging to a not same-origin-domain, but similar origin, iframe allows them to see each others' modifications]
|
[postMessaging to a not same-origin-domain, but similar origin, iframe allows them to see each others' modifications]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -2,3 +2,19 @@
|
||||||
[fieldset default style]
|
[fieldset default style]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[border-left-color]
|
||||||
|
expected:
|
||||||
|
if (os == "win") or (os == "mac"): FAIL
|
||||||
|
|
||||||
|
[border-top-color]
|
||||||
|
expected:
|
||||||
|
if (os == "win") or (os == "mac"): FAIL
|
||||||
|
|
||||||
|
[border-bottom-color]
|
||||||
|
expected:
|
||||||
|
if (os == "win") or (os == "mac"): FAIL
|
||||||
|
|
||||||
|
[border-right-color]
|
||||||
|
expected:
|
||||||
|
if (os == "win") or (os == "mac"): FAIL
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
leak-threshold: [default:51200]
|
leak-threshold: [default:51200, gpu:51200]
|
||||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче