зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla-central to autoland.
This commit is contained in:
Коммит
036e5a499e
|
@ -586,6 +586,31 @@ class MarkupContextMenu {
|
||||||
return pasteSubmenu;
|
return pasteSubmenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_getPseudoClassSubmenu(isSelectionElement) {
|
||||||
|
const menu = new Menu();
|
||||||
|
|
||||||
|
// Set the pseudo classes
|
||||||
|
for (const name of PSEUDO_CLASSES) {
|
||||||
|
const menuitem = new MenuItem({
|
||||||
|
id: "node-menu-pseudo-" + name.substr(1),
|
||||||
|
label: name.substr(1),
|
||||||
|
type: "checkbox",
|
||||||
|
click: () => this.inspector.togglePseudoClass(name),
|
||||||
|
});
|
||||||
|
|
||||||
|
if (isSelectionElement) {
|
||||||
|
const checked = this.selection.nodeFront.hasPseudoClassLock(name);
|
||||||
|
menuitem.checked = checked;
|
||||||
|
} else {
|
||||||
|
menuitem.disabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu.append(menuitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
|
||||||
_openMenu({ target, screenX = 0, screenY = 0 } = {}) {
|
_openMenu({ target, screenX = 0, screenY = 0 } = {}) {
|
||||||
if (this.selection.isSlotted()) {
|
if (this.selection.isSlotted()) {
|
||||||
// Slotted elements should not show any context menu.
|
// Slotted elements should not show any context menu.
|
||||||
|
@ -648,29 +673,57 @@ class MarkupContextMenu {
|
||||||
type: "separator",
|
type: "separator",
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Set the pseudo classes
|
menu.append(new MenuItem({
|
||||||
for (const name of PSEUDO_CLASSES) {
|
id: "node-menu-useinconsole",
|
||||||
const menuitem = new MenuItem({
|
label: INSPECTOR_L10N.getStr("inspectorUseInConsole.label"),
|
||||||
id: "node-menu-pseudo-" + name.substr(1),
|
click: () => this._useInConsole(),
|
||||||
label: name.substr(1),
|
}));
|
||||||
type: "checkbox",
|
|
||||||
click: () => this.inspector.togglePseudoClass(name),
|
|
||||||
});
|
|
||||||
|
|
||||||
if (isSelectionElement) {
|
menu.append(new MenuItem({
|
||||||
const checked = this.selection.nodeFront.hasPseudoClassLock(name);
|
id: "node-menu-showdomproperties",
|
||||||
menuitem.checked = checked;
|
label: INSPECTOR_L10N.getStr("inspectorShowDOMProperties.label"),
|
||||||
} else {
|
click: () => this._showDOMProperties(),
|
||||||
menuitem.disabled = true;
|
}));
|
||||||
}
|
|
||||||
|
|
||||||
menu.append(menuitem);
|
this._buildA11YMenuItem(menu);
|
||||||
|
|
||||||
|
if (this.selection.nodeFront.customElementLocation) {
|
||||||
|
menu.append(new MenuItem({
|
||||||
|
id: "node-menu-jumptodefinition",
|
||||||
|
label: INSPECTOR_L10N.getStr("inspectorCustomElementDefinition.label"),
|
||||||
|
click: () => this._jumpToCustomElementDefinition(),
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.append(new MenuItem({
|
menu.append(new MenuItem({
|
||||||
type: "separator",
|
type: "separator",
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
menu.append(new MenuItem({
|
||||||
|
label: INSPECTOR_L10N.getStr("inspectorPseudoClassSubmenu.label"),
|
||||||
|
submenu: this._getPseudoClassSubmenu(isSelectionElement),
|
||||||
|
}));
|
||||||
|
|
||||||
|
menu.append(new MenuItem({
|
||||||
|
id: "node-menu-screenshotnode",
|
||||||
|
label: INSPECTOR_L10N.getStr("inspectorScreenshotNode.label"),
|
||||||
|
disabled: !isScreenshotable,
|
||||||
|
click: () => this.inspector.screenshotNode().catch(console.error),
|
||||||
|
}));
|
||||||
|
|
||||||
|
menu.append(new MenuItem({
|
||||||
|
id: "node-menu-scrollnodeintoview",
|
||||||
|
label: INSPECTOR_L10N.getStr("inspectorScrollNodeIntoView.label"),
|
||||||
|
accesskey:
|
||||||
|
INSPECTOR_L10N.getStr("inspectorScrollNodeIntoView.accesskey"),
|
||||||
|
disabled: !isSelectionElement,
|
||||||
|
click: () => this.markup.scrollNodeIntoView(),
|
||||||
|
}));
|
||||||
|
|
||||||
|
menu.append(new MenuItem({
|
||||||
|
type: "separator",
|
||||||
|
}));
|
||||||
|
|
||||||
menu.append(new MenuItem({
|
menu.append(new MenuItem({
|
||||||
label: INSPECTOR_L10N.getStr("inspectorCopyHTMLSubmenu.label"),
|
label: INSPECTOR_L10N.getStr("inspectorCopyHTMLSubmenu.label"),
|
||||||
submenu: this._getCopySubmenu(markupContainer, isSelectionElement),
|
submenu: this._getCopySubmenu(markupContainer, isSelectionElement),
|
||||||
|
@ -700,49 +753,6 @@ class MarkupContextMenu {
|
||||||
click: () => this.markup.collapseAll(this.selection.nodeFront),
|
click: () => this.markup.collapseAll(this.selection.nodeFront),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
menu.append(new MenuItem({
|
|
||||||
type: "separator",
|
|
||||||
}));
|
|
||||||
|
|
||||||
menu.append(new MenuItem({
|
|
||||||
id: "node-menu-scrollnodeintoview",
|
|
||||||
label: INSPECTOR_L10N.getStr("inspectorScrollNodeIntoView.label"),
|
|
||||||
accesskey:
|
|
||||||
INSPECTOR_L10N.getStr("inspectorScrollNodeIntoView.accesskey"),
|
|
||||||
disabled: !isSelectionElement,
|
|
||||||
click: () => this.markup.scrollNodeIntoView(),
|
|
||||||
}));
|
|
||||||
menu.append(new MenuItem({
|
|
||||||
id: "node-menu-screenshotnode",
|
|
||||||
label: INSPECTOR_L10N.getStr("inspectorScreenshotNode.label"),
|
|
||||||
disabled: !isScreenshotable,
|
|
||||||
click: () => this.inspector.screenshotNode().catch(console.error),
|
|
||||||
}));
|
|
||||||
menu.append(new MenuItem({
|
|
||||||
id: "node-menu-useinconsole",
|
|
||||||
label: INSPECTOR_L10N.getStr("inspectorUseInConsole.label"),
|
|
||||||
click: () => this._useInConsole(),
|
|
||||||
}));
|
|
||||||
menu.append(new MenuItem({
|
|
||||||
id: "node-menu-showdomproperties",
|
|
||||||
label: INSPECTOR_L10N.getStr("inspectorShowDOMProperties.label"),
|
|
||||||
click: () => this._showDOMProperties(),
|
|
||||||
}));
|
|
||||||
|
|
||||||
if (this.selection.nodeFront.customElementLocation) {
|
|
||||||
menu.append(new MenuItem({
|
|
||||||
type: "separator",
|
|
||||||
}));
|
|
||||||
|
|
||||||
menu.append(new MenuItem({
|
|
||||||
id: "node-menu-jumptodefinition",
|
|
||||||
label: INSPECTOR_L10N.getStr("inspectorCustomElementDefinition.label"),
|
|
||||||
click: () => this._jumpToCustomElementDefinition(),
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
this._buildA11YMenuItem(menu);
|
|
||||||
|
|
||||||
const nodeLinkMenuItems = this._getNodeLinkMenuItems();
|
const nodeLinkMenuItems = this._getNodeLinkMenuItems();
|
||||||
if (nodeLinkMenuItems.filter(item => item.visible).length > 0) {
|
if (nodeLinkMenuItems.filter(item => item.visible).length > 0) {
|
||||||
menu.append(new MenuItem({
|
menu.append(new MenuItem({
|
||||||
|
|
|
@ -290,6 +290,10 @@ inspectorAttributesSubmenu.accesskey=A
|
||||||
inspectorAddAttribute.label=Add Attribute
|
inspectorAddAttribute.label=Add Attribute
|
||||||
inspectorAddAttribute.accesskey=A
|
inspectorAddAttribute.accesskey=A
|
||||||
|
|
||||||
|
# LOCALIZATION NOTE (inspectorPseudoClassSubmenu.label): This is the label
|
||||||
|
# shown in the inspector contextual-menu for the sub-menu of the pseudo-classes.
|
||||||
|
inspectorPseudoClassSubmenu.label=Change Pseudo-class
|
||||||
|
|
||||||
# LOCALIZATION NOTE (inspectorSearchHTML.label3): This is the label that is
|
# LOCALIZATION NOTE (inspectorSearchHTML.label3): This is the label that is
|
||||||
# shown as the placeholder for the markup view search in the inspector.
|
# shown as the placeholder for the markup view search in the inspector.
|
||||||
inspectorSearchHTML.label3=Search HTML
|
inspectorSearchHTML.label3=Search HTML
|
||||||
|
|
|
@ -139,6 +139,7 @@ static_assert(MAX_WORKERS_PER_DOMAIN >= 1,
|
||||||
#define GC_REQUEST_OBSERVER_TOPIC "child-gc-request"
|
#define GC_REQUEST_OBSERVER_TOPIC "child-gc-request"
|
||||||
#define CC_REQUEST_OBSERVER_TOPIC "child-cc-request"
|
#define CC_REQUEST_OBSERVER_TOPIC "child-cc-request"
|
||||||
#define MEMORY_PRESSURE_OBSERVER_TOPIC "memory-pressure"
|
#define MEMORY_PRESSURE_OBSERVER_TOPIC "memory-pressure"
|
||||||
|
#define MEMORY_PRESSURE_ONGOING_DATA "low-memory-ongoing"
|
||||||
|
|
||||||
#define BROADCAST_ALL_WORKERS(_func, ...) \
|
#define BROADCAST_ALL_WORKERS(_func, ...) \
|
||||||
PR_BEGIN_MACRO \
|
PR_BEGIN_MACRO \
|
||||||
|
@ -2199,9 +2200,13 @@ RuntimeService::Observe(nsISupports* aSubject, const char* aTopic,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
if (!strcmp(aTopic, MEMORY_PRESSURE_OBSERVER_TOPIC)) {
|
if (!strcmp(aTopic, MEMORY_PRESSURE_OBSERVER_TOPIC)) {
|
||||||
GarbageCollectAllWorkers(/* shrinking = */ true);
|
// Don't continue to GC/CC if we are in an ongoing low-memory state since
|
||||||
CycleCollectAllWorkers();
|
// its very slow and it likely won't help us anyway.
|
||||||
MemoryPressureAllWorkers();
|
if (!nsDependentString(aData).EqualsLiteral(MEMORY_PRESSURE_ONGOING_DATA)) {
|
||||||
|
GarbageCollectAllWorkers(/* shrinking = */ true);
|
||||||
|
CycleCollectAllWorkers();
|
||||||
|
MemoryPressureAllWorkers();
|
||||||
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
if (!strcmp(aTopic, NS_IOSERVICE_OFFLINE_STATUS_TOPIC)) {
|
if (!strcmp(aTopic, NS_IOSERVICE_OFFLINE_STATUS_TOPIC)) {
|
||||||
|
|
|
@ -272,7 +272,7 @@ APZCTreeManager::APZCTreeManager(LayersId aRootLayersId)
|
||||||
"layers::APZCTreeManager::APZCTreeManager",
|
"layers::APZCTreeManager::APZCTreeManager",
|
||||||
[self] { self->mFlushObserver = new CheckerboardFlushObserver(self); }));
|
[self] { self->mFlushObserver = new CheckerboardFlushObserver(self); }));
|
||||||
AsyncPanZoomController::InitializeGlobalState();
|
AsyncPanZoomController::InitializeGlobalState();
|
||||||
mApzcTreeLog.ConditionOnPrefFunction(StaticPrefs::APZPrintTree);
|
mApzcTreeLog.ConditionOnPrefFunction(StaticPrefs::apz_printtree);
|
||||||
#if defined(MOZ_WIDGET_ANDROID)
|
#if defined(MOZ_WIDGET_ANDROID)
|
||||||
if (jni::IsFennec()) {
|
if (jni::IsFennec()) {
|
||||||
mToolbarAnimator = new AndroidDynamicToolbarAnimator(this);
|
mToolbarAnimator = new AndroidDynamicToolbarAnimator(this);
|
||||||
|
@ -606,7 +606,7 @@ void APZCTreeManager::UpdateFocusState(LayersId aRootLayerTreeId,
|
||||||
const FocusTarget& aFocusTarget) {
|
const FocusTarget& aFocusTarget) {
|
||||||
AssertOnUpdaterThread();
|
AssertOnUpdaterThread();
|
||||||
|
|
||||||
if (!StaticPrefs::APZKeyboardEnabled()) {
|
if (!StaticPrefs::apz_keyboard_enabled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1319,7 +1319,7 @@ nsEventStatus APZCTreeManager::ReceiveInputEvent(
|
||||||
}
|
}
|
||||||
|
|
||||||
TargetConfirmationFlags confFlags{hitResult};
|
TargetConfirmationFlags confFlags{hitResult};
|
||||||
bool apzDragEnabled = StaticPrefs::APZDragEnabled();
|
bool apzDragEnabled = StaticPrefs::apz_drag_enabled();
|
||||||
if (apzDragEnabled && hitScrollbar) {
|
if (apzDragEnabled && hitScrollbar) {
|
||||||
// If scrollbar dragging is enabled and we hit a scrollbar, wait
|
// If scrollbar dragging is enabled and we hit a scrollbar, wait
|
||||||
// for the main-thread confirmation because it contains drag metrics
|
// for the main-thread confirmation because it contains drag metrics
|
||||||
|
@ -1544,8 +1544,8 @@ nsEventStatus APZCTreeManager::ReceiveInputEvent(
|
||||||
case KEYBOARD_INPUT: {
|
case KEYBOARD_INPUT: {
|
||||||
// Disable async keyboard scrolling when accessibility.browsewithcaret is
|
// Disable async keyboard scrolling when accessibility.browsewithcaret is
|
||||||
// enabled
|
// enabled
|
||||||
if (!StaticPrefs::APZKeyboardEnabled() ||
|
if (!StaticPrefs::apz_keyboard_enabled() ||
|
||||||
StaticPrefs::AccessibilityBrowseWithCaret()) {
|
StaticPrefs::accessibility_browsewithcaret()) {
|
||||||
APZ_KEY_LOG("Skipping key input from invalid prefs\n");
|
APZ_KEY_LOG("Skipping key input from invalid prefs\n");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1741,8 +1741,9 @@ nsEventStatus APZCTreeManager::ProcessTouchInput(
|
||||||
// checked are similar to the ones we check for MOUSE_INPUT starting
|
// checked are similar to the ones we check for MOUSE_INPUT starting
|
||||||
// a scrollbar mouse-drag.
|
// a scrollbar mouse-drag.
|
||||||
mInScrollbarTouchDrag =
|
mInScrollbarTouchDrag =
|
||||||
StaticPrefs::APZDragEnabled() && StaticPrefs::APZTouchDragEnabled() &&
|
StaticPrefs::apz_drag_enabled() &&
|
||||||
hitScrollbarNode && hitScrollbarNode->IsScrollThumbNode() &&
|
StaticPrefs::apz_touch_drag_enabled() && hitScrollbarNode &&
|
||||||
|
hitScrollbarNode->IsScrollThumbNode() &&
|
||||||
hitScrollbarNode->GetScrollbarData().mThumbIsAsyncDraggable;
|
hitScrollbarNode->GetScrollbarData().mThumbIsAsyncDraggable;
|
||||||
|
|
||||||
MOZ_ASSERT(touchBehaviors.Length() == aInput.mTouches.Length());
|
MOZ_ASSERT(touchBehaviors.Length() == aInput.mTouches.Length());
|
||||||
|
@ -1924,7 +1925,7 @@ void APZCTreeManager::SetupScrollbarDrag(
|
||||||
|
|
||||||
// Under some conditions, we can confirm the drag block right away.
|
// Under some conditions, we can confirm the drag block right away.
|
||||||
// Otherwise, we have to wait for a main-thread confirmation.
|
// Otherwise, we have to wait for a main-thread confirmation.
|
||||||
if (StaticPrefs::APZDragInitiationEnabled() &&
|
if (StaticPrefs::apz_drag_initial_enabled() &&
|
||||||
// check that the scrollbar's target scroll frame is layerized
|
// check that the scrollbar's target scroll frame is layerized
|
||||||
aScrollThumbNode->GetScrollTargetId() == aApzc->GetGuid().mScrollId &&
|
aScrollThumbNode->GetScrollTargetId() == aApzc->GetGuid().mScrollId &&
|
||||||
!aApzc->IsScrollInfoLayer()) {
|
!aApzc->IsScrollInfoLayer()) {
|
||||||
|
@ -2388,7 +2389,7 @@ ParentLayerPoint APZCTreeManager::DispatchFling(
|
||||||
AsyncPanZoomController* aPrev, const FlingHandoffState& aHandoffState) {
|
AsyncPanZoomController* aPrev, const FlingHandoffState& aHandoffState) {
|
||||||
// If immediate handoff is disallowed, do not allow handoff beyond the
|
// If immediate handoff is disallowed, do not allow handoff beyond the
|
||||||
// single APZC that's scrolled by the input block that triggered this fling.
|
// single APZC that's scrolled by the input block that triggered this fling.
|
||||||
if (aHandoffState.mIsHandoff && !StaticPrefs::APZAllowImmediateHandoff() &&
|
if (aHandoffState.mIsHandoff && !StaticPrefs::apz_allow_immediate_handoff() &&
|
||||||
aHandoffState.mScrolledApzc == aPrev) {
|
aHandoffState.mScrolledApzc == aPrev) {
|
||||||
FLING_LOG("APZCTM dropping handoff due to disallowed immediate handoff\n");
|
FLING_LOG("APZCTM dropping handoff due to disallowed immediate handoff\n");
|
||||||
return aHandoffState.mVelocity;
|
return aHandoffState.mVelocity;
|
||||||
|
|
|
@ -65,7 +65,7 @@ nsEventStatus APZInputBridge::ReceiveInputEvent(
|
||||||
// hit testing in a zoomed-in or zoomed-out state.
|
// hit testing in a zoomed-in or zoomed-out state.
|
||||||
// FIXME: bug 1525793 -- this may need to handle zooming or not on a
|
// FIXME: bug 1525793 -- this may need to handle zooming or not on a
|
||||||
// per-document basis.
|
// per-document basis.
|
||||||
if (StaticPrefs::APZAllowZooming()) {
|
if (StaticPrefs::apz_allow_zooming()) {
|
||||||
mouseEvent.mIgnoreRootScrollFrame = true;
|
mouseEvent.mIgnoreRootScrollFrame = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ AndroidSpecificState::AndroidSpecificState() {
|
||||||
AsyncPanZoomAnimation* AndroidSpecificState::CreateFlingAnimation(
|
AsyncPanZoomAnimation* AndroidSpecificState::CreateFlingAnimation(
|
||||||
AsyncPanZoomController& aApzc, const FlingHandoffState& aHandoffState,
|
AsyncPanZoomController& aApzc, const FlingHandoffState& aHandoffState,
|
||||||
float aPLPPI) {
|
float aPLPPI) {
|
||||||
if (StaticPrefs::APZUseChromeFlingPhysics()) {
|
if (StaticPrefs::apz_android_chrome_fling_physics_enabled()) {
|
||||||
return new GenericFlingAnimation<AndroidFlingPhysics>(
|
return new GenericFlingAnimation<AndroidFlingPhysics>(
|
||||||
aApzc, aHandoffState.mChain, aHandoffState.mIsHandoff,
|
aApzc, aHandoffState.mChain, aHandoffState.mIsHandoff,
|
||||||
aHandoffState.mScrolledApzc, aPLPPI);
|
aHandoffState.mScrolledApzc, aPLPPI);
|
||||||
|
@ -68,7 +68,7 @@ AsyncPanZoomAnimation* AndroidSpecificState::CreateFlingAnimation(
|
||||||
|
|
||||||
UniquePtr<VelocityTracker> AndroidSpecificState::CreateVelocityTracker(
|
UniquePtr<VelocityTracker> AndroidSpecificState::CreateVelocityTracker(
|
||||||
Axis* aAxis) {
|
Axis* aAxis) {
|
||||||
if (StaticPrefs::APZUseChromeFlingPhysics()) {
|
if (StaticPrefs::apz_android_chrome_fling_physics_enabled()) {
|
||||||
return MakeUnique<AndroidVelocityTracker>();
|
return MakeUnique<AndroidVelocityTracker>();
|
||||||
}
|
}
|
||||||
return MakeUnique<SimpleVelocityTracker>(aAxis);
|
return MakeUnique<SimpleVelocityTracker>(aAxis);
|
||||||
|
@ -76,8 +76,9 @@ UniquePtr<VelocityTracker> AndroidSpecificState::CreateVelocityTracker(
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
void AndroidSpecificState::InitializeGlobalState() {
|
void AndroidSpecificState::InitializeGlobalState() {
|
||||||
// Not conditioned on StaticPrefs::APZUseChromeFlingPhysics() because
|
// Not conditioned on
|
||||||
// the pref is live.
|
// StaticPrefs::apz_android_chrome_fling_physics_enabled() because the pref
|
||||||
|
// is live.
|
||||||
AndroidFlingPhysics::InitializeGlobalState();
|
AndroidFlingPhysics::InitializeGlobalState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,8 +168,9 @@ StackScrollerFlingAnimation::StackScrollerFlingAnimation(
|
||||||
// flywheel to kick in, then we need to update the timestamp on the
|
// flywheel to kick in, then we need to update the timestamp on the
|
||||||
// StackScroller because otherwise it might use a stale velocity.
|
// StackScroller because otherwise it might use a stale velocity.
|
||||||
TimeDuration flingDuration = TimeStamp::Now() - state->mLastFling;
|
TimeDuration flingDuration = TimeStamp::Now() - state->mLastFling;
|
||||||
if (flingDuration.ToMilliseconds() < StaticPrefs::APZFlingAccelInterval() &&
|
if (flingDuration.ToMilliseconds() <
|
||||||
velocity.Length() >= StaticPrefs::APZFlingAccelMinVelocity()) {
|
StaticPrefs::apz_fling_accel_interval_ms() &&
|
||||||
|
velocity.Length() >= StaticPrefs::apz_fling_accel_interval_ms()) {
|
||||||
bool unused = false;
|
bool unused = false;
|
||||||
mOverScroller->ComputeScrollOffset(flingDuration.ToMilliseconds(),
|
mOverScroller->ComputeScrollOffset(flingDuration.ToMilliseconds(),
|
||||||
&unused);
|
&unused);
|
||||||
|
@ -242,9 +244,9 @@ bool StackScrollerFlingAnimation::DoSample(FrameMetrics& aFrameMetrics,
|
||||||
|
|
||||||
float speed = velocity.Length();
|
float speed = velocity.Length();
|
||||||
|
|
||||||
// StaticPrefs::APZFlingStoppedThreshold is only used in tests.
|
// StaticPrefs::apz_fling_stopped_threshold is only used in tests.
|
||||||
if (!shouldContinueFling ||
|
if (!shouldContinueFling ||
|
||||||
(speed < StaticPrefs::APZFlingStoppedThreshold())) {
|
(speed < StaticPrefs::apz_fling_stopped_threshold())) {
|
||||||
if (shouldContinueFling) {
|
if (shouldContinueFling) {
|
||||||
// The OverScroller thinks it should continue but the speed is below
|
// The OverScroller thinks it should continue but the speed is below
|
||||||
// the stopping threshold so abort the animation.
|
// the stopping threshold so abort the animation.
|
||||||
|
|
|
@ -33,7 +33,7 @@ const float kDecelerationRate = 2.3582018f;
|
||||||
|
|
||||||
// Default friction constant in android.view.ViewConfiguration.
|
// Default friction constant in android.view.ViewConfiguration.
|
||||||
static float GetFlingFriction() {
|
static float GetFlingFriction() {
|
||||||
return StaticPrefs::APZChromeFlingPhysicsFriction();
|
return StaticPrefs::apz_android_chrome_fling_physics_friction();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tension lines cross at (GetInflexion(), 1).
|
// Tension lines cross at (GetInflexion(), 1).
|
||||||
|
@ -41,7 +41,8 @@ static float GetInflexion() {
|
||||||
// Clamp the inflexion to the range [0,1]. Values outside of this range
|
// Clamp the inflexion to the range [0,1]. Values outside of this range
|
||||||
// do not make sense in the physics model, and for negative values the
|
// do not make sense in the physics model, and for negative values the
|
||||||
// approximation used to compute the spline curve does not converge.
|
// approximation used to compute the spline curve does not converge.
|
||||||
const float inflexion = StaticPrefs::APZChromeFlingPhysicsInflexion();
|
const float inflexion =
|
||||||
|
StaticPrefs::apz_android_chrome_fling_physics_inflexion();
|
||||||
if (inflexion < 0.0f) {
|
if (inflexion < 0.0f) {
|
||||||
return 0.0f;
|
return 0.0f;
|
||||||
}
|
}
|
||||||
|
@ -54,7 +55,7 @@ static float GetInflexion() {
|
||||||
// Fling scroll is stopped when the scroll position is |kThresholdForFlingEnd|
|
// Fling scroll is stopped when the scroll position is |kThresholdForFlingEnd|
|
||||||
// pixels or closer from the end.
|
// pixels or closer from the end.
|
||||||
static float GetThresholdForFlingEnd() {
|
static float GetThresholdForFlingEnd() {
|
||||||
return StaticPrefs::APZChromeFlingPhysicsStopThreshold();
|
return StaticPrefs::apz_android_chrome_fling_physics_stop_threshold();
|
||||||
}
|
}
|
||||||
|
|
||||||
static double ComputeSplineDeceleration(ParentLayerCoord aVelocity,
|
static double ComputeSplineDeceleration(ParentLayerCoord aVelocity,
|
||||||
|
|
|
@ -251,7 +251,7 @@ Maybe<float> AndroidVelocityTracker::ComputeVelocity(uint32_t aTimestampMs) {
|
||||||
float time[kHistorySize];
|
float time[kHistorySize];
|
||||||
uint32_t m = 0;
|
uint32_t m = 0;
|
||||||
int index = mHistory.Length() - 1;
|
int index = mHistory.Length() - 1;
|
||||||
const uint32_t horizon = StaticPrefs::APZVelocityRelevanceTime();
|
const uint32_t horizon = StaticPrefs::apz_velocity_relevance_time_ms();
|
||||||
const auto& newest_movement = mHistory[index];
|
const auto& newest_movement = mHistory[index];
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
|
@ -615,7 +615,7 @@ class ZoomAnimation : public AsyncPanZoomAnimation {
|
||||||
const CSSToParentLayerScale2D& aEndZoom)
|
const CSSToParentLayerScale2D& aEndZoom)
|
||||||
: mApzc(aApzc),
|
: mApzc(aApzc),
|
||||||
mTotalDuration(TimeDuration::FromMilliseconds(
|
mTotalDuration(TimeDuration::FromMilliseconds(
|
||||||
StaticPrefs::APZZoomAnimationDuration())),
|
StaticPrefs::apz_zoom_animation_duration_ms())),
|
||||||
mStartOffset(aStartOffset),
|
mStartOffset(aStartOffset),
|
||||||
mStartZoom(aStartZoom),
|
mStartZoom(aStartZoom),
|
||||||
mEndOffset(aEndOffset),
|
mEndOffset(aEndOffset),
|
||||||
|
@ -815,9 +815,11 @@ void AsyncPanZoomController::InitializeGlobalState() {
|
||||||
gZoomAnimationFunction =
|
gZoomAnimationFunction =
|
||||||
new ComputedTimingFunction(nsTimingFunction(StyleTimingKeyword::Ease));
|
new ComputedTimingFunction(nsTimingFunction(StyleTimingKeyword::Ease));
|
||||||
ClearOnShutdown(&gZoomAnimationFunction);
|
ClearOnShutdown(&gZoomAnimationFunction);
|
||||||
gVelocityCurveFunction = new ComputedTimingFunction(nsTimingFunction(
|
gVelocityCurveFunction = new ComputedTimingFunction(
|
||||||
StaticPrefs::APZCurveFunctionX1(), StaticPrefs::APZCurveFunctionY1(),
|
nsTimingFunction(StaticPrefs::apz_fling_curve_function_x1(),
|
||||||
StaticPrefs::APZCurveFunctionX2(), StaticPrefs::APZCurveFunctionY2()));
|
StaticPrefs::apz_fling_curve_function_y1(),
|
||||||
|
StaticPrefs::apz_fling_curve_function_x2(),
|
||||||
|
StaticPrefs::apz_fling_curve_function_y2()));
|
||||||
ClearOnShutdown(&gVelocityCurveFunction);
|
ClearOnShutdown(&gVelocityCurveFunction);
|
||||||
|
|
||||||
uint64_t sysmem = PR_GetPhysicalMemorySize();
|
uint64_t sysmem = PR_GetPhysicalMemorySize();
|
||||||
|
@ -845,7 +847,7 @@ AsyncPanZoomController::AsyncPanZoomController(
|
||||||
mPanDirRestricted(false),
|
mPanDirRestricted(false),
|
||||||
mPinchLocked(false),
|
mPinchLocked(false),
|
||||||
mPinchEventBuffer(TimeDuration::FromMilliseconds(
|
mPinchEventBuffer(TimeDuration::FromMilliseconds(
|
||||||
StaticPrefs::APZPinchLockBufferMaxAge())),
|
StaticPrefs::apz_pinch_lock_buffer_max_age())),
|
||||||
mZoomConstraints(false, false,
|
mZoomConstraints(false, false,
|
||||||
mScrollMetadata.GetMetrics().GetDevPixelsPerCSSPixel() *
|
mScrollMetadata.GetMetrics().GetDevPixelsPerCSSPixel() *
|
||||||
kViewportMinScale / ParentLayerToScreenScale(1),
|
kViewportMinScale / ParentLayerToScreenScale(1),
|
||||||
|
@ -938,25 +940,25 @@ float AsyncPanZoomController::GetDPI() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
ScreenCoord AsyncPanZoomController::GetTouchStartTolerance() const {
|
ScreenCoord AsyncPanZoomController::GetTouchStartTolerance() const {
|
||||||
return (StaticPrefs::APZTouchStartTolerance() * GetDPI());
|
return (StaticPrefs::apz_touch_start_tolerance() * GetDPI());
|
||||||
}
|
}
|
||||||
|
|
||||||
ScreenCoord AsyncPanZoomController::GetTouchMoveTolerance() const {
|
ScreenCoord AsyncPanZoomController::GetTouchMoveTolerance() const {
|
||||||
return (StaticPrefs::APZTouchMoveTolerance() * GetDPI());
|
return (StaticPrefs::apz_touch_move_tolerance() * GetDPI());
|
||||||
}
|
}
|
||||||
|
|
||||||
ScreenCoord AsyncPanZoomController::GetSecondTapTolerance() const {
|
ScreenCoord AsyncPanZoomController::GetSecondTapTolerance() const {
|
||||||
return (StaticPrefs::APZSecondTapTolerance() * GetDPI());
|
return (StaticPrefs::apz_second_tap_tolerance() * GetDPI());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ AsyncPanZoomController::AxisLockMode
|
/* static */ AsyncPanZoomController::AxisLockMode
|
||||||
AsyncPanZoomController::GetAxisLockMode() {
|
AsyncPanZoomController::GetAxisLockMode() {
|
||||||
return static_cast<AxisLockMode>(StaticPrefs::APZAxisLockMode());
|
return static_cast<AxisLockMode>(StaticPrefs::apz_axis_lock_mode());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ AsyncPanZoomController::PinchLockMode
|
/* static */ AsyncPanZoomController::PinchLockMode
|
||||||
AsyncPanZoomController::GetPinchLockMode() {
|
AsyncPanZoomController::GetPinchLockMode() {
|
||||||
return static_cast<PinchLockMode>(StaticPrefs::APZPinchLockMode());
|
return static_cast<PinchLockMode>(StaticPrefs::apz_pinch_lock_mode());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AsyncPanZoomController::ArePointerEventsConsumable(
|
bool AsyncPanZoomController::ArePointerEventsConsumable(
|
||||||
|
@ -1012,7 +1014,7 @@ bool AsyncPanZoomController::ArePointerEventsConsumable(
|
||||||
nsEventStatus AsyncPanZoomController::HandleDragEvent(
|
nsEventStatus AsyncPanZoomController::HandleDragEvent(
|
||||||
const MouseInput& aEvent, const AsyncDragMetrics& aDragMetrics,
|
const MouseInput& aEvent, const AsyncDragMetrics& aDragMetrics,
|
||||||
CSSCoord aInitialThumbPos) {
|
CSSCoord aInitialThumbPos) {
|
||||||
if (!StaticPrefs::APZDragEnabled()) {
|
if (!StaticPrefs::apz_drag_enabled()) {
|
||||||
return nsEventStatus_eIgnore;
|
return nsEventStatus_eIgnore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1566,7 +1568,7 @@ nsEventStatus AsyncPanZoomController::OnScaleBegin(
|
||||||
// content controller, it may want to do something else with this gesture.
|
// content controller, it may want to do something else with this gesture.
|
||||||
// FIXME: bug 1525793 -- this may need to handle zooming or not on a
|
// FIXME: bug 1525793 -- this may need to handle zooming or not on a
|
||||||
// per-document basis.
|
// per-document basis.
|
||||||
if (!StaticPrefs::APZAllowZooming()) {
|
if (!StaticPrefs::apz_allow_zooming()) {
|
||||||
if (RefPtr<GeckoContentController> controller =
|
if (RefPtr<GeckoContentController> controller =
|
||||||
GetGeckoContentController()) {
|
GetGeckoContentController()) {
|
||||||
controller->NotifyPinchGesture(aEvent.mType, GetGuid(), 0,
|
controller->NotifyPinchGesture(aEvent.mType, GetGuid(), 0,
|
||||||
|
@ -1613,7 +1615,7 @@ nsEventStatus AsyncPanZoomController::OnScale(const PinchGestureInput& aEvent) {
|
||||||
|
|
||||||
// FIXME: bug 1525793 -- this may need to handle zooming or not on a
|
// FIXME: bug 1525793 -- this may need to handle zooming or not on a
|
||||||
// per-document basis.
|
// per-document basis.
|
||||||
if (!StaticPrefs::APZAllowZooming()) {
|
if (!StaticPrefs::apz_allow_zooming()) {
|
||||||
if (RefPtr<GeckoContentController> controller =
|
if (RefPtr<GeckoContentController> controller =
|
||||||
GetGeckoContentController()) {
|
GetGeckoContentController()) {
|
||||||
controller->NotifyPinchGesture(
|
controller->NotifyPinchGesture(
|
||||||
|
@ -1703,7 +1705,7 @@ nsEventStatus AsyncPanZoomController::OnScale(const PinchGestureInput& aEvent) {
|
||||||
|
|
||||||
// We don't want to redraw on every scale, so throttle it.
|
// We don't want to redraw on every scale, so throttle it.
|
||||||
if (!mPinchPaintTimerSet) {
|
if (!mPinchPaintTimerSet) {
|
||||||
const int delay = StaticPrefs::APZScaleRepaintDelay();
|
const int delay = StaticPrefs::apz_scale_repaint_delay_ms();
|
||||||
if (delay >= 0) {
|
if (delay >= 0) {
|
||||||
if (RefPtr<GeckoContentController> controller =
|
if (RefPtr<GeckoContentController> controller =
|
||||||
GetGeckoContentController()) {
|
GetGeckoContentController()) {
|
||||||
|
@ -1747,7 +1749,7 @@ nsEventStatus AsyncPanZoomController::OnScaleEnd(
|
||||||
|
|
||||||
// FIXME: bug 1525793 -- this may need to handle zooming or not on a
|
// FIXME: bug 1525793 -- this may need to handle zooming or not on a
|
||||||
// per-document basis.
|
// per-document basis.
|
||||||
if (!StaticPrefs::APZAllowZooming()) {
|
if (!StaticPrefs::apz_allow_zooming()) {
|
||||||
if (RefPtr<GeckoContentController> controller =
|
if (RefPtr<GeckoContentController> controller =
|
||||||
GetGeckoContentController()) {
|
GetGeckoContentController()) {
|
||||||
controller->NotifyPinchGesture(aEvent.mType, GetGuid(), 0,
|
controller->NotifyPinchGesture(aEvent.mType, GetGuid(), 0,
|
||||||
|
@ -1840,9 +1842,10 @@ nsEventStatus AsyncPanZoomController::HandleEndOfPan() {
|
||||||
|
|
||||||
APZC_LOG("%p starting a fling animation if %f >= %f\n", this,
|
APZC_LOG("%p starting a fling animation if %f >= %f\n", this,
|
||||||
flingVelocity.Length().value,
|
flingVelocity.Length().value,
|
||||||
StaticPrefs::APZFlingMinVelocityThreshold());
|
StaticPrefs::apz_fling_min_velocity_threshold());
|
||||||
|
|
||||||
if (flingVelocity.Length() < StaticPrefs::APZFlingMinVelocityThreshold()) {
|
if (flingVelocity.Length() <
|
||||||
|
StaticPrefs::apz_fling_min_velocity_threshold()) {
|
||||||
// Relieve overscroll now if needed, since we will not transition to a fling
|
// Relieve overscroll now if needed, since we will not transition to a fling
|
||||||
// animation and then an overscroll animation, and relieve it then.
|
// animation and then an overscroll animation, and relieve it then.
|
||||||
GetCurrentInputBlock()
|
GetCurrentInputBlock()
|
||||||
|
@ -2254,7 +2257,7 @@ bool AsyncPanZoomController::IsContentOfHonouredTargetRightToLeft(
|
||||||
|
|
||||||
bool AsyncPanZoomController::AllowScrollHandoffInCurrentBlock() const {
|
bool AsyncPanZoomController::AllowScrollHandoffInCurrentBlock() const {
|
||||||
bool result = mInputQueue->AllowScrollHandoff();
|
bool result = mInputQueue->AllowScrollHandoff();
|
||||||
if (!StaticPrefs::APZAllowImmediateHandoff()) {
|
if (!StaticPrefs::apz_allow_immediate_handoff()) {
|
||||||
if (InputBlockState* currentBlock = GetCurrentInputBlock()) {
|
if (InputBlockState* currentBlock = GetCurrentInputBlock()) {
|
||||||
// Do not allow handoff beyond the first APZC to scroll.
|
// Do not allow handoff beyond the first APZC to scroll.
|
||||||
if (currentBlock->GetScrolledApzc() == this) {
|
if (currentBlock->GetScrolledApzc() == this) {
|
||||||
|
@ -2930,11 +2933,12 @@ void AsyncPanZoomController::HandlePanningWithTouchAction(double aAngle) {
|
||||||
this, ScrollDirection::eVertical);
|
this, ScrollDirection::eVertical);
|
||||||
if (GetCurrentTouchBlock()->TouchActionAllowsPanningXY()) {
|
if (GetCurrentTouchBlock()->TouchActionAllowsPanningXY()) {
|
||||||
if (canScrollHorizontal && canScrollVertical) {
|
if (canScrollHorizontal && canScrollVertical) {
|
||||||
if (apz::IsCloseToHorizontal(aAngle, StaticPrefs::APZAxisLockAngle())) {
|
if (apz::IsCloseToHorizontal(aAngle,
|
||||||
|
StaticPrefs::apz_axis_lock_lock_angle())) {
|
||||||
mY.SetAxisLocked(true);
|
mY.SetAxisLocked(true);
|
||||||
SetState(PANNING_LOCKED_X);
|
SetState(PANNING_LOCKED_X);
|
||||||
} else if (apz::IsCloseToVertical(aAngle,
|
} else if (apz::IsCloseToVertical(
|
||||||
StaticPrefs::APZAxisLockAngle())) {
|
aAngle, StaticPrefs::apz_axis_lock_lock_angle())) {
|
||||||
mX.SetAxisLocked(true);
|
mX.SetAxisLocked(true);
|
||||||
SetState(PANNING_LOCKED_Y);
|
SetState(PANNING_LOCKED_Y);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2948,8 +2952,8 @@ void AsyncPanZoomController::HandlePanningWithTouchAction(double aAngle) {
|
||||||
} else if (GetCurrentTouchBlock()->TouchActionAllowsPanningX()) {
|
} else if (GetCurrentTouchBlock()->TouchActionAllowsPanningX()) {
|
||||||
// Using bigger angle for panning to keep behavior consistent
|
// Using bigger angle for panning to keep behavior consistent
|
||||||
// with IE.
|
// with IE.
|
||||||
if (apz::IsCloseToHorizontal(aAngle,
|
if (apz::IsCloseToHorizontal(
|
||||||
StaticPrefs::APZAllowedDirectPanAngle())) {
|
aAngle, StaticPrefs::apz_axis_lock_direct_pan_angle())) {
|
||||||
mY.SetAxisLocked(true);
|
mY.SetAxisLocked(true);
|
||||||
SetState(PANNING_LOCKED_X);
|
SetState(PANNING_LOCKED_X);
|
||||||
mPanDirRestricted = true;
|
mPanDirRestricted = true;
|
||||||
|
@ -2960,7 +2964,7 @@ void AsyncPanZoomController::HandlePanningWithTouchAction(double aAngle) {
|
||||||
}
|
}
|
||||||
} else if (GetCurrentTouchBlock()->TouchActionAllowsPanningY()) {
|
} else if (GetCurrentTouchBlock()->TouchActionAllowsPanningY()) {
|
||||||
if (apz::IsCloseToVertical(aAngle,
|
if (apz::IsCloseToVertical(aAngle,
|
||||||
StaticPrefs::APZAllowedDirectPanAngle())) {
|
StaticPrefs::apz_axis_lock_direct_pan_angle())) {
|
||||||
mX.SetAxisLocked(true);
|
mX.SetAxisLocked(true);
|
||||||
SetState(PANNING_LOCKED_Y);
|
SetState(PANNING_LOCKED_Y);
|
||||||
mPanDirRestricted = true;
|
mPanDirRestricted = true;
|
||||||
|
@ -2993,13 +2997,14 @@ void AsyncPanZoomController::HandlePanning(double aAngle) {
|
||||||
|
|
||||||
if (!canScrollHorizontal || !canScrollVertical) {
|
if (!canScrollHorizontal || !canScrollVertical) {
|
||||||
SetState(PANNING);
|
SetState(PANNING);
|
||||||
} else if (apz::IsCloseToHorizontal(aAngle,
|
} else if (apz::IsCloseToHorizontal(
|
||||||
StaticPrefs::APZAxisLockAngle())) {
|
aAngle, StaticPrefs::apz_axis_lock_lock_angle())) {
|
||||||
mY.SetAxisLocked(true);
|
mY.SetAxisLocked(true);
|
||||||
if (canScrollHorizontal) {
|
if (canScrollHorizontal) {
|
||||||
SetState(PANNING_LOCKED_X);
|
SetState(PANNING_LOCKED_X);
|
||||||
}
|
}
|
||||||
} else if (apz::IsCloseToVertical(aAngle, StaticPrefs::APZAxisLockAngle())) {
|
} else if (apz::IsCloseToVertical(aAngle,
|
||||||
|
StaticPrefs::apz_axis_lock_lock_angle())) {
|
||||||
mX.SetAxisLocked(true);
|
mX.SetAxisLocked(true);
|
||||||
if (canScrollVertical) {
|
if (canScrollVertical) {
|
||||||
SetState(PANNING_LOCKED_Y);
|
SetState(PANNING_LOCKED_Y);
|
||||||
|
@ -3019,19 +3024,20 @@ void AsyncPanZoomController::HandlePanningUpdate(
|
||||||
double angle = atan2(vector.y, vector.x); // range [-pi, pi]
|
double angle = atan2(vector.y, vector.x); // range [-pi, pi]
|
||||||
angle = fabs(angle); // range [0, pi]
|
angle = fabs(angle); // range [0, pi]
|
||||||
|
|
||||||
float breakThreshold = StaticPrefs::APZAxisBreakoutThreshold() * GetDPI();
|
float breakThreshold =
|
||||||
|
StaticPrefs::apz_axis_lock_breakout_threshold() * GetDPI();
|
||||||
|
|
||||||
if (fabs(aPanDistance.x) > breakThreshold ||
|
if (fabs(aPanDistance.x) > breakThreshold ||
|
||||||
fabs(aPanDistance.y) > breakThreshold) {
|
fabs(aPanDistance.y) > breakThreshold) {
|
||||||
if (mState == PANNING_LOCKED_X) {
|
if (mState == PANNING_LOCKED_X) {
|
||||||
if (!apz::IsCloseToHorizontal(angle,
|
if (!apz::IsCloseToHorizontal(
|
||||||
StaticPrefs::APZAxisBreakoutAngle())) {
|
angle, StaticPrefs::apz_axis_lock_breakout_angle())) {
|
||||||
mY.SetAxisLocked(false);
|
mY.SetAxisLocked(false);
|
||||||
SetState(PANNING);
|
SetState(PANNING);
|
||||||
}
|
}
|
||||||
} else if (mState == PANNING_LOCKED_Y) {
|
} else if (mState == PANNING_LOCKED_Y) {
|
||||||
if (!apz::IsCloseToVertical(angle,
|
if (!apz::IsCloseToVertical(
|
||||||
StaticPrefs::APZAxisBreakoutAngle())) {
|
angle, StaticPrefs::apz_axis_lock_breakout_angle())) {
|
||||||
mX.SetAxisLocked(false);
|
mX.SetAxisLocked(false);
|
||||||
SetState(PANNING);
|
SetState(PANNING);
|
||||||
}
|
}
|
||||||
|
@ -3075,15 +3081,15 @@ void AsyncPanZoomController::HandlePinchLocking() {
|
||||||
if (mPinchLocked) {
|
if (mPinchLocked) {
|
||||||
if (GetPinchLockMode() == PINCH_STICKY) {
|
if (GetPinchLockMode() == PINCH_STICKY) {
|
||||||
ScreenCoord spanBreakoutThreshold =
|
ScreenCoord spanBreakoutThreshold =
|
||||||
StaticPrefs::APZPinchLockSpanBreakoutThreshold() * GetDPI();
|
StaticPrefs::apz_pinch_lock_span_breakout_threshold() * GetDPI();
|
||||||
mPinchLocked = !(spanDistance > spanBreakoutThreshold);
|
mPinchLocked = !(spanDistance > spanBreakoutThreshold);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (GetPinchLockMode() != PINCH_FREE) {
|
if (GetPinchLockMode() != PINCH_FREE) {
|
||||||
ScreenCoord spanLockThreshold =
|
ScreenCoord spanLockThreshold =
|
||||||
StaticPrefs::APZPinchLockSpanLockThreshold() * GetDPI();
|
StaticPrefs::apz_pinch_lock_span_lock_threshold() * GetDPI();
|
||||||
ScreenCoord scrollLockThreshold =
|
ScreenCoord scrollLockThreshold =
|
||||||
StaticPrefs::APZPinchLockScrollLockThreshold() * GetDPI();
|
StaticPrefs::apz_pinch_lock_scroll_lock_threshold() * GetDPI();
|
||||||
|
|
||||||
if (spanDistance < spanLockThreshold &&
|
if (spanDistance < spanLockThreshold &&
|
||||||
focusChange.Length() > scrollLockThreshold) {
|
focusChange.Length() > scrollLockThreshold) {
|
||||||
|
@ -3257,11 +3263,11 @@ void AsyncPanZoomController::OverscrollForPanning(
|
||||||
// configurable factor. If we are already overscrolled, don't check this.
|
// configurable factor. If we are already overscrolled, don't check this.
|
||||||
if (!IsOverscrolled()) {
|
if (!IsOverscrolled()) {
|
||||||
if (aPanDistance.x <
|
if (aPanDistance.x <
|
||||||
StaticPrefs::APZMinPanDistanceRatio() * aPanDistance.y) {
|
StaticPrefs::apz_overscroll_min_pan_distance_ratio() * aPanDistance.y) {
|
||||||
aOverscroll.x = 0;
|
aOverscroll.x = 0;
|
||||||
}
|
}
|
||||||
if (aPanDistance.y <
|
if (aPanDistance.y <
|
||||||
StaticPrefs::APZMinPanDistanceRatio() * aPanDistance.x) {
|
StaticPrefs::apz_overscroll_min_pan_distance_ratio() * aPanDistance.x) {
|
||||||
aOverscroll.y = 0;
|
aOverscroll.y = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3270,7 +3276,7 @@ void AsyncPanZoomController::OverscrollForPanning(
|
||||||
}
|
}
|
||||||
|
|
||||||
void AsyncPanZoomController::OverscrollBy(ParentLayerPoint& aOverscroll) {
|
void AsyncPanZoomController::OverscrollBy(ParentLayerPoint& aOverscroll) {
|
||||||
if (!StaticPrefs::APZOverscrollEnabled()) {
|
if (!StaticPrefs::apz_overscroll_enabled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3337,7 +3343,7 @@ ParentLayerPoint AsyncPanZoomController::AttemptFling(
|
||||||
// that generate events faster than the clock resolution.
|
// that generate events faster than the clock resolution.
|
||||||
ParentLayerPoint velocity = GetVelocityVector();
|
ParentLayerPoint velocity = GetVelocityVector();
|
||||||
if (!velocity.IsFinite() ||
|
if (!velocity.IsFinite() ||
|
||||||
velocity.Length() < StaticPrefs::APZFlingMinVelocityThreshold()) {
|
velocity.Length() < StaticPrefs::apz_fling_min_velocity_threshold()) {
|
||||||
// Relieve overscroll now if needed, since we will not transition to a fling
|
// Relieve overscroll now if needed, since we will not transition to a fling
|
||||||
// animation and then an overscroll animation, and relieve it then.
|
// animation and then an overscroll animation, and relieve it then.
|
||||||
aHandoffState.mChain->SnapBackOverscrolledApzc(this);
|
aHandoffState.mChain->SnapBackOverscrolledApzc(this);
|
||||||
|
@ -3408,7 +3414,7 @@ void AsyncPanZoomController::HandleFlingOverscroll(
|
||||||
FLING_LOG("APZC %p left with residual velocity %s\n", this,
|
FLING_LOG("APZC %p left with residual velocity %s\n", this,
|
||||||
Stringify(residualVelocity).c_str());
|
Stringify(residualVelocity).c_str());
|
||||||
if (!IsZero(residualVelocity) && IsPannable() &&
|
if (!IsZero(residualVelocity) && IsPannable() &&
|
||||||
StaticPrefs::APZOverscrollEnabled()) {
|
StaticPrefs::apz_overscroll_enabled()) {
|
||||||
// Obey overscroll-behavior.
|
// Obey overscroll-behavior.
|
||||||
RecursiveMutexAutoLock lock(mRecursiveMutex);
|
RecursiveMutexAutoLock lock(mRecursiveMutex);
|
||||||
if (!mX.OverscrollBehaviorAllowsOverscrollEffect()) {
|
if (!mX.OverscrollBehaviorAllowsOverscrollEffect()) {
|
||||||
|
@ -3666,22 +3672,22 @@ void AsyncPanZoomController::ScaleWithFocus(float aScale,
|
||||||
static CSSSize CalculateDisplayPortSize(const CSSSize& aCompositionSize,
|
static CSSSize CalculateDisplayPortSize(const CSSSize& aCompositionSize,
|
||||||
const CSSPoint& aVelocity) {
|
const CSSPoint& aVelocity) {
|
||||||
bool xIsStationarySpeed =
|
bool xIsStationarySpeed =
|
||||||
fabsf(aVelocity.x) < StaticPrefs::APZMinSkateSpeed();
|
fabsf(aVelocity.x) < StaticPrefs::apz_min_skate_speed();
|
||||||
bool yIsStationarySpeed =
|
bool yIsStationarySpeed =
|
||||||
fabsf(aVelocity.y) < StaticPrefs::APZMinSkateSpeed();
|
fabsf(aVelocity.y) < StaticPrefs::apz_min_skate_speed();
|
||||||
float xMultiplier = xIsStationarySpeed
|
float xMultiplier = xIsStationarySpeed
|
||||||
? StaticPrefs::APZXStationarySizeMultiplier()
|
? StaticPrefs::apz_x_stationary_size_multiplier()
|
||||||
: StaticPrefs::APZXSkateSizeMultiplier();
|
: StaticPrefs::apz_x_skate_size_multiplier();
|
||||||
float yMultiplier = yIsStationarySpeed
|
float yMultiplier = yIsStationarySpeed
|
||||||
? StaticPrefs::APZYStationarySizeMultiplier()
|
? StaticPrefs::apz_y_stationary_size_multiplier()
|
||||||
: StaticPrefs::APZYSkateSizeMultiplier();
|
: StaticPrefs::apz_y_skate_size_multiplier();
|
||||||
|
|
||||||
if (IsHighMemSystem() && !xIsStationarySpeed) {
|
if (IsHighMemSystem() && !xIsStationarySpeed) {
|
||||||
xMultiplier += StaticPrefs::APZXSkateHighMemAdjust();
|
xMultiplier += StaticPrefs::apz_x_skate_highmem_adjust();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsHighMemSystem() && !yIsStationarySpeed) {
|
if (IsHighMemSystem() && !yIsStationarySpeed) {
|
||||||
yMultiplier += StaticPrefs::APZYSkateHighMemAdjust();
|
yMultiplier += StaticPrefs::apz_y_skate_highmem_adjust();
|
||||||
}
|
}
|
||||||
|
|
||||||
return aCompositionSize * CSSSize(xMultiplier, yMultiplier);
|
return aCompositionSize * CSSSize(xMultiplier, yMultiplier);
|
||||||
|
@ -3698,8 +3704,8 @@ static CSSSize ExpandDisplayPortToDangerZone(
|
||||||
CSSSize dangerZone(0.0f, 0.0f);
|
CSSSize dangerZone(0.0f, 0.0f);
|
||||||
if (aFrameMetrics.LayersPixelsPerCSSPixel().xScale != 0 &&
|
if (aFrameMetrics.LayersPixelsPerCSSPixel().xScale != 0 &&
|
||||||
aFrameMetrics.LayersPixelsPerCSSPixel().yScale != 0) {
|
aFrameMetrics.LayersPixelsPerCSSPixel().yScale != 0) {
|
||||||
dangerZone = LayerSize(StaticPrefs::APZDangerZoneX(),
|
dangerZone = LayerSize(StaticPrefs::apz_danger_zone_x(),
|
||||||
StaticPrefs::APZDangerZoneY()) /
|
StaticPrefs::apz_danger_zone_y()) /
|
||||||
aFrameMetrics.LayersPixelsPerCSSPixel();
|
aFrameMetrics.LayersPixelsPerCSSPixel();
|
||||||
}
|
}
|
||||||
const CSSSize compositionSize =
|
const CSSSize compositionSize =
|
||||||
|
@ -3759,7 +3765,7 @@ const ScreenMargin AsyncPanZoomController::CalculatePendingDisplayPort(
|
||||||
displayPortSize =
|
displayPortSize =
|
||||||
ExpandDisplayPortToDangerZone(displayPortSize, aFrameMetrics);
|
ExpandDisplayPortToDangerZone(displayPortSize, aFrameMetrics);
|
||||||
|
|
||||||
if (StaticPrefs::APZEnlargeDisplayPortWhenClipped()) {
|
if (StaticPrefs::apz_enlarge_displayport_when_clipped()) {
|
||||||
RedistributeDisplayPortExcess(displayPortSize, scrollableRect);
|
RedistributeDisplayPortExcess(displayPortSize, scrollableRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3778,7 +3784,7 @@ const ScreenMargin AsyncPanZoomController::CalculatePendingDisplayPort(
|
||||||
// Offset the displayport, depending on how fast we're moving and the
|
// Offset the displayport, depending on how fast we're moving and the
|
||||||
// estimated time it takes to paint, to try to minimise checkerboarding.
|
// estimated time it takes to paint, to try to minimise checkerboarding.
|
||||||
float paintFactor = kDefaultEstimatedPaintDurationMs;
|
float paintFactor = kDefaultEstimatedPaintDurationMs;
|
||||||
displayPort.MoveBy(velocity * paintFactor * StaticPrefs::APZVelocityBias());
|
displayPort.MoveBy(velocity * paintFactor * StaticPrefs::apz_velocity_bias());
|
||||||
|
|
||||||
APZC_LOG_FM(
|
APZC_LOG_FM(
|
||||||
aFrameMetrics,
|
aFrameMetrics,
|
||||||
|
@ -3843,7 +3849,7 @@ bool AsyncPanZoomController::SnapBackIfOverscrolled() {
|
||||||
bool AsyncPanZoomController::IsFlingingFast() const {
|
bool AsyncPanZoomController::IsFlingingFast() const {
|
||||||
RecursiveMutexAutoLock lock(mRecursiveMutex);
|
RecursiveMutexAutoLock lock(mRecursiveMutex);
|
||||||
if (mState == FLING && GetVelocityVector().Length() >
|
if (mState == FLING && GetVelocityVector().Length() >
|
||||||
StaticPrefs::APZFlingStopOnTapThreshold()) {
|
StaticPrefs::apz_fling_stop_on_tap_threshold()) {
|
||||||
APZC_LOG("%p is moving fast\n", this);
|
APZC_LOG("%p is moving fast\n", this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -4206,7 +4212,7 @@ AsyncPanZoomController::GetCurrentAsyncTransformForFixedAdjustment(
|
||||||
// with apz.allow_zooming enabled).
|
// with apz.allow_zooming enabled).
|
||||||
// FIXME: bug 1525793 -- this may need to handle zooming or not on a
|
// FIXME: bug 1525793 -- this may need to handle zooming or not on a
|
||||||
// per-document basis.
|
// per-document basis.
|
||||||
return (StaticPrefs::APZAllowZooming() && Metrics().IsRootContent() &&
|
return (StaticPrefs::apz_allow_zooming() && Metrics().IsRootContent() &&
|
||||||
Metrics().GetVisualViewport().Size() <=
|
Metrics().GetVisualViewport().Size() <=
|
||||||
Metrics().GetLayoutViewport().Size())
|
Metrics().GetLayoutViewport().Size())
|
||||||
? GetCurrentAsyncViewportTransform(aMode)
|
? GetCurrentAsyncViewportTransform(aMode)
|
||||||
|
@ -4234,7 +4240,7 @@ LayoutDeviceToParentLayerScale AsyncPanZoomController::GetCurrentPinchZoomScale(
|
||||||
|
|
||||||
CSSRect AsyncPanZoomController::GetEffectiveLayoutViewport(
|
CSSRect AsyncPanZoomController::GetEffectiveLayoutViewport(
|
||||||
AsyncTransformConsumer aMode) const {
|
AsyncTransformConsumer aMode) const {
|
||||||
if (StaticPrefs::APZFrameDelayEnabled() && aMode == eForCompositing) {
|
if (StaticPrefs::apz_frame_delay_enabled() && aMode == eForCompositing) {
|
||||||
return mCompositedLayoutViewport;
|
return mCompositedLayoutViewport;
|
||||||
}
|
}
|
||||||
return Metrics().GetLayoutViewport();
|
return Metrics().GetLayoutViewport();
|
||||||
|
@ -4242,7 +4248,7 @@ CSSRect AsyncPanZoomController::GetEffectiveLayoutViewport(
|
||||||
|
|
||||||
CSSPoint AsyncPanZoomController::GetEffectiveScrollOffset(
|
CSSPoint AsyncPanZoomController::GetEffectiveScrollOffset(
|
||||||
AsyncTransformConsumer aMode) const {
|
AsyncTransformConsumer aMode) const {
|
||||||
if (StaticPrefs::APZFrameDelayEnabled() && aMode == eForCompositing) {
|
if (StaticPrefs::apz_frame_delay_enabled() && aMode == eForCompositing) {
|
||||||
return mCompositedScrollOffset;
|
return mCompositedScrollOffset;
|
||||||
}
|
}
|
||||||
return Metrics().GetScrollOffset();
|
return Metrics().GetScrollOffset();
|
||||||
|
@ -4250,7 +4256,7 @@ CSSPoint AsyncPanZoomController::GetEffectiveScrollOffset(
|
||||||
|
|
||||||
CSSToParentLayerScale2D AsyncPanZoomController::GetEffectiveZoom(
|
CSSToParentLayerScale2D AsyncPanZoomController::GetEffectiveZoom(
|
||||||
AsyncTransformConsumer aMode) const {
|
AsyncTransformConsumer aMode) const {
|
||||||
if (StaticPrefs::APZFrameDelayEnabled() && aMode == eForCompositing) {
|
if (StaticPrefs::apz_frame_delay_enabled() && aMode == eForCompositing) {
|
||||||
return mCompositedZoom;
|
return mCompositedZoom;
|
||||||
}
|
}
|
||||||
return Metrics().GetZoom();
|
return Metrics().GetZoom();
|
||||||
|
@ -4346,7 +4352,7 @@ void AsyncPanZoomController::ReportCheckerboard(const TimeStamp& aSampleTime) {
|
||||||
}
|
}
|
||||||
mLastCheckerboardReport = aSampleTime;
|
mLastCheckerboardReport = aSampleTime;
|
||||||
|
|
||||||
bool recordTrace = StaticPrefs::APZRecordCheckerboarding();
|
bool recordTrace = StaticPrefs::apz_record_checkerboarding();
|
||||||
bool forTelemetry = Telemetry::CanRecordExtended();
|
bool forTelemetry = Telemetry::CanRecordExtended();
|
||||||
uint32_t magnitude = GetCheckerboardMagnitude();
|
uint32_t magnitude = GetCheckerboardMagnitude();
|
||||||
|
|
||||||
|
@ -4375,7 +4381,7 @@ void AsyncPanZoomController::UpdateCheckerboardEvent(
|
||||||
|
|
||||||
mPotentialCheckerboardTracker.CheckerboardDone();
|
mPotentialCheckerboardTracker.CheckerboardDone();
|
||||||
|
|
||||||
if (StaticPrefs::APZRecordCheckerboarding()) {
|
if (StaticPrefs::apz_record_checkerboarding()) {
|
||||||
// if the pref is enabled, also send it to the storage class. it may be
|
// if the pref is enabled, also send it to the storage class. it may be
|
||||||
// chosen for public display on about:checkerboard, the hall of fame for
|
// chosen for public display on about:checkerboard, the hall of fame for
|
||||||
// checkerboard events.
|
// checkerboard events.
|
||||||
|
@ -4685,7 +4691,8 @@ void AsyncPanZoomController::NotifyLayersUpdated(
|
||||||
// this we need to update mExpectedGeckoMetrics to be the last thing we
|
// this we need to update mExpectedGeckoMetrics to be the last thing we
|
||||||
// know was painted by Gecko.
|
// know was painted by Gecko.
|
||||||
Maybe<CSSPoint> relativeDelta;
|
Maybe<CSSPoint> relativeDelta;
|
||||||
if (StaticPrefs::APZRelativeUpdate() && aLayerMetrics.IsRelative()) {
|
if (StaticPrefs::apz_relative_update_enabled() &&
|
||||||
|
aLayerMetrics.IsRelative()) {
|
||||||
APZC_LOG("%p relative updating scroll offset from %s by %s\n", this,
|
APZC_LOG("%p relative updating scroll offset from %s by %s\n", this,
|
||||||
ToString(Metrics().GetScrollOffset()).c_str(),
|
ToString(Metrics().GetScrollOffset()).c_str(),
|
||||||
ToString(aLayerMetrics.GetScrollOffset() -
|
ToString(aLayerMetrics.GetScrollOffset() -
|
||||||
|
@ -4760,7 +4767,8 @@ void AsyncPanZoomController::NotifyLayersUpdated(
|
||||||
|
|
||||||
// See comment on the similar code in the |if (scrollOffsetUpdated)| block
|
// See comment on the similar code in the |if (scrollOffsetUpdated)| block
|
||||||
// above.
|
// above.
|
||||||
if (StaticPrefs::APZRelativeUpdate() && aLayerMetrics.IsRelative()) {
|
if (StaticPrefs::apz_relative_update_enabled() &&
|
||||||
|
aLayerMetrics.IsRelative()) {
|
||||||
Metrics().ApplyRelativeSmoothScrollUpdateFrom(aLayerMetrics);
|
Metrics().ApplyRelativeSmoothScrollUpdateFrom(aLayerMetrics);
|
||||||
} else {
|
} else {
|
||||||
Metrics().ApplySmoothScrollUpdateFrom(aLayerMetrics);
|
Metrics().ApplySmoothScrollUpdateFrom(aLayerMetrics);
|
||||||
|
@ -5297,7 +5305,7 @@ void AsyncPanZoomController::ScrollSnap() {
|
||||||
void AsyncPanZoomController::ScrollSnapToDestination() {
|
void AsyncPanZoomController::ScrollSnapToDestination() {
|
||||||
RecursiveMutexAutoLock lock(mRecursiveMutex);
|
RecursiveMutexAutoLock lock(mRecursiveMutex);
|
||||||
|
|
||||||
float friction = StaticPrefs::APZFlingFriction();
|
float friction = StaticPrefs::apz_fling_friction();
|
||||||
ParentLayerPoint velocity(mX.GetVelocity(), mY.GetVelocity());
|
ParentLayerPoint velocity(mX.GetVelocity(), mY.GetVelocity());
|
||||||
ParentLayerPoint predictedDelta;
|
ParentLayerPoint predictedDelta;
|
||||||
// "-velocity / log(1.0 - friction)" is the integral of the deceleration
|
// "-velocity / log(1.0 - friction)" is the integral of the deceleration
|
||||||
|
|
|
@ -1162,9 +1162,9 @@ class AsyncPanZoomController {
|
||||||
* Returns true if the newly sampled value is different from the previously
|
* Returns true if the newly sampled value is different from the previously
|
||||||
* sampled value.
|
* sampled value.
|
||||||
*
|
*
|
||||||
* (This is only relevant when |StaticPrefs::APZFrameDelayEnabled() == true|.
|
* (This is only relevant when StaticPrefs::apz_frame_delay_enabled() is
|
||||||
* Otherwise, GetCurrentAsyncTransform() always reflects what's stored in
|
* true. Otherwise, GetCurrentAsyncTransform() always reflects what's stored
|
||||||
* |Metrics()| immediately, without any delay.)
|
* in |Metrics()| immediately, without any delay.)
|
||||||
*/
|
*/
|
||||||
bool SampleCompositedAsyncTransform();
|
bool SampleCompositedAsyncTransform();
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,8 @@ class DesktopFlingPhysics {
|
||||||
}
|
}
|
||||||
void Sample(const TimeDuration& aDelta, ParentLayerPoint* aOutVelocity,
|
void Sample(const TimeDuration& aDelta, ParentLayerPoint* aOutVelocity,
|
||||||
ParentLayerPoint* aOutOffset) {
|
ParentLayerPoint* aOutOffset) {
|
||||||
float friction = StaticPrefs::APZFlingFriction();
|
float friction = StaticPrefs::apz_fling_friction();
|
||||||
float threshold = StaticPrefs::APZFlingStoppedThreshold();
|
float threshold = StaticPrefs::apz_fling_stopped_threshold();
|
||||||
|
|
||||||
mVelocity = ParentLayerPoint(
|
mVelocity = ParentLayerPoint(
|
||||||
ApplyFrictionOrCancel(mVelocity.x, aDelta, friction, threshold),
|
ApplyFrictionOrCancel(mVelocity.x, aDelta, friction, threshold),
|
||||||
|
|
|
@ -138,7 +138,7 @@ FocusTarget::FocusTarget(PresShell* aRootPresShell,
|
||||||
|
|
||||||
// Check if there are key event listeners that could prevent default or change
|
// Check if there are key event listeners that could prevent default or change
|
||||||
// the focus or selection of the page.
|
// the focus or selection of the page.
|
||||||
if (StaticPrefs::APZKeyboardPassiveListeners()) {
|
if (StaticPrefs::apz_keyboard_passive_listeners()) {
|
||||||
mFocusHasKeyEventListeners =
|
mFocusHasKeyEventListeners =
|
||||||
HasListenersForNonPassiveKeyEvents(keyEventTarget.get());
|
HasListenersForNonPassiveKeyEvents(keyEventTarget.get());
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -94,8 +94,8 @@ class GenericFlingAnimation : public AsyncPanZoomAnimation,
|
||||||
bool applyAcceleration = !aFlingIsHandedOff;
|
bool applyAcceleration = !aFlingIsHandedOff;
|
||||||
if (applyAcceleration && !mApzc.mLastFlingTime.IsNull() &&
|
if (applyAcceleration && !mApzc.mLastFlingTime.IsNull() &&
|
||||||
(now - mApzc.mLastFlingTime).ToMilliseconds() <
|
(now - mApzc.mLastFlingTime).ToMilliseconds() <
|
||||||
StaticPrefs::APZFlingAccelInterval() &&
|
StaticPrefs::apz_fling_accel_interval_ms() &&
|
||||||
velocity.Length() >= StaticPrefs::APZFlingAccelMinVelocity()) {
|
velocity.Length() >= StaticPrefs::apz_fling_accel_min_velocity()) {
|
||||||
if (velocity.x != 0 &&
|
if (velocity.x != 0 &&
|
||||||
SameDirection(velocity.x, mApzc.mLastFlingVelocity.x)) {
|
SameDirection(velocity.x, mApzc.mLastFlingVelocity.x)) {
|
||||||
velocity.x = Accelerate(velocity.x, mApzc.mLastFlingVelocity.x);
|
velocity.x = Accelerate(velocity.x, mApzc.mLastFlingVelocity.x);
|
||||||
|
@ -220,8 +220,8 @@ class GenericFlingAnimation : public AsyncPanZoomAnimation,
|
||||||
}
|
}
|
||||||
|
|
||||||
static float Accelerate(float aBase, float aSupplemental) {
|
static float Accelerate(float aBase, float aSupplemental) {
|
||||||
return (aBase * StaticPrefs::APZFlingAccelBaseMultiplier()) +
|
return (aBase * StaticPrefs::apz_fling_accel_base_mult()) +
|
||||||
(aSupplemental * StaticPrefs::APZFlingAccelSupplementalMultiplier());
|
(aSupplemental * StaticPrefs::apz_fling_accel_supplemental_mult());
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncPanZoomController& mApzc;
|
AsyncPanZoomController& mApzc;
|
||||||
|
|
|
@ -291,13 +291,13 @@ nsEventStatus GestureEventListener::HandleInputTouchMove() {
|
||||||
|
|
||||||
// The user has performed a double tap, but not lifted her finger.
|
// The user has performed a double tap, but not lifted her finger.
|
||||||
case GESTURE_SECOND_SINGLE_TOUCH_DOWN: {
|
case GESTURE_SECOND_SINGLE_TOUCH_DOWN: {
|
||||||
// If touch has moved noticeably (within StaticPrefs::APZMaxTapTime()),
|
// If touch has moved noticeably (within StaticPrefs::apz_max_tap_time()),
|
||||||
// change state.
|
// change state.
|
||||||
if (MoveDistanceIsLarge()) {
|
if (MoveDistanceIsLarge()) {
|
||||||
CancelLongTapTimeoutTask();
|
CancelLongTapTimeoutTask();
|
||||||
CancelMaxTapTimeoutTask();
|
CancelMaxTapTimeoutTask();
|
||||||
mSingleTapSent = Nothing();
|
mSingleTapSent = Nothing();
|
||||||
if (!StaticPrefs::APZOneTouchPinchEnabled()) {
|
if (!StaticPrefs::apz_one_touch_pinch_enabled()) {
|
||||||
// If the one-touch-pinch feature is disabled, bail out of the double-
|
// If the one-touch-pinch feature is disabled, bail out of the double-
|
||||||
// tap gesture instead.
|
// tap gesture instead.
|
||||||
SetState(GESTURE_NONE);
|
SetState(GESTURE_NONE);
|
||||||
|
@ -629,7 +629,7 @@ void GestureEventListener::CreateMaxTapTimeoutTask() {
|
||||||
|
|
||||||
mMaxTapTimeoutTask = task;
|
mMaxTapTimeoutTask = task;
|
||||||
mAsyncPanZoomController->PostDelayedTask(task.forget(),
|
mAsyncPanZoomController->PostDelayedTask(task.forget(),
|
||||||
StaticPrefs::APZMaxTapTime());
|
StaticPrefs::apz_max_tap_time());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace layers
|
} // namespace layers
|
||||||
|
|
|
@ -150,7 +150,7 @@ bool InputBlockState::IsDownchainOf(AsyncPanZoomController* aA,
|
||||||
|
|
||||||
void InputBlockState::SetScrolledApzc(AsyncPanZoomController* aApzc) {
|
void InputBlockState::SetScrolledApzc(AsyncPanZoomController* aApzc) {
|
||||||
// An input block should only have one scrolled APZC.
|
// An input block should only have one scrolled APZC.
|
||||||
MOZ_ASSERT(!mScrolledApzc || (StaticPrefs::APZAllowImmediateHandoff()
|
MOZ_ASSERT(!mScrolledApzc || (StaticPrefs::apz_allow_immediate_handoff()
|
||||||
? IsDownchainOf(mScrolledApzc, aApzc)
|
? IsDownchainOf(mScrolledApzc, aApzc)
|
||||||
: mScrolledApzc == aApzc));
|
: mScrolledApzc == aApzc));
|
||||||
|
|
||||||
|
@ -783,8 +783,8 @@ Maybe<ScrollDirection> TouchBlockState::GetBestGuessPanDirection(
|
||||||
angle = fabs(angle); // range [0, pi]
|
angle = fabs(angle); // range [0, pi]
|
||||||
|
|
||||||
double angleThreshold = TouchActionAllowsPanningXY()
|
double angleThreshold = TouchActionAllowsPanningXY()
|
||||||
? StaticPrefs::APZAxisLockAngle()
|
? StaticPrefs::apz_axis_lock_lock_angle()
|
||||||
: StaticPrefs::APZAllowedDirectPanAngle();
|
: StaticPrefs::apz_axis_lock_direct_pan_angle();
|
||||||
if (apz::IsCloseToHorizontal(angle, angleThreshold)) {
|
if (apz::IsCloseToHorizontal(angle, angleThreshold)) {
|
||||||
return Some(ScrollDirection::eHorizontal);
|
return Some(ScrollDirection::eHorizontal);
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,7 +108,7 @@ class InputBlockState : public RefCounted<InputBlockState> {
|
||||||
// The APZC that was actually scrolled by events in this input block.
|
// The APZC that was actually scrolled by events in this input block.
|
||||||
// This is used in configurations where a single input block is only
|
// This is used in configurations where a single input block is only
|
||||||
// allowed to scroll a single APZC (configurations where
|
// allowed to scroll a single APZC (configurations where
|
||||||
// StaticPrefs::APZAllowImmediateHandoff() is false). Set the first time an
|
// StaticPrefs::apz_allow_immediate_handoff() is false). Set the first time an
|
||||||
// input event in this block scrolls an APZC.
|
// input event in this block scrolls an APZC.
|
||||||
RefPtr<AsyncPanZoomController> mScrolledApzc;
|
RefPtr<AsyncPanZoomController> mScrolledApzc;
|
||||||
|
|
||||||
|
|
|
@ -319,7 +319,7 @@ nsEventStatus InputQueue::ReceiveKeyboardInput(
|
||||||
|
|
||||||
// If APZ is allowing passive listeners then we must dispatch the event to
|
// If APZ is allowing passive listeners then we must dispatch the event to
|
||||||
// content, otherwise we can consume the event.
|
// content, otherwise we can consume the event.
|
||||||
return StaticPrefs::APZKeyboardPassiveListeners()
|
return StaticPrefs::apz_keyboard_passive_listeners()
|
||||||
? nsEventStatus_eConsumeDoDefault
|
? nsEventStatus_eConsumeDoDefault
|
||||||
: nsEventStatus_eConsumeNoDefault;
|
: nsEventStatus_eConsumeNoDefault;
|
||||||
}
|
}
|
||||||
|
@ -552,7 +552,7 @@ void InputQueue::ScheduleMainThreadTimeout(
|
||||||
RefPtr<Runnable> timeoutTask = NewRunnableMethod<uint64_t>(
|
RefPtr<Runnable> timeoutTask = NewRunnableMethod<uint64_t>(
|
||||||
"layers::InputQueue::MainThreadTimeout", this,
|
"layers::InputQueue::MainThreadTimeout", this,
|
||||||
&InputQueue::MainThreadTimeout, aBlock->GetBlockId());
|
&InputQueue::MainThreadTimeout, aBlock->GetBlockId());
|
||||||
int32_t timeout = StaticPrefs::APZContentResponseTimeout();
|
int32_t timeout = StaticPrefs::apz_content_response_timeout();
|
||||||
if (timeout == 0) {
|
if (timeout == 0) {
|
||||||
// If the timeout is zero, treat it as a request to ignore any main
|
// If the timeout is zero, treat it as a request to ignore any main
|
||||||
// thread confirmation and unconditionally use fallback behaviour for
|
// thread confirmation and unconditionally use fallback behaviour for
|
||||||
|
|
|
@ -86,7 +86,7 @@ Maybe<float> SimpleVelocityTracker::ComputeVelocity(uint32_t aTimestampMs) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (const auto& e : mVelocityQueue) {
|
for (const auto& e : mVelocityQueue) {
|
||||||
uint32_t timeDelta = (aTimestampMs - e.first);
|
uint32_t timeDelta = (aTimestampMs - e.first);
|
||||||
if (timeDelta < StaticPrefs::APZVelocityRelevanceTime()) {
|
if (timeDelta < StaticPrefs::apz_velocity_relevance_time_ms()) {
|
||||||
count++;
|
count++;
|
||||||
velocity += e.second;
|
velocity += e.second;
|
||||||
}
|
}
|
||||||
|
@ -103,24 +103,26 @@ void SimpleVelocityTracker::Clear() { mVelocityQueue.Clear(); }
|
||||||
void SimpleVelocityTracker::AddVelocityToQueue(uint32_t aTimestampMs,
|
void SimpleVelocityTracker::AddVelocityToQueue(uint32_t aTimestampMs,
|
||||||
float aVelocity) {
|
float aVelocity) {
|
||||||
mVelocityQueue.AppendElement(std::make_pair(aTimestampMs, aVelocity));
|
mVelocityQueue.AppendElement(std::make_pair(aTimestampMs, aVelocity));
|
||||||
if (mVelocityQueue.Length() > StaticPrefs::APZMaxVelocityQueueSize()) {
|
if (mVelocityQueue.Length() > StaticPrefs::apz_max_velocity_queue_size()) {
|
||||||
mVelocityQueue.RemoveElementAt(0);
|
mVelocityQueue.RemoveElementAt(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float SimpleVelocityTracker::ApplyFlingCurveToVelocity(float aVelocity) const {
|
float SimpleVelocityTracker::ApplyFlingCurveToVelocity(float aVelocity) const {
|
||||||
float newVelocity = aVelocity;
|
float newVelocity = aVelocity;
|
||||||
if (StaticPrefs::APZMaxVelocity() > 0.0f) {
|
if (StaticPrefs::apz_max_velocity_inches_per_ms() > 0.0f) {
|
||||||
bool velocityIsNegative = (newVelocity < 0);
|
bool velocityIsNegative = (newVelocity < 0);
|
||||||
newVelocity = fabs(newVelocity);
|
newVelocity = fabs(newVelocity);
|
||||||
|
|
||||||
float maxVelocity = mAxis->ToLocalVelocity(StaticPrefs::APZMaxVelocity());
|
float maxVelocity =
|
||||||
|
mAxis->ToLocalVelocity(StaticPrefs::apz_max_velocity_inches_per_ms());
|
||||||
newVelocity = std::min(newVelocity, maxVelocity);
|
newVelocity = std::min(newVelocity, maxVelocity);
|
||||||
|
|
||||||
if (StaticPrefs::APZCurveThreshold() > 0.0f &&
|
if (StaticPrefs::apz_fling_curve_threshold_inches_per_ms() > 0.0f &&
|
||||||
StaticPrefs::APZCurveThreshold() < StaticPrefs::APZMaxVelocity()) {
|
StaticPrefs::apz_fling_curve_threshold_inches_per_ms() <
|
||||||
float curveThreshold =
|
StaticPrefs::apz_max_velocity_inches_per_ms()) {
|
||||||
mAxis->ToLocalVelocity(StaticPrefs::APZCurveThreshold());
|
float curveThreshold = mAxis->ToLocalVelocity(
|
||||||
|
StaticPrefs::apz_fling_curve_threshold_inches_per_ms());
|
||||||
if (newVelocity > curveThreshold) {
|
if (newVelocity > curveThreshold) {
|
||||||
// here, 0 < curveThreshold < newVelocity <= maxVelocity, so we apply
|
// here, 0 < curveThreshold < newVelocity <= maxVelocity, so we apply
|
||||||
// the curve
|
// the curve
|
||||||
|
|
|
@ -161,7 +161,8 @@ class APZCPinchLockingTester : public APZCPinchTester {
|
||||||
|
|
||||||
void twoFingerPan() {
|
void twoFingerPan() {
|
||||||
ScreenCoord panDistance =
|
ScreenCoord panDistance =
|
||||||
StaticPrefs::APZPinchLockScrollLockThreshold() * 1.2 * tm->GetDPI();
|
StaticPrefs::apz_pinch_lock_scroll_lock_threshold() * 1.2 *
|
||||||
|
tm->GetDPI();
|
||||||
|
|
||||||
mFocus = ScreenIntPoint((int)(mFocus.x + panDistance), (int)(mFocus.y));
|
mFocus = ScreenIntPoint((int)(mFocus.x + panDistance), (int)(mFocus.y));
|
||||||
|
|
||||||
|
@ -174,7 +175,8 @@ class APZCPinchLockingTester : public APZCPinchTester {
|
||||||
|
|
||||||
void twoFingerZoom() {
|
void twoFingerZoom() {
|
||||||
float pinchDistance =
|
float pinchDistance =
|
||||||
StaticPrefs::APZPinchLockSpanBreakoutThreshold() * 1.2 * tm->GetDPI();
|
StaticPrefs::apz_pinch_lock_span_breakout_threshold() * 1.2 *
|
||||||
|
tm->GetDPI();
|
||||||
|
|
||||||
float newSpan = mSpan + pinchDistance;
|
float newSpan = mSpan + pinchDistance;
|
||||||
|
|
||||||
|
@ -191,7 +193,8 @@ class APZCPinchLockingTester : public APZCPinchTester {
|
||||||
|
|
||||||
// Send a small scale input to the APZC
|
// Send a small scale input to the APZC
|
||||||
float pinchDistance =
|
float pinchDistance =
|
||||||
StaticPrefs::APZPinchLockSpanBreakoutThreshold() * 0.8 * tm->GetDPI();
|
StaticPrefs::apz_pinch_lock_span_breakout_threshold() * 0.8 *
|
||||||
|
tm->GetDPI();
|
||||||
apzc->ReceiveInputEvent(
|
apzc->ReceiveInputEvent(
|
||||||
CreatePinchGestureInput(PinchGestureInput::PINCHGESTURE_SCALE, mFocus,
|
CreatePinchGestureInput(PinchGestureInput::PINCHGESTURE_SCALE, mFocus,
|
||||||
mSpan + pinchDistance, mSpan, mcc->Time()),
|
mSpan + pinchDistance, mSpan, mcc->Time()),
|
||||||
|
@ -252,7 +255,7 @@ TEST_F(APZCPinchGestureDetectorTester,
|
||||||
|
|
||||||
// Since we are preventing the pinch action via touch-action we should not be
|
// Since we are preventing the pinch action via touch-action we should not be
|
||||||
// sending the pinch gesture notifications that would normally be sent when
|
// sending the pinch gesture notifications that would normally be sent when
|
||||||
// APZAllowZooming is false.
|
// apz_allow_zooming is false.
|
||||||
EXPECT_CALL(*mcc, NotifyPinchGesture(_, _, _, _)).Times(0);
|
EXPECT_CALL(*mcc, NotifyPinchGesture(_, _, _, _)).Times(0);
|
||||||
nsTArray<uint32_t> behaviors = {mozilla::layers::AllowedTouchBehavior::NONE,
|
nsTArray<uint32_t> behaviors = {mozilla::layers::AllowedTouchBehavior::NONE,
|
||||||
mozilla::layers::AllowedTouchBehavior::NONE};
|
mozilla::layers::AllowedTouchBehavior::NONE};
|
||||||
|
@ -267,7 +270,7 @@ TEST_F(APZCPinchGestureDetectorTester, Pinch_PreventDefault_NoAPZZoom) {
|
||||||
SCOPED_GFX_PREF_BOOL("apz.allow_zooming", false);
|
SCOPED_GFX_PREF_BOOL("apz.allow_zooming", false);
|
||||||
|
|
||||||
// Since we are preventing the pinch action we should not be sending the pinch
|
// Since we are preventing the pinch action we should not be sending the pinch
|
||||||
// gesture notifications that would normally be sent when APZAllowZooming is
|
// gesture notifications that would normally be sent when apz_allow_zooming is
|
||||||
// false.
|
// false.
|
||||||
EXPECT_CALL(*mcc, NotifyPinchGesture(_, _, _, _)).Times(0);
|
EXPECT_CALL(*mcc, NotifyPinchGesture(_, _, _, _)).Times(0);
|
||||||
|
|
||||||
|
@ -435,11 +438,11 @@ TEST_F(APZCPinchGestureDetectorTester, Pinch_APZZoom_Disabled) {
|
||||||
FrameMetrics originalMetrics = GetPinchableFrameMetrics();
|
FrameMetrics originalMetrics = GetPinchableFrameMetrics();
|
||||||
apzc->SetFrameMetrics(originalMetrics);
|
apzc->SetFrameMetrics(originalMetrics);
|
||||||
|
|
||||||
// When APZAllowZooming is false, the ZoomConstraintsClient produces
|
// When apz_allow_zooming is false, the ZoomConstraintsClient produces
|
||||||
// ZoomConstraints with mAllowZoom set to false.
|
// ZoomConstraints with mAllowZoom set to false.
|
||||||
MakeApzcUnzoomable();
|
MakeApzcUnzoomable();
|
||||||
|
|
||||||
// With APZAllowZooming false, we expect the NotifyPinchGesture function to
|
// With apz_allow_zooming false, we expect the NotifyPinchGesture function to
|
||||||
// get called as the pinch progresses, but the metrics shouldn't change.
|
// get called as the pinch progresses, but the metrics shouldn't change.
|
||||||
EXPECT_CALL(*mcc,
|
EXPECT_CALL(*mcc,
|
||||||
NotifyPinchGesture(PinchGestureInput::PINCHGESTURE_START,
|
NotifyPinchGesture(PinchGestureInput::PINCHGESTURE_START,
|
||||||
|
@ -474,11 +477,11 @@ TEST_F(APZCPinchGestureDetectorTester, Pinch_NoSpan) {
|
||||||
FrameMetrics originalMetrics = GetPinchableFrameMetrics();
|
FrameMetrics originalMetrics = GetPinchableFrameMetrics();
|
||||||
apzc->SetFrameMetrics(originalMetrics);
|
apzc->SetFrameMetrics(originalMetrics);
|
||||||
|
|
||||||
// When APZAllowZooming is false, the ZoomConstraintsClient produces
|
// When apz_allow_zooming is false, the ZoomConstraintsClient produces
|
||||||
// ZoomConstraints with mAllowZoom set to false.
|
// ZoomConstraints with mAllowZoom set to false.
|
||||||
MakeApzcUnzoomable();
|
MakeApzcUnzoomable();
|
||||||
|
|
||||||
// With APZAllowZooming false, we expect the NotifyPinchGesture function to
|
// With apz_allow_zooming false, we expect the NotifyPinchGesture function to
|
||||||
// get called as the pinch progresses, but the metrics shouldn't change.
|
// get called as the pinch progresses, but the metrics shouldn't change.
|
||||||
EXPECT_CALL(*mcc,
|
EXPECT_CALL(*mcc,
|
||||||
NotifyPinchGesture(PinchGestureInput::PINCHGESTURE_START,
|
NotifyPinchGesture(PinchGestureInput::PINCHGESTURE_START,
|
||||||
|
|
|
@ -524,6 +524,7 @@ TEST_F(APZScrollHandoffTester, Scrollgrab) {
|
||||||
|
|
||||||
TEST_F(APZScrollHandoffTester, ScrollgrabFling) {
|
TEST_F(APZScrollHandoffTester, ScrollgrabFling) {
|
||||||
SCOPED_GFX_PREF_FLOAT("apz.fling_min_velocity_threshold", 0.0f);
|
SCOPED_GFX_PREF_FLOAT("apz.fling_min_velocity_threshold", 0.0f);
|
||||||
|
|
||||||
// Set up the layer tree
|
// Set up the layer tree
|
||||||
CreateScrollgrabLayerTree();
|
CreateScrollgrabLayerTree();
|
||||||
|
|
||||||
|
|
|
@ -191,7 +191,7 @@ void CheckerboardReportService::GetReports(
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheckerboardReportService::IsRecordingEnabled() const {
|
bool CheckerboardReportService::IsRecordingEnabled() const {
|
||||||
return StaticPrefs::APZRecordCheckerboarding();
|
return StaticPrefs::apz_record_checkerboarding();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckerboardReportService::SetRecordingEnabled(bool aEnabled) {
|
void CheckerboardReportService::SetRecordingEnabled(bool aEnabled) {
|
||||||
|
|
|
@ -229,9 +229,9 @@ bool SharedFrameMetricsHelper::AboutToCheckerboard(
|
||||||
CSSRect showing =
|
CSSRect showing =
|
||||||
CSSRect(aCompositorMetrics.GetScrollOffset(),
|
CSSRect(aCompositorMetrics.GetScrollOffset(),
|
||||||
aCompositorMetrics.CalculateBoundedCompositedSizeInCssPixels());
|
aCompositorMetrics.CalculateBoundedCompositedSizeInCssPixels());
|
||||||
showing.Inflate(
|
showing.Inflate(LayerSize(StaticPrefs::apz_danger_zone_x(),
|
||||||
LayerSize(StaticPrefs::APZDangerZoneX(), StaticPrefs::APZDangerZoneY()) /
|
StaticPrefs::apz_danger_zone_y()) /
|
||||||
aCompositorMetrics.LayersPixelsPerCSSPixel());
|
aCompositorMetrics.LayersPixelsPerCSSPixel());
|
||||||
|
|
||||||
// Clamp both rects to the scrollable rect, because having either of those
|
// Clamp both rects to the scrollable rect, because having either of those
|
||||||
// exceed the scrollable rect doesn't make sense, and could lead to false
|
// exceed the scrollable rect doesn't make sense, and could lead to false
|
||||||
|
|
|
@ -1487,9 +1487,9 @@ void AsyncCompositionManager::SetFixedLayerMargins(ScreenIntCoord aTop,
|
||||||
}
|
}
|
||||||
ScreenMargin AsyncCompositionManager::GetFixedLayerMargins() const {
|
ScreenMargin AsyncCompositionManager::GetFixedLayerMargins() const {
|
||||||
ScreenMargin result = mFixedLayerMargins;
|
ScreenMargin result = mFixedLayerMargins;
|
||||||
if (StaticPrefs::APZFixedMarginOverrideEnabled()) {
|
if (StaticPrefs::apz_fixed_margin_override_enabled()) {
|
||||||
result.top = StaticPrefs::APZFixedMarginOverrideTop();
|
result.top = StaticPrefs::apz_fixed_margin_override_top();
|
||||||
result.bottom = StaticPrefs::APZFixedMarginOverrideBottom();
|
result.bottom = StaticPrefs::apz_fixed_margin_override_bottom();
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -509,7 +509,7 @@ void RenderLayers(ContainerT* aContainer, LayerManagerComposite* aManager,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StaticPrefs::APZMinimap()) {
|
if (StaticPrefs::apz_minimap_enabled()) {
|
||||||
RenderMinimap(aContainer, sampler, aManager, aClipRect, layer);
|
RenderMinimap(aContainer, sampler, aManager, aClipRect, layer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,10 @@ struct precache_output
|
||||||
#define ALIGN __attribute__(( aligned (16) ))
|
#define ALIGN __attribute__(( aligned (16) ))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct _qcms_transform;
|
||||||
|
|
||||||
|
typedef void (*transform_fn_t)(const struct _qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length);
|
||||||
|
|
||||||
struct _qcms_transform {
|
struct _qcms_transform {
|
||||||
float ALIGN matrix[3][4];
|
float ALIGN matrix[3][4];
|
||||||
float *input_gamma_table_r;
|
float *input_gamma_table_r;
|
||||||
|
@ -74,7 +78,7 @@ struct _qcms_transform {
|
||||||
struct precache_output *output_table_g;
|
struct precache_output *output_table_g;
|
||||||
struct precache_output *output_table_b;
|
struct precache_output *output_table_b;
|
||||||
|
|
||||||
void (*transform_fn)(const struct _qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length);
|
transform_fn_t transform_fn;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct matrix {
|
struct matrix {
|
||||||
|
@ -264,6 +268,32 @@ void precache_release(struct precache_output *p);
|
||||||
bool set_rgb_colorants(qcms_profile *profile, qcms_CIE_xyY white_point, qcms_CIE_xyYTRIPLE primaries);
|
bool set_rgb_colorants(qcms_profile *profile, qcms_CIE_xyY white_point, qcms_CIE_xyYTRIPLE primaries);
|
||||||
bool get_rgb_colorants(struct matrix *colorants, qcms_CIE_xyY white_point, qcms_CIE_xyYTRIPLE primaries);
|
bool get_rgb_colorants(struct matrix *colorants, qcms_CIE_xyY white_point, qcms_CIE_xyYTRIPLE primaries);
|
||||||
|
|
||||||
|
void qcms_transform_data_rgb_out_lut(const qcms_transform *transform,
|
||||||
|
const unsigned char *src,
|
||||||
|
unsigned char *dest,
|
||||||
|
size_t length);
|
||||||
|
void qcms_transform_data_rgba_out_lut(const qcms_transform *transform,
|
||||||
|
const unsigned char *src,
|
||||||
|
unsigned char *dest,
|
||||||
|
size_t length);
|
||||||
|
void qcms_transform_data_bgra_out_lut(const qcms_transform *transform,
|
||||||
|
const unsigned char *src,
|
||||||
|
unsigned char *dest,
|
||||||
|
size_t length);
|
||||||
|
|
||||||
|
void qcms_transform_data_rgb_out_lut_precache(const qcms_transform *transform,
|
||||||
|
const unsigned char *src,
|
||||||
|
unsigned char *dest,
|
||||||
|
size_t length);
|
||||||
|
void qcms_transform_data_rgba_out_lut_precache(const qcms_transform *transform,
|
||||||
|
const unsigned char *src,
|
||||||
|
unsigned char *dest,
|
||||||
|
size_t length);
|
||||||
|
void qcms_transform_data_bgra_out_lut_precache(const qcms_transform *transform,
|
||||||
|
const unsigned char *src,
|
||||||
|
unsigned char *dest,
|
||||||
|
size_t length);
|
||||||
|
|
||||||
void qcms_transform_data_rgb_out_lut_sse2(const qcms_transform *transform,
|
void qcms_transform_data_rgb_out_lut_sse2(const qcms_transform *transform,
|
||||||
const unsigned char *src,
|
const unsigned char *src,
|
||||||
unsigned char *dest,
|
unsigned char *dest,
|
||||||
|
|
|
@ -513,17 +513,17 @@ static void qcms_transform_data_template_lut_precache(const qcms_transform *tran
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qcms_transform_data_rgb_out_lut_precache(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
void qcms_transform_data_rgb_out_lut_precache(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
||||||
{
|
{
|
||||||
qcms_transform_data_template_lut_precache<RGBA_R_INDEX, RGBA_G_INDEX, RGBA_B_INDEX>(transform, src, dest, length);
|
qcms_transform_data_template_lut_precache<RGBA_R_INDEX, RGBA_G_INDEX, RGBA_B_INDEX>(transform, src, dest, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qcms_transform_data_rgba_out_lut_precache(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
void qcms_transform_data_rgba_out_lut_precache(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
||||||
{
|
{
|
||||||
qcms_transform_data_template_lut_precache<RGBA_R_INDEX, RGBA_G_INDEX, RGBA_B_INDEX, RGBA_A_INDEX>(transform, src, dest, length);
|
qcms_transform_data_template_lut_precache<RGBA_R_INDEX, RGBA_G_INDEX, RGBA_B_INDEX, RGBA_A_INDEX>(transform, src, dest, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qcms_transform_data_bgra_out_lut_precache(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
void qcms_transform_data_bgra_out_lut_precache(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
||||||
{
|
{
|
||||||
qcms_transform_data_template_lut_precache<BGRA_R_INDEX, BGRA_G_INDEX, BGRA_B_INDEX, BGRA_A_INDEX>(transform, src, dest, length);
|
qcms_transform_data_template_lut_precache<BGRA_R_INDEX, BGRA_G_INDEX, BGRA_B_INDEX, BGRA_A_INDEX>(transform, src, dest, length);
|
||||||
}
|
}
|
||||||
|
@ -772,17 +772,17 @@ static void qcms_transform_data_template_lut(const qcms_transform *transform, co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qcms_transform_data_rgb_out_lut(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
void qcms_transform_data_rgb_out_lut(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
||||||
{
|
{
|
||||||
qcms_transform_data_template_lut<RGBA_R_INDEX, RGBA_G_INDEX, RGBA_B_INDEX>(transform, src, dest, length);
|
qcms_transform_data_template_lut<RGBA_R_INDEX, RGBA_G_INDEX, RGBA_B_INDEX>(transform, src, dest, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qcms_transform_data_rgba_out_lut(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
void qcms_transform_data_rgba_out_lut(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
||||||
{
|
{
|
||||||
qcms_transform_data_template_lut<RGBA_R_INDEX, RGBA_G_INDEX, RGBA_B_INDEX, RGBA_A_INDEX>(transform, src, dest, length);
|
qcms_transform_data_template_lut<RGBA_R_INDEX, RGBA_G_INDEX, RGBA_B_INDEX, RGBA_A_INDEX>(transform, src, dest, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qcms_transform_data_bgra_out_lut(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
void qcms_transform_data_bgra_out_lut(const qcms_transform *transform, const unsigned char *src, unsigned char *dest, size_t length)
|
||||||
{
|
{
|
||||||
qcms_transform_data_template_lut<BGRA_R_INDEX, BGRA_G_INDEX, BGRA_B_INDEX, BGRA_A_INDEX>(transform, src, dest, length);
|
qcms_transform_data_template_lut<BGRA_R_INDEX, BGRA_G_INDEX, BGRA_B_INDEX, BGRA_A_INDEX>(transform, src, dest, length);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,63 +4,25 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
#include "gtest/MozGTestBench.h"
|
||||||
#include "gmock/gmock.h"
|
#include "gmock/gmock.h"
|
||||||
|
|
||||||
#include "mozilla/ArrayUtils.h"
|
#include "mozilla/ArrayUtils.h"
|
||||||
|
#include "mozilla/UniquePtr.h"
|
||||||
|
#include "mozilla/SSE.h"
|
||||||
|
#include "mozilla/arm.h"
|
||||||
#include "qcms.h"
|
#include "qcms.h"
|
||||||
#include "qcmsint.h"
|
#include "qcmsint.h"
|
||||||
#include "transform_util.h"
|
#include "transform_util.h"
|
||||||
|
|
||||||
const size_t allGBSize = 1 * 256 * 256 * 4;
|
#include <cmath>
|
||||||
static unsigned char* createAllGB() {
|
|
||||||
unsigned char* buff = (unsigned char*)malloc(allGBSize);
|
|
||||||
int pos = 0;
|
|
||||||
for (int r = 0; r < 1; r++) { // Skip all R values for speed
|
|
||||||
for (int g = 0; g < 256; g++) {
|
|
||||||
for (int b = 0; b < 256; b++) {
|
|
||||||
buff[pos * 4 + 0] = r;
|
|
||||||
buff[pos * 4 + 1] = g;
|
|
||||||
buff[pos * 4 + 2] = b;
|
|
||||||
buff[pos * 4 + 3] = 0x80;
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return buff;
|
/* SSEv1 is only included in non-Windows or non-x86-64-bit builds. */
|
||||||
}
|
#if defined(MOZILLA_MAY_SUPPORT_SSE) && (!(defined(_MSC_VER) && defined(_M_AMD64)))
|
||||||
|
#define QCMS_MAY_SUPPORT_SSE
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST(GfxQcms, Identity)
|
using namespace mozilla;
|
||||||
{
|
|
||||||
// XXX: This means that we can't have qcms v2 unit test
|
|
||||||
// without changing the qcms API.
|
|
||||||
qcms_enable_iccv4();
|
|
||||||
|
|
||||||
qcms_profile* input_profile = qcms_profile_sRGB();
|
|
||||||
qcms_profile* output_profile = qcms_profile_sRGB();
|
|
||||||
|
|
||||||
EXPECT_FALSE(qcms_profile_is_bogus(input_profile));
|
|
||||||
EXPECT_FALSE(qcms_profile_is_bogus(output_profile));
|
|
||||||
|
|
||||||
const qcms_intent intent = QCMS_INTENT_DEFAULT;
|
|
||||||
qcms_data_type input_type = QCMS_DATA_RGBA_8;
|
|
||||||
qcms_data_type output_type = QCMS_DATA_RGBA_8;
|
|
||||||
|
|
||||||
qcms_transform* transform = qcms_transform_create(
|
|
||||||
input_profile, input_type, output_profile, output_type, intent);
|
|
||||||
|
|
||||||
unsigned char* data_in = createAllGB();
|
|
||||||
;
|
|
||||||
unsigned char* data_out = (unsigned char*)malloc(allGBSize);
|
|
||||||
qcms_transform_data(transform, data_in, data_out, allGBSize / 4);
|
|
||||||
|
|
||||||
qcms_profile_release(input_profile);
|
|
||||||
qcms_profile_release(output_profile);
|
|
||||||
qcms_transform_release(transform);
|
|
||||||
|
|
||||||
free(data_in);
|
|
||||||
free(data_out);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(GfxQcms, LutInverseCrash)
|
TEST(GfxQcms, LutInverseCrash)
|
||||||
{
|
{
|
||||||
|
@ -174,3 +136,484 @@ TEST(GfxQcms, LutInverseNonMonotonic)
|
||||||
|
|
||||||
// Make sure we don't crash, hang or let sanitizers do their magic
|
// Make sure we don't crash, hang or let sanitizers do their magic
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool CmpRgbChannel(const uint8_t* aRef, const uint8_t* aTest,
|
||||||
|
size_t aIndex) {
|
||||||
|
return std::abs(static_cast<int8_t>(aRef[aIndex] - aTest[aIndex])) <= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <bool kSwapRB, bool kHasAlpha>
|
||||||
|
static bool CmpRgbBufferImpl(const uint8_t* aRefBuffer,
|
||||||
|
const uint8_t* aTestBuffer, size_t aPixels) {
|
||||||
|
const size_t pixelSize = kHasAlpha ? 4 : 3;
|
||||||
|
if (memcmp(aRefBuffer, aTestBuffer, aPixels * pixelSize) == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const size_t kRIndex = kSwapRB ? 2 : 0;
|
||||||
|
const size_t kGIndex = 1;
|
||||||
|
const size_t kBIndex = kSwapRB ? 0 : 2;
|
||||||
|
const size_t kAIndex = 3;
|
||||||
|
|
||||||
|
size_t remaining = aPixels;
|
||||||
|
const uint8_t* ref = aRefBuffer;
|
||||||
|
const uint8_t* test = aTestBuffer;
|
||||||
|
while (remaining > 0) {
|
||||||
|
if (!CmpRgbChannel(ref, test, kRIndex) ||
|
||||||
|
!CmpRgbChannel(ref, test, kGIndex) ||
|
||||||
|
!CmpRgbChannel(ref, test, kBIndex) ||
|
||||||
|
(kHasAlpha && ref[kAIndex] != test[kAIndex])) {
|
||||||
|
EXPECT_EQ(test[kRIndex], ref[kRIndex]);
|
||||||
|
EXPECT_EQ(test[kGIndex], ref[kGIndex]);
|
||||||
|
EXPECT_EQ(test[kBIndex], ref[kBIndex]);
|
||||||
|
if (kHasAlpha) {
|
||||||
|
EXPECT_EQ(test[kAIndex], ref[kAIndex]);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
--remaining;
|
||||||
|
ref += pixelSize;
|
||||||
|
test += pixelSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <bool kSwapRB, bool kHasAlpha>
|
||||||
|
static size_t GetRgbInputBufferImpl(UniquePtr<uint8_t[]>& aOutBuffer) {
|
||||||
|
const uint8_t colorSamples[] = {0, 5, 16, 43, 101, 127, 182, 255};
|
||||||
|
const size_t colorSampleMax = sizeof(colorSamples) / sizeof(uint8_t);
|
||||||
|
const size_t pixelSize = kHasAlpha ? 4 : 3;
|
||||||
|
const size_t pixelCount = colorSampleMax * colorSampleMax * 256 * 3;
|
||||||
|
|
||||||
|
aOutBuffer = MakeUnique<uint8_t[]>(pixelCount * pixelSize);
|
||||||
|
if (!aOutBuffer) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const size_t kRIndex = kSwapRB ? 2 : 0;
|
||||||
|
const size_t kGIndex = 1;
|
||||||
|
const size_t kBIndex = kSwapRB ? 0 : 2;
|
||||||
|
const size_t kAIndex = 3;
|
||||||
|
|
||||||
|
// Sample every red pixel value with a subset of green and blue.
|
||||||
|
uint8_t* color = aOutBuffer.get();
|
||||||
|
for (uint16_t r = 0; r < 256; ++r) {
|
||||||
|
for (uint8_t g : colorSamples) {
|
||||||
|
for (uint8_t b : colorSamples) {
|
||||||
|
color[kRIndex] = r;
|
||||||
|
color[kGIndex] = g;
|
||||||
|
color[kBIndex] = b;
|
||||||
|
if (kHasAlpha) {
|
||||||
|
color[kAIndex] = 0x80;
|
||||||
|
}
|
||||||
|
color += pixelSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sample every green pixel value with a subset of red and blue.
|
||||||
|
for (uint8_t r : colorSamples) {
|
||||||
|
for (uint16_t g = 0; g < 256; ++g) {
|
||||||
|
for (uint8_t b : colorSamples) {
|
||||||
|
color[kRIndex] = r;
|
||||||
|
color[kGIndex] = g;
|
||||||
|
color[kBIndex] = b;
|
||||||
|
if (kHasAlpha) {
|
||||||
|
color[kAIndex] = 0x80;
|
||||||
|
}
|
||||||
|
color += pixelSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sample every blue pixel value with a subset of red and green.
|
||||||
|
for (uint8_t r : colorSamples) {
|
||||||
|
for (uint8_t g : colorSamples) {
|
||||||
|
for (uint16_t b = 0; b < 256; ++b) {
|
||||||
|
color[kRIndex] = r;
|
||||||
|
color[kGIndex] = g;
|
||||||
|
color[kBIndex] = b;
|
||||||
|
if (kHasAlpha) {
|
||||||
|
color[kAIndex] = 0x80;
|
||||||
|
}
|
||||||
|
color += pixelSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pixelCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t GetRgbInputBuffer(UniquePtr<uint8_t[]>& aOutBuffer) {
|
||||||
|
return GetRgbInputBufferImpl<false, false>(aOutBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t GetRgbaInputBuffer(UniquePtr<uint8_t[]>& aOutBuffer) {
|
||||||
|
return GetRgbInputBufferImpl<false, true>(aOutBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t GetBgraInputBuffer(UniquePtr<uint8_t[]>& aOutBuffer) {
|
||||||
|
return GetRgbInputBufferImpl<true, true>(aOutBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool CmpRgbBuffer(const uint8_t* aRefBuffer, const uint8_t* aTestBuffer,
|
||||||
|
size_t aPixels) {
|
||||||
|
return CmpRgbBufferImpl<false, false>(aRefBuffer, aTestBuffer, aPixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool CmpRgbaBuffer(const uint8_t* aRefBuffer, const uint8_t* aTestBuffer,
|
||||||
|
size_t aPixels) {
|
||||||
|
return CmpRgbBufferImpl<false, true>(aRefBuffer, aTestBuffer, aPixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool CmpBgraBuffer(const uint8_t* aRefBuffer, const uint8_t* aTestBuffer,
|
||||||
|
size_t aPixels) {
|
||||||
|
return CmpRgbBufferImpl<true, true>(aRefBuffer, aTestBuffer, aPixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ClearRgbBuffer(uint8_t* aBuffer, size_t aPixels) {
|
||||||
|
if (aBuffer) {
|
||||||
|
memset(aBuffer, 0, aPixels * 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ClearRgbaBuffer(uint8_t* aBuffer, size_t aPixels) {
|
||||||
|
if (aBuffer) {
|
||||||
|
memset(aBuffer, 0, aPixels * 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static UniquePtr<uint8_t[]> GetRgbOutputBuffer(size_t aPixels) {
|
||||||
|
UniquePtr<uint8_t[]> buffer = MakeUnique<uint8_t[]>(aPixels * 3);
|
||||||
|
ClearRgbBuffer(buffer.get(), aPixels);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
static UniquePtr<uint8_t[]> GetRgbaOutputBuffer(size_t aPixels) {
|
||||||
|
UniquePtr<uint8_t[]> buffer = MakeUnique<uint8_t[]>(aPixels * 4);
|
||||||
|
ClearRgbaBuffer(buffer.get(), aPixels);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
class GfxQcms_ProfilePairBase : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
GfxQcms_ProfilePairBase()
|
||||||
|
: mInProfile(nullptr),
|
||||||
|
mOutProfile(nullptr),
|
||||||
|
mTransform(nullptr),
|
||||||
|
mPixels(0),
|
||||||
|
mStorageType(QCMS_DATA_RGB_8),
|
||||||
|
mPrecache(false) {}
|
||||||
|
|
||||||
|
void TransformPrecache();
|
||||||
|
void TransformPrecachePlatformExt();
|
||||||
|
|
||||||
|
void SetUp() override {
|
||||||
|
// XXX: This means that we can't have qcms v2 unit test
|
||||||
|
// without changing the qcms API.
|
||||||
|
qcms_enable_iccv4();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TearDown() override {
|
||||||
|
if (mInProfile) {
|
||||||
|
qcms_profile_release(mInProfile);
|
||||||
|
}
|
||||||
|
if (mOutProfile) {
|
||||||
|
qcms_profile_release(mOutProfile);
|
||||||
|
}
|
||||||
|
if (mTransform) {
|
||||||
|
qcms_transform_release(mTransform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SetTransform(qcms_transform* aTransform) {
|
||||||
|
if (mTransform) {
|
||||||
|
qcms_transform_release(mTransform);
|
||||||
|
}
|
||||||
|
mTransform = aTransform;
|
||||||
|
return !!mTransform;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SetTransform(qcms_data_type aType) {
|
||||||
|
return SetTransform(qcms_transform_create(mInProfile, aType, mOutProfile,
|
||||||
|
aType, QCMS_INTENT_DEFAULT));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SetBuffers(qcms_data_type aType) {
|
||||||
|
switch (aType) {
|
||||||
|
case QCMS_DATA_RGB_8:
|
||||||
|
mPixels = GetRgbInputBuffer(mInput);
|
||||||
|
mRef = GetRgbOutputBuffer(mPixels);
|
||||||
|
mOutput = GetRgbOutputBuffer(mPixels);
|
||||||
|
break;
|
||||||
|
case QCMS_DATA_RGBA_8:
|
||||||
|
mPixels = GetRgbaInputBuffer(mInput);
|
||||||
|
mRef = GetRgbaOutputBuffer(mPixels);
|
||||||
|
mOutput = GetRgbaOutputBuffer(mPixels);
|
||||||
|
break;
|
||||||
|
case QCMS_DATA_BGRA_8:
|
||||||
|
mPixels = GetBgraInputBuffer(mInput);
|
||||||
|
mRef = GetRgbaOutputBuffer(mPixels);
|
||||||
|
mOutput = GetRgbaOutputBuffer(mPixels);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
MOZ_ASSERT_UNREACHABLE("Unknown type!");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
mStorageType = aType;
|
||||||
|
return mInput && mOutput && mRef && mPixels > 0u;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearOutputBuffer() {
|
||||||
|
switch (mStorageType) {
|
||||||
|
case QCMS_DATA_RGB_8:
|
||||||
|
ClearRgbBuffer(mOutput.get(), mPixels);
|
||||||
|
break;
|
||||||
|
case QCMS_DATA_RGBA_8:
|
||||||
|
case QCMS_DATA_BGRA_8:
|
||||||
|
ClearRgbaBuffer(mOutput.get(), mPixels);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
MOZ_ASSERT_UNREACHABLE("Unknown type!");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProduceRef(transform_fn_t aFn) {
|
||||||
|
aFn(mTransform, mInput.get(), mRef.get(), mPixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CopyInputToRef() {
|
||||||
|
size_t pixelSize = 0;
|
||||||
|
switch (mStorageType) {
|
||||||
|
case QCMS_DATA_RGB_8:
|
||||||
|
pixelSize = 3;
|
||||||
|
break;
|
||||||
|
case QCMS_DATA_RGBA_8:
|
||||||
|
case QCMS_DATA_BGRA_8:
|
||||||
|
pixelSize = 4;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
MOZ_ASSERT_UNREACHABLE("Unknown type!");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(mRef.get(), mInput.get(), mPixels * pixelSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProduceOutput(transform_fn_t aFn) {
|
||||||
|
ClearOutputBuffer();
|
||||||
|
aFn(mTransform, mInput.get(), mOutput.get(), mPixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VerifyOutput(const UniquePtr<uint8_t[]>& aBuf) {
|
||||||
|
switch (mStorageType) {
|
||||||
|
case QCMS_DATA_RGB_8:
|
||||||
|
return CmpRgbBuffer(aBuf.get(), mOutput.get(), mPixels);
|
||||||
|
case QCMS_DATA_RGBA_8:
|
||||||
|
return CmpRgbaBuffer(aBuf.get(), mOutput.get(), mPixels);
|
||||||
|
case QCMS_DATA_BGRA_8:
|
||||||
|
return CmpBgraBuffer(aBuf.get(), mOutput.get(), mPixels);
|
||||||
|
default:
|
||||||
|
MOZ_ASSERT_UNREACHABLE("Unknown type!");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProduceVerifyOutput(transform_fn_t aFn) {
|
||||||
|
ProduceOutput(aFn);
|
||||||
|
return VerifyOutput(mRef);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PrecacheOutput() {
|
||||||
|
qcms_profile_precache_output_transform(mOutProfile);
|
||||||
|
mPrecache = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
qcms_profile* mInProfile;
|
||||||
|
qcms_profile* mOutProfile;
|
||||||
|
qcms_transform* mTransform;
|
||||||
|
|
||||||
|
UniquePtr<uint8_t[]> mInput;
|
||||||
|
UniquePtr<uint8_t[]> mOutput;
|
||||||
|
UniquePtr<uint8_t[]> mRef;
|
||||||
|
size_t mPixels;
|
||||||
|
qcms_data_type mStorageType;
|
||||||
|
bool mPrecache;
|
||||||
|
};
|
||||||
|
|
||||||
|
void GfxQcms_ProfilePairBase::TransformPrecache() {
|
||||||
|
// Produce reference using interpolation and the lookup tables.
|
||||||
|
ASSERT_FALSE(mPrecache);
|
||||||
|
ASSERT_TRUE(SetBuffers(QCMS_DATA_RGB_8));
|
||||||
|
ASSERT_TRUE(SetTransform(QCMS_DATA_RGB_8));
|
||||||
|
ProduceRef(qcms_transform_data_rgb_out_lut);
|
||||||
|
|
||||||
|
// Produce output using lut and precaching.
|
||||||
|
PrecacheOutput();
|
||||||
|
ASSERT_TRUE(SetTransform(QCMS_DATA_RGB_8));
|
||||||
|
EXPECT_TRUE(ProduceVerifyOutput(qcms_transform_data_rgb_out_lut_precache));
|
||||||
|
}
|
||||||
|
|
||||||
|
void GfxQcms_ProfilePairBase::TransformPrecachePlatformExt() {
|
||||||
|
PrecacheOutput();
|
||||||
|
|
||||||
|
// Verify RGB transforms.
|
||||||
|
ASSERT_TRUE(SetBuffers(QCMS_DATA_RGB_8));
|
||||||
|
ASSERT_TRUE(SetTransform(QCMS_DATA_RGB_8));
|
||||||
|
ProduceRef(qcms_transform_data_rgb_out_lut_precache);
|
||||||
|
#ifdef QCMS_MAY_SUPPORT_SSE
|
||||||
|
if (mozilla::supports_sse()) {
|
||||||
|
EXPECT_TRUE(ProduceVerifyOutput(qcms_transform_data_rgb_out_lut_sse1));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef MOZILLA_MAY_SUPPORT_SSE2
|
||||||
|
if (mozilla::supports_sse2()) {
|
||||||
|
EXPECT_TRUE(ProduceVerifyOutput(qcms_transform_data_rgb_out_lut_sse2));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef MOZILLA_MAY_SUPPORT_NEON
|
||||||
|
if (mozilla::supports_neon()) {
|
||||||
|
EXPECT_TRUE(ProduceVerifyOutput(qcms_transform_data_rgb_out_lut_neon));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Verify RGBA transforms.
|
||||||
|
ASSERT_TRUE(SetBuffers(QCMS_DATA_RGBA_8));
|
||||||
|
ASSERT_TRUE(SetTransform(QCMS_DATA_RGBA_8));
|
||||||
|
ProduceRef(qcms_transform_data_rgba_out_lut_precache);
|
||||||
|
#ifdef QCMS_MAY_SUPPORT_SSE
|
||||||
|
if (mozilla::supports_sse()) {
|
||||||
|
EXPECT_TRUE(ProduceVerifyOutput(qcms_transform_data_rgba_out_lut_sse1));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef MOZILLA_MAY_SUPPORT_SSE2
|
||||||
|
if (mozilla::supports_sse2()) {
|
||||||
|
EXPECT_TRUE(ProduceVerifyOutput(qcms_transform_data_rgba_out_lut_sse2));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef MOZILLA_MAY_SUPPORT_NEON
|
||||||
|
if (mozilla::supports_neon()) {
|
||||||
|
EXPECT_TRUE(ProduceVerifyOutput(qcms_transform_data_rgba_out_lut_neon));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Verify BGRA transforms.
|
||||||
|
ASSERT_TRUE(SetBuffers(QCMS_DATA_BGRA_8));
|
||||||
|
ASSERT_TRUE(SetTransform(QCMS_DATA_BGRA_8));
|
||||||
|
ProduceRef(qcms_transform_data_bgra_out_lut_precache);
|
||||||
|
#ifdef QCMS_MAY_SUPPORT_SSE
|
||||||
|
if (mozilla::supports_sse()) {
|
||||||
|
EXPECT_TRUE(ProduceVerifyOutput(qcms_transform_data_bgra_out_lut_sse1));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef MOZILLA_MAY_SUPPORT_SSE2
|
||||||
|
if (mozilla::supports_sse2()) {
|
||||||
|
EXPECT_TRUE(ProduceVerifyOutput(qcms_transform_data_bgra_out_lut_sse2));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef MOZILLA_MAY_SUPPORT_NEON
|
||||||
|
if (mozilla::supports_neon()) {
|
||||||
|
EXPECT_TRUE(ProduceVerifyOutput(qcms_transform_data_bgra_out_lut_neon));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
class GfxQcms_sRGB_To_sRGB : public GfxQcms_ProfilePairBase {
|
||||||
|
protected:
|
||||||
|
void SetUp() override {
|
||||||
|
GfxQcms_ProfilePairBase::SetUp();
|
||||||
|
mInProfile = qcms_profile_sRGB();
|
||||||
|
mOutProfile = qcms_profile_sRGB();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class GfxQcms_sRGB_To_SamsungSyncmaster : public GfxQcms_ProfilePairBase {
|
||||||
|
protected:
|
||||||
|
void SetUp() override {
|
||||||
|
GfxQcms_ProfilePairBase::SetUp();
|
||||||
|
mInProfile = qcms_profile_sRGB();
|
||||||
|
mOutProfile = qcms_profile_from_path("lcms_samsung_syncmaster.icc");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class GfxQcms_sRGB_To_ThinkpadW540 : public GfxQcms_ProfilePairBase {
|
||||||
|
protected:
|
||||||
|
void SetUp() override {
|
||||||
|
GfxQcms_ProfilePairBase::SetUp();
|
||||||
|
mInProfile = qcms_profile_sRGB();
|
||||||
|
mOutProfile = qcms_profile_from_path("lcms_thinkpad_w540.icc");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TEST_QCMS_PROFILE_F(test_fixture) \
|
||||||
|
TEST_F(test_fixture, TransformPrecachePlatformExt) { \
|
||||||
|
GfxQcms_ProfilePairBase::TransformPrecachePlatformExt(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(GfxQcms_sRGB_To_sRGB, TransformPrecache) {
|
||||||
|
// TODO(aosmond): This doesn't pass for the non-identity transform. Should
|
||||||
|
// they produce the same results?
|
||||||
|
GfxQcms_ProfilePairBase::TransformPrecache();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_QCMS_PROFILE_F(GfxQcms_sRGB_To_sRGB)
|
||||||
|
|
||||||
|
TEST_F(GfxQcms_sRGB_To_sRGB, TransformIdentity) {
|
||||||
|
PrecacheOutput();
|
||||||
|
SetBuffers(QCMS_DATA_RGB_8);
|
||||||
|
SetTransform(QCMS_DATA_RGB_8);
|
||||||
|
qcms_transform_data(mTransform, mInput.get(), mOutput.get(), mPixels);
|
||||||
|
EXPECT_TRUE(VerifyOutput(mInput));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_QCMS_PROFILE_F(GfxQcms_sRGB_To_SamsungSyncmaster)
|
||||||
|
TEST_QCMS_PROFILE_F(GfxQcms_sRGB_To_ThinkpadW540)
|
||||||
|
|
||||||
|
class GfxQcmsPerf_Base : public GfxQcms_sRGB_To_ThinkpadW540 {
|
||||||
|
protected:
|
||||||
|
explicit GfxQcmsPerf_Base(qcms_data_type aType) { mStorageType = aType; }
|
||||||
|
|
||||||
|
void TransformPerf() { ProduceRef(qcms_transform_data_rgb_out_lut_precache); }
|
||||||
|
|
||||||
|
void TransformPlatformPerf() {
|
||||||
|
qcms_transform_data(mTransform, mInput.get(), mRef.get(), mPixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetUp() override {
|
||||||
|
GfxQcms_sRGB_To_ThinkpadW540::SetUp();
|
||||||
|
PrecacheOutput();
|
||||||
|
SetBuffers(mStorageType);
|
||||||
|
SetTransform(mStorageType);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class GfxQcmsPerf_Rgb : public GfxQcmsPerf_Base {
|
||||||
|
protected:
|
||||||
|
GfxQcmsPerf_Rgb() : GfxQcmsPerf_Base(QCMS_DATA_RGB_8) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class GfxQcmsPerf_Rgba : public GfxQcmsPerf_Base {
|
||||||
|
protected:
|
||||||
|
GfxQcmsPerf_Rgba() : GfxQcmsPerf_Base(QCMS_DATA_RGBA_8) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class GfxQcmsPerf_Bgra : public GfxQcmsPerf_Base {
|
||||||
|
protected:
|
||||||
|
GfxQcmsPerf_Bgra() : GfxQcmsPerf_Base(QCMS_DATA_BGRA_8) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
MOZ_GTEST_BENCH_F(GfxQcmsPerf_Rgb, TransformC, [this] { TransformPerf(); });
|
||||||
|
MOZ_GTEST_BENCH_F(GfxQcmsPerf_Rgb, TransformPlatform,
|
||||||
|
[this] { TransformPlatformPerf(); });
|
||||||
|
MOZ_GTEST_BENCH_F(GfxQcmsPerf_Rgba, TransformC, [this] { TransformPerf(); });
|
||||||
|
MOZ_GTEST_BENCH_F(GfxQcmsPerf_Rgba, TransformPlatform,
|
||||||
|
[this] { TransformPlatformPerf(); });
|
||||||
|
MOZ_GTEST_BENCH_F(GfxQcmsPerf_Bgra, TransformC, [this] { TransformPerf(); });
|
||||||
|
MOZ_GTEST_BENCH_F(GfxQcmsPerf_Bgra, TransformPlatform,
|
||||||
|
[this] { TransformPlatformPerf(); });
|
||||||
|
|
Двоичный файл не отображается.
Двоичный файл не отображается.
|
@ -57,6 +57,14 @@ SOURCES += [ '/gfx/ots/tests/%s' % p for p in [
|
||||||
'layout_common_table_test.cc',
|
'layout_common_table_test.cc',
|
||||||
]]
|
]]
|
||||||
|
|
||||||
|
# ICC profiles used for verifying QCMS transformations. The copyright
|
||||||
|
# notice embedded in the profiles should be reviewed to ensure there are
|
||||||
|
# no known restrictions on distribution.
|
||||||
|
TEST_HARNESS_FILES.gtest += [
|
||||||
|
'icc_profiles/lcms_samsung_syncmaster.icc',
|
||||||
|
'icc_profiles/lcms_thinkpad_w540.icc',
|
||||||
|
]
|
||||||
|
|
||||||
include('/ipc/chromium/chromium-config.mozbuild')
|
include('/ipc/chromium/chromium-config.mozbuild')
|
||||||
|
|
||||||
LOCAL_INCLUDES += [
|
LOCAL_INCLUDES += [
|
||||||
|
|
|
@ -3232,7 +3232,7 @@ void gfxPlatform::GetApzSupportInfo(mozilla::widget::InfoObject& aObj) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SupportsApzKeyboardInput() &&
|
if (SupportsApzKeyboardInput() &&
|
||||||
!StaticPrefs::AccessibilityBrowseWithCaret()) {
|
!StaticPrefs::accessibility_browsewithcaret()) {
|
||||||
aObj.DefineProperty("ApzKeyboardInput", 1);
|
aObj.DefineProperty("ApzKeyboardInput", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3477,15 +3477,15 @@ bool gfxPlatform::SupportsApzTouchInput() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool gfxPlatform::SupportsApzDragInput() const {
|
bool gfxPlatform::SupportsApzDragInput() const {
|
||||||
return StaticPrefs::APZDragEnabled();
|
return StaticPrefs::apz_drag_enabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool gfxPlatform::SupportsApzKeyboardInput() const {
|
bool gfxPlatform::SupportsApzKeyboardInput() const {
|
||||||
return StaticPrefs::APZKeyboardEnabled();
|
return StaticPrefs::apz_keyboard_enabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool gfxPlatform::SupportsApzAutoscrolling() const {
|
bool gfxPlatform::SupportsApzAutoscrolling() const {
|
||||||
return StaticPrefs::APZAutoscrollEnabled();
|
return StaticPrefs::apz_autoscroll_enabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
void gfxPlatform::InitOpenGLConfig() {
|
void gfxPlatform::InitOpenGLConfig() {
|
||||||
|
|
|
@ -382,7 +382,7 @@ bool TenuredCell::isInsideZone(JS::Zone* zone) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (thing->isMarkedGray()) {
|
if (thing->isMarkedGray()) {
|
||||||
// There shouldn't be anything marked grey unless we're on the main thread.
|
// There shouldn't be anything marked gray unless we're on the main thread.
|
||||||
MOZ_ASSERT(CurrentThreadCanAccessRuntime(thing->runtimeFromAnyThread()));
|
MOZ_ASSERT(CurrentThreadCanAccessRuntime(thing->runtimeFromAnyThread()));
|
||||||
if (!JS::RuntimeHeapIsCollecting()) {
|
if (!JS::RuntimeHeapIsCollecting()) {
|
||||||
JS::UnmarkGrayGCThingRecursively(
|
JS::UnmarkGrayGCThingRecursively(
|
||||||
|
|
|
@ -5246,7 +5246,7 @@ void GCRuntime::getNextSweepGroup() {
|
||||||
*
|
*
|
||||||
* This means that when marking things gray we must not allow marking to leave
|
* This means that when marking things gray we must not allow marking to leave
|
||||||
* the current compartment group, as that could result in things being marked
|
* the current compartment group, as that could result in things being marked
|
||||||
* grey when they might subsequently be marked black. To achieve this, when we
|
* gray when they might subsequently be marked black. To achieve this, when we
|
||||||
* find a cross compartment pointer we don't mark the referent but add it to a
|
* find a cross compartment pointer we don't mark the referent but add it to a
|
||||||
* singly-linked list of incoming gray pointers that is stored with each
|
* singly-linked list of incoming gray pointers that is stored with each
|
||||||
* compartment.
|
* compartment.
|
||||||
|
|
|
@ -6008,7 +6008,7 @@ void PresShell::Paint(nsView* aViewToPaint, const nsRegion& aDirtyRegion,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StaticPrefs::APZKeyboardEnabled()) {
|
if (StaticPrefs::apz_keyboard_enabled()) {
|
||||||
// Update the focus target for async keyboard scrolling. This will be
|
// Update the focus target for async keyboard scrolling. This will be
|
||||||
// forwarded to APZ by nsDisplayList::PaintRoot. We need to to do this
|
// forwarded to APZ by nsDisplayList::PaintRoot. We need to to do this
|
||||||
// before we enter the paint phase because dispatching eVoid events can
|
// before we enter the paint phase because dispatching eVoid events can
|
||||||
|
|
|
@ -173,7 +173,7 @@ static mozilla::layers::ZoomConstraints ComputeZoomConstraintsFromViewportInfo(
|
||||||
constraints.mAllowZoom = aViewportInfo.IsZoomAllowed() &&
|
constraints.mAllowZoom = aViewportInfo.IsZoomAllowed() &&
|
||||||
nsLayoutUtils::AllowZoomingForDocument(aDocument);
|
nsLayoutUtils::AllowZoomingForDocument(aDocument);
|
||||||
constraints.mAllowDoubleTapZoom =
|
constraints.mAllowDoubleTapZoom =
|
||||||
constraints.mAllowZoom && StaticPrefs::APZAllowDoubleTapZooming();
|
constraints.mAllowZoom && StaticPrefs::apz_allow_double_tap_zooming();
|
||||||
if (constraints.mAllowZoom) {
|
if (constraints.mAllowZoom) {
|
||||||
constraints.mMinZoom.scale = aViewportInfo.GetMinZoom().scale;
|
constraints.mMinZoom.scale = aViewportInfo.GetMinZoom().scale;
|
||||||
constraints.mMaxZoom.scale = aViewportInfo.GetMaxZoom().scale;
|
constraints.mMaxZoom.scale = aViewportInfo.GetMaxZoom().scale;
|
||||||
|
|
|
@ -758,7 +758,7 @@ bool nsLayoutUtils::AllowZoomingForDocument(
|
||||||
// True if we allow zooming for all documents on this platform, or if we are
|
// True if we allow zooming for all documents on this platform, or if we are
|
||||||
// in RDM and handling meta viewports, which force zoom under some
|
// in RDM and handling meta viewports, which force zoom under some
|
||||||
// circumstances.
|
// circumstances.
|
||||||
return StaticPrefs::APZAllowZooming() ||
|
return StaticPrefs::apz_allow_zooming() ||
|
||||||
(aDocument && aDocument->InRDMPane() &&
|
(aDocument && aDocument->InRDMPane() &&
|
||||||
nsLayoutUtils::ShouldHandleMetaViewport(aDocument));
|
nsLayoutUtils::ShouldHandleMetaViewport(aDocument));
|
||||||
}
|
}
|
||||||
|
@ -1050,7 +1050,7 @@ bool nsLayoutUtils::ShouldDisableApzForElement(nsIContent* aContent) {
|
||||||
if (!doc) {
|
if (!doc) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return StaticPrefs::APZDisableForScrollLinkedEffects() &&
|
return StaticPrefs::apz_disable_for_scroll_linked_effects() &&
|
||||||
doc->HasScrollLinkedEffect();
|
doc->HasScrollLinkedEffect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9253,7 +9253,7 @@ ScrollMetadata nsLayoutUtils::ComputeScrollMetadata(
|
||||||
aScrollFrame ? aScrollFrame : aForFrame, isRootContentDocRootScrollFrame,
|
aScrollFrame ? aScrollFrame : aForFrame, isRootContentDocRootScrollFrame,
|
||||||
metrics));
|
metrics));
|
||||||
|
|
||||||
if (StaticPrefs::APZPrintTree() || StaticPrefs::apz_test_logging_enabled()) {
|
if (StaticPrefs::apz_printtree() || StaticPrefs::apz_test_logging_enabled()) {
|
||||||
if (nsIContent* content =
|
if (nsIContent* content =
|
||||||
frameForCompositionBoundsCalculation->GetContent()) {
|
frameForCompositionBoundsCalculation->GetContent()) {
|
||||||
nsAutoString contentDescription;
|
nsAutoString contentDescription;
|
||||||
|
|
|
@ -1866,7 +1866,7 @@ void nsRefreshDriver::Tick(VsyncId aId, TimeStamp aNowTime) {
|
||||||
// We want to process any pending APZ metrics ahead of their positions
|
// We want to process any pending APZ metrics ahead of their positions
|
||||||
// in the queue. This will prevent us from spending precious time
|
// in the queue. This will prevent us from spending precious time
|
||||||
// painting a stale displayport.
|
// painting a stale displayport.
|
||||||
if (StaticPrefs::APZPeekMessages()) {
|
if (StaticPrefs::apz_peek_messages_enabled()) {
|
||||||
nsLayoutUtils::UpdateDisplayPortMarginsFromPendingMessages();
|
nsLayoutUtils::UpdateDisplayPortMarginsFromPendingMessages();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ void ScrollVelocityQueue::Sample(const nsPoint& aScrollPosition) {
|
||||||
mAccumulator = nsPoint();
|
mAccumulator = nsPoint();
|
||||||
} else {
|
} else {
|
||||||
uint32_t durationMs = (currentRefreshTime - mSampleTime).ToMilliseconds();
|
uint32_t durationMs = (currentRefreshTime - mSampleTime).ToMilliseconds();
|
||||||
if (durationMs > StaticPrefs::APZVelocityRelevanceTime()) {
|
if (durationMs > StaticPrefs::apz_velocity_relevance_time_ms()) {
|
||||||
mAccumulator = nsPoint();
|
mAccumulator = nsPoint();
|
||||||
mQueue.Clear();
|
mQueue.Clear();
|
||||||
} else if (durationMs == 0) {
|
} else if (durationMs == 0) {
|
||||||
|
@ -54,7 +54,7 @@ void ScrollVelocityQueue::TrimQueue() {
|
||||||
uint32_t timeDelta = (currentRefreshTime - mSampleTime).ToMilliseconds();
|
uint32_t timeDelta = (currentRefreshTime - mSampleTime).ToMilliseconds();
|
||||||
for (int i = mQueue.Length() - 1; i >= 0; i--) {
|
for (int i = mQueue.Length() - 1; i >= 0; i--) {
|
||||||
timeDelta += mQueue[i].first;
|
timeDelta += mQueue[i].first;
|
||||||
if (timeDelta >= StaticPrefs::APZVelocityRelevanceTime()) {
|
if (timeDelta >= StaticPrefs::apz_velocity_relevance_time_ms()) {
|
||||||
// The rest of the samples have expired and should be dropped
|
// The rest of the samples have expired and should be dropped
|
||||||
for (; i >= 0; i--) {
|
for (; i >= 0; i--) {
|
||||||
mQueue.RemoveElementAt(0);
|
mQueue.RemoveElementAt(0);
|
||||||
|
|
|
@ -2467,7 +2467,7 @@ void ScrollFrameHelper::ResetDisplayPortExpiryTimer() {
|
||||||
if (mDisplayPortExpiryTimer) {
|
if (mDisplayPortExpiryTimer) {
|
||||||
mDisplayPortExpiryTimer->InitWithNamedFuncCallback(
|
mDisplayPortExpiryTimer->InitWithNamedFuncCallback(
|
||||||
RemoveDisplayPortCallback, this,
|
RemoveDisplayPortCallback, this,
|
||||||
StaticPrefs::APZDisplayPortExpiryTime(), nsITimer::TYPE_ONE_SHOT,
|
StaticPrefs::apz_displayport_expiry_ms(), nsITimer::TYPE_ONE_SHOT,
|
||||||
"ScrollFrameHelper::ResetDisplayPortExpiryTimer");
|
"ScrollFrameHelper::ResetDisplayPortExpiryTimer");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2487,7 +2487,7 @@ void ScrollFrameHelper::TriggerDisplayPortExpiration() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StaticPrefs::APZDisplayPortExpiryTime()) {
|
if (!StaticPrefs::apz_displayport_expiry_ms()) {
|
||||||
// a zero time disables the expiry
|
// a zero time disables the expiry
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2803,7 +2803,7 @@ void ScrollFrameHelper::ScrollToImpl(nsPoint aPt, const nsRect& aRange,
|
||||||
bool schedulePaint = true;
|
bool schedulePaint = true;
|
||||||
if (nsLayoutUtils::AsyncPanZoomEnabled(mOuter) &&
|
if (nsLayoutUtils::AsyncPanZoomEnabled(mOuter) &&
|
||||||
!nsLayoutUtils::ShouldDisableApzForElement(content) &&
|
!nsLayoutUtils::ShouldDisableApzForElement(content) &&
|
||||||
StaticPrefs::APZPaintSkipping()) {
|
StaticPrefs::apz_paint_skipping_enabled()) {
|
||||||
// If APZ is enabled with paint-skipping, there are certain conditions in
|
// If APZ is enabled with paint-skipping, there are certain conditions in
|
||||||
// which we can skip paints:
|
// which we can skip paints:
|
||||||
// 1) If APZ triggered this scroll, and the tile-aligned displayport is
|
// 1) If APZ triggered this scroll, and the tile-aligned displayport is
|
||||||
|
@ -2838,7 +2838,7 @@ void ScrollFrameHelper::ScrollToImpl(nsPoint aPt, const nsRect& aRange,
|
||||||
bool haveScrollLinkedEffects =
|
bool haveScrollLinkedEffects =
|
||||||
content->GetComposedDoc()->HasScrollLinkedEffect();
|
content->GetComposedDoc()->HasScrollLinkedEffect();
|
||||||
bool apzDisabled = haveScrollLinkedEffects &&
|
bool apzDisabled = haveScrollLinkedEffects &&
|
||||||
StaticPrefs::APZDisableForScrollLinkedEffects();
|
StaticPrefs::apz_disable_for_scroll_linked_effects();
|
||||||
if (!apzDisabled && !HasPluginFrames()) {
|
if (!apzDisabled && !HasPluginFrames()) {
|
||||||
if (LastScrollOrigin() == nsGkAtoms::apz) {
|
if (LastScrollOrigin() == nsGkAtoms::apz) {
|
||||||
schedulePaint = false;
|
schedulePaint = false;
|
||||||
|
|
|
@ -1145,7 +1145,7 @@ nsRect nsDisplayListBuilder::OutOfFlowDisplayData::ComputeVisibleRectForFrame(
|
||||||
nsRect visible = aVisibleRect;
|
nsRect visible = aVisibleRect;
|
||||||
nsRect dirtyRectRelativeToDirtyFrame = aDirtyRect;
|
nsRect dirtyRectRelativeToDirtyFrame = aDirtyRect;
|
||||||
|
|
||||||
if (StaticPrefs::APZAllowZooming() &&
|
if (StaticPrefs::apz_allow_zooming() &&
|
||||||
nsLayoutUtils::IsFixedPosFrameInDisplayPort(aFrame) &&
|
nsLayoutUtils::IsFixedPosFrameInDisplayPort(aFrame) &&
|
||||||
aBuilder->IsPaintingToWindow()) {
|
aBuilder->IsPaintingToWindow()) {
|
||||||
dirtyRectRelativeToDirtyFrame =
|
dirtyRectRelativeToDirtyFrame =
|
||||||
|
|
|
@ -163,6 +163,7 @@ whitelist-vars = [
|
||||||
"mozilla::detail::gGkAtoms",
|
"mozilla::detail::gGkAtoms",
|
||||||
"mozilla::detail::kGkAtomsArrayOffset",
|
"mozilla::detail::kGkAtomsArrayOffset",
|
||||||
"mozilla::profiler::detail::RacyFeatures::sActiveAndFeatures",
|
"mozilla::profiler::detail::RacyFeatures::sActiveAndFeatures",
|
||||||
|
"mozilla::StaticPrefs::.*",
|
||||||
]
|
]
|
||||||
# TODO(emilio): A bunch of types here can go away once we generate bindings and
|
# TODO(emilio): A bunch of types here can go away once we generate bindings and
|
||||||
# structs together.
|
# structs together.
|
||||||
|
|
|
@ -103,7 +103,7 @@
|
||||||
|
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
|
|
||||||
using mozilla::ipc::FileDescriptor;
|
using ipc::FileDescriptor;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
|
@ -890,7 +890,7 @@ class Pref {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PrefHasher {
|
struct PrefHasher {
|
||||||
using Key = mozilla::UniquePtr<Pref>;
|
using Key = UniquePtr<Pref>;
|
||||||
using Lookup = const char*;
|
using Lookup = const char*;
|
||||||
|
|
||||||
static HashNumber hash(const Lookup& aLookup) { return HashString(aLookup); }
|
static HashNumber hash(const Lookup& aLookup) { return HashString(aLookup); }
|
||||||
|
@ -1194,7 +1194,7 @@ class CallbackNode {
|
||||||
uintptr_t mNextAndMatchKind;
|
uintptr_t mNextAndMatchKind;
|
||||||
};
|
};
|
||||||
|
|
||||||
using PrefsHashTable = mozilla::HashSet<mozilla::UniquePtr<Pref>, PrefHasher>;
|
using PrefsHashTable = HashSet<UniquePtr<Pref>, PrefHasher>;
|
||||||
|
|
||||||
static PrefsHashTable* gHashTable;
|
static PrefsHashTable* gHashTable;
|
||||||
|
|
||||||
|
@ -1509,7 +1509,7 @@ static bool gContentProcessPrefsAreInited = false;
|
||||||
#endif // DEBUG
|
#endif // DEBUG
|
||||||
|
|
||||||
static Pref* pref_HashTableLookup(const char* aPrefName) {
|
static Pref* pref_HashTableLookup(const char* aPrefName) {
|
||||||
MOZ_ASSERT(NS_IsMainThread() || mozilla::ServoStyleSet::IsInServoTraversal());
|
MOZ_ASSERT(NS_IsMainThread() || ServoStyleSet::IsInServoTraversal());
|
||||||
|
|
||||||
MOZ_ASSERT_IF(!XRE_IsParentProcess(), gContentProcessPrefsAreInited);
|
MOZ_ASSERT_IF(!XRE_IsParentProcess(), gContentProcessPrefsAreInited);
|
||||||
|
|
||||||
|
@ -1538,7 +1538,7 @@ Maybe<PrefWrapper> pref_SharedLookup(const char* aPrefName) {
|
||||||
|
|
||||||
Maybe<PrefWrapper> pref_Lookup(const char* aPrefName,
|
Maybe<PrefWrapper> pref_Lookup(const char* aPrefName,
|
||||||
bool aIncludeTypeNone = false) {
|
bool aIncludeTypeNone = false) {
|
||||||
MOZ_ASSERT(NS_IsMainThread() || mozilla::ServoStyleSet::IsInServoTraversal());
|
MOZ_ASSERT(NS_IsMainThread() || ServoStyleSet::IsInServoTraversal());
|
||||||
|
|
||||||
AddAccessCount(aPrefName);
|
AddAccessCount(aPrefName);
|
||||||
|
|
||||||
|
@ -1866,8 +1866,8 @@ class PrefCallback : public PLDHashEntryHdr {
|
||||||
static const PrefCallback* KeyToPointer(PrefCallback* aKey) { return aKey; }
|
static const PrefCallback* KeyToPointer(PrefCallback* aKey) { return aKey; }
|
||||||
|
|
||||||
static PLDHashNumber HashKey(const PrefCallback* aKey) {
|
static PLDHashNumber HashKey(const PrefCallback* aKey) {
|
||||||
uint32_t hash = mozilla::HashString(aKey->mDomain);
|
uint32_t hash = HashString(aKey->mDomain);
|
||||||
return mozilla::AddToHash(hash, aKey->mCanonical);
|
return AddToHash(hash, aKey->mCanonical);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -2005,7 +2005,7 @@ class nsPrefBranch final : public nsIPrefBranch,
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Helper class for either returning a raw cstring or nsCString.
|
// Helper class for either returning a raw cstring or nsCString.
|
||||||
typedef mozilla::Variant<const char*, const nsCString> PrefNameBase;
|
typedef Variant<const char*, const nsCString> PrefNameBase;
|
||||||
class PrefName : public PrefNameBase {
|
class PrefName : public PrefNameBase {
|
||||||
public:
|
public:
|
||||||
explicit PrefName(const char* aName) : PrefNameBase(aName) {}
|
explicit PrefName(const char* aName) : PrefNameBase(aName) {}
|
||||||
|
@ -2104,8 +2104,7 @@ nsPrefBranch::nsPrefBranch(const char* aPrefRoot, PrefValueKind aKind)
|
||||||
mKind(aKind),
|
mKind(aKind),
|
||||||
mFreeingObserverList(false),
|
mFreeingObserverList(false),
|
||||||
mObservers() {
|
mObservers() {
|
||||||
nsCOMPtr<nsIObserverService> observerService =
|
nsCOMPtr<nsIObserverService> observerService = services::GetObserverService();
|
||||||
mozilla::services::GetObserverService();
|
|
||||||
if (observerService) {
|
if (observerService) {
|
||||||
++mRefCnt; // must be > 0 when we call this, or we'll get deleted!
|
++mRefCnt; // must be > 0 when we call this, or we'll get deleted!
|
||||||
|
|
||||||
|
@ -2804,8 +2803,7 @@ void nsPrefBranch::FreeObserverList() {
|
||||||
iter.Remove();
|
iter.Remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIObserverService> observerService =
|
nsCOMPtr<nsIObserverService> observerService = services::GetObserverService();
|
||||||
mozilla::services::GetObserverService();
|
|
||||||
if (observerService) {
|
if (observerService) {
|
||||||
observerService->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
|
observerService->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
|
||||||
}
|
}
|
||||||
|
@ -2830,7 +2828,7 @@ nsresult nsPrefBranch::GetDefaultFromPropertiesFile(const char* aPrefName,
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIStringBundleService> bundleService =
|
nsCOMPtr<nsIStringBundleService> bundleService =
|
||||||
mozilla::services::GetStringBundleService();
|
services::GetStringBundleService();
|
||||||
if (!bundleService) {
|
if (!bundleService) {
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -2938,9 +2936,9 @@ void Preferences::HandleDirty() {
|
||||||
sPreferences->mSavePending = true;
|
sPreferences->mSavePending = true;
|
||||||
static const int PREF_DELAY_MS = 500;
|
static const int PREF_DELAY_MS = 500;
|
||||||
NS_DelayedDispatchToCurrentThread(
|
NS_DelayedDispatchToCurrentThread(
|
||||||
mozilla::NewRunnableMethod("Preferences::SavePrefFileAsynchronous",
|
NewRunnableMethod("Preferences::SavePrefFileAsynchronous",
|
||||||
sPreferences.get(),
|
sPreferences.get(),
|
||||||
&Preferences::SavePrefFileAsynchronous),
|
&Preferences::SavePrefFileAsynchronous),
|
||||||
PREF_DELAY_MS);
|
PREF_DELAY_MS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3074,7 +3072,7 @@ class PWRunnable : public Runnable {
|
||||||
NS_IMETHOD Run() override {
|
NS_IMETHOD Run() override {
|
||||||
// If we get a nullptr on the exchange, it means that somebody
|
// If we get a nullptr on the exchange, it means that somebody
|
||||||
// else has already processed the request, and we can just return.
|
// else has already processed the request, and we can just return.
|
||||||
mozilla::UniquePtr<PrefSaveData> prefs(
|
UniquePtr<PrefSaveData> prefs(
|
||||||
PreferencesWriter::sPendingWriteData.exchange(nullptr));
|
PreferencesWriter::sPendingWriteData.exchange(nullptr));
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
if (prefs) {
|
if (prefs) {
|
||||||
|
@ -3554,7 +3552,7 @@ already_AddRefed<Preferences> Preferences::GetInstanceForService() {
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIObserverService> observerService =
|
nsCOMPtr<nsIObserverService> observerService =
|
||||||
mozilla::services::GetObserverService();
|
services::GetObserverService();
|
||||||
if (!observerService) {
|
if (!observerService) {
|
||||||
sPreferences = nullptr;
|
sPreferences = nullptr;
|
||||||
gCacheDataDesc = "GetObserverService() failed (1)";
|
gCacheDataDesc = "GetObserverService() failed (1)";
|
||||||
|
@ -3599,7 +3597,7 @@ bool Preferences::IsServiceAvailable() { return !!sPreferences; }
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
bool Preferences::InitStaticMembers() {
|
bool Preferences::InitStaticMembers() {
|
||||||
MOZ_ASSERT(NS_IsMainThread() || mozilla::ServoStyleSet::IsInServoTraversal());
|
MOZ_ASSERT(NS_IsMainThread() || ServoStyleSet::IsInServoTraversal());
|
||||||
|
|
||||||
if (MOZ_LIKELY(sPreferences)) {
|
if (MOZ_LIKELY(sPreferences)) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -3705,6 +3703,16 @@ void Preferences::DeserializePreferences(char* aStr, size_t aPrefsLen) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Forward declarations.
|
||||||
|
namespace StaticPrefs {
|
||||||
|
|
||||||
|
static void InitAll(bool aIsStartup);
|
||||||
|
static void InitOncePrefs();
|
||||||
|
static void InitStaticPrefsFromShared();
|
||||||
|
static void RegisterOncePrefs(SharedPrefMapBuilder& aBuilder);
|
||||||
|
|
||||||
|
} // namespace StaticPrefs
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
FileDescriptor Preferences::EnsureSnapshot(size_t* aSize) {
|
FileDescriptor Preferences::EnsureSnapshot(size_t* aSize) {
|
||||||
MOZ_ASSERT(XRE_IsParentProcess());
|
MOZ_ASSERT(XRE_IsParentProcess());
|
||||||
|
@ -4065,8 +4073,7 @@ Preferences::GetDirty(bool* aRetVal) {
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult Preferences::NotifyServiceObservers(const char* aTopic) {
|
nsresult Preferences::NotifyServiceObservers(const char* aTopic) {
|
||||||
nsCOMPtr<nsIObserverService> observerService =
|
nsCOMPtr<nsIObserverService> observerService = services::GetObserverService();
|
||||||
mozilla::services::GetObserverService();
|
|
||||||
if (!observerService) {
|
if (!observerService) {
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -4207,8 +4214,7 @@ nsresult Preferences::WritePrefFile(nsIFile* aFile, SaveMethod aSaveMethod) {
|
||||||
|
|
||||||
if (AllowOffMainThreadSave()) {
|
if (AllowOffMainThreadSave()) {
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
mozilla::UniquePtr<PrefSaveData> prefs =
|
UniquePtr<PrefSaveData> prefs = MakeUnique<PrefSaveData>(pref_savePrefs());
|
||||||
MakeUnique<PrefSaveData>(pref_savePrefs());
|
|
||||||
|
|
||||||
// Put the newly constructed preference data into sPendingWriteData
|
// Put the newly constructed preference data into sPendingWriteData
|
||||||
// for the next request to pick up
|
// for the next request to pick up
|
||||||
|
@ -4487,13 +4493,24 @@ Result<Ok, const char*> Preferences::InitInitialObjects(bool aIsStartup) {
|
||||||
MOZ_DIAGNOSTIC_ASSERT(gSharedMap);
|
MOZ_DIAGNOSTIC_ASSERT(gSharedMap);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
// Check that all varcache preferences match their current values. This
|
// For a VarCache pref like this:
|
||||||
// can currently fail if the default value of a static varcache preference
|
//
|
||||||
// is changed in a preference file or at runtime, rather than in
|
// VARCACHE_PREF($POLICY, "my.pref", my_pref, int32_t, 99)
|
||||||
// StaticPrefList.h.
|
//
|
||||||
// StaticPrefs with a Skip policy aren't updated with an overridden value,
|
// we generate checking code like this:
|
||||||
// and shouldn't be checked.
|
//
|
||||||
|
// MOZ_ASSERT(StaticPrefs::UpdatePolicy::$POLICY ==
|
||||||
|
// StaticPrefs::UpdatePolicy::Skip ||
|
||||||
|
// PreferencesInternalMethods::GetPref<int32_t>(name, value) ==
|
||||||
|
// StaticPrefs::my_pref(),
|
||||||
|
// "Incorrect cached value for my.pref");
|
||||||
|
//
|
||||||
|
// This checks that all VarCache preferences match their current values.
|
||||||
|
// This can currently fail if the default value of a static VarCache
|
||||||
|
// preference is changed in a preference file or at runtime, rather than in
|
||||||
|
// StaticPrefList_*.h. StaticPrefs with a Skip policy aren't updated with
|
||||||
|
// an overridden value, and shouldn't be checked.
|
||||||
|
//
|
||||||
# define PREF(name, cpp_type, value)
|
# define PREF(name, cpp_type, value)
|
||||||
# define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
# define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
||||||
MOZ_ASSERT(StaticPrefs::UpdatePolicy::policy == \
|
MOZ_ASSERT(StaticPrefs::UpdatePolicy::policy == \
|
||||||
|
@ -4544,8 +4561,7 @@ Result<Ok, const char*> Preferences::InitInitialObjects(bool aIsStartup) {
|
||||||
const char* entryName;
|
const char* entryName;
|
||||||
uint16_t entryNameLen;
|
uint16_t entryNameLen;
|
||||||
|
|
||||||
RefPtr<nsZipArchive> jarReader =
|
RefPtr<nsZipArchive> jarReader = Omnijar::GetReader(Omnijar::GRE);
|
||||||
mozilla::Omnijar::GetReader(mozilla::Omnijar::GRE);
|
|
||||||
if (jarReader) {
|
if (jarReader) {
|
||||||
#ifdef MOZ_WIDGET_ANDROID
|
#ifdef MOZ_WIDGET_ANDROID
|
||||||
// Try to load an architecture-specific greprefs.js first. This will be
|
// Try to load an architecture-specific greprefs.js first. This will be
|
||||||
|
@ -4629,13 +4645,12 @@ Result<Ok, const char*> Preferences::InitInitialObjects(bool aIsStartup) {
|
||||||
|
|
||||||
// Load jar:$app/omni.jar!/defaults/preferences/*.js
|
// Load jar:$app/omni.jar!/defaults/preferences/*.js
|
||||||
// or jar:$gre/omni.jar!/defaults/preferences/*.js.
|
// or jar:$gre/omni.jar!/defaults/preferences/*.js.
|
||||||
RefPtr<nsZipArchive> appJarReader =
|
RefPtr<nsZipArchive> appJarReader = Omnijar::GetReader(Omnijar::APP);
|
||||||
mozilla::Omnijar::GetReader(mozilla::Omnijar::APP);
|
|
||||||
|
|
||||||
// GetReader(mozilla::Omnijar::APP) returns null when `$app == $gre`, in
|
// GetReader(Omnijar::APP) returns null when `$app == $gre`, in
|
||||||
// which case we look for app-specific default preferences in $gre.
|
// which case we look for app-specific default preferences in $gre.
|
||||||
if (!appJarReader) {
|
if (!appJarReader) {
|
||||||
appJarReader = mozilla::Omnijar::GetReader(mozilla::Omnijar::GRE);
|
appJarReader = Omnijar::GetReader(Omnijar::GRE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (appJarReader) {
|
if (appJarReader) {
|
||||||
|
@ -4689,8 +4704,7 @@ Result<Ok, const char*> Preferences::InitInitialObjects(bool aIsStartup) {
|
||||||
NS_CreateServicesFromCategory(NS_PREFSERVICE_APPDEFAULTS_TOPIC_ID, nullptr,
|
NS_CreateServicesFromCategory(NS_PREFSERVICE_APPDEFAULTS_TOPIC_ID, nullptr,
|
||||||
NS_PREFSERVICE_APPDEFAULTS_TOPIC_ID);
|
NS_PREFSERVICE_APPDEFAULTS_TOPIC_ID);
|
||||||
|
|
||||||
nsCOMPtr<nsIObserverService> observerService =
|
nsCOMPtr<nsIObserverService> observerService = services::GetObserverService();
|
||||||
mozilla::services::GetObserverService();
|
|
||||||
NS_ENSURE_SUCCESS(rv, Err("GetObserverService() failed (2)"));
|
NS_ENSURE_SUCCESS(rv, Err("GetObserverService() failed (2)"));
|
||||||
|
|
||||||
observerService->NotifyObservers(nullptr, NS_PREFSERVICE_APPDEFAULTS_TOPIC_ID,
|
observerService->NotifyObservers(nullptr, NS_PREFSERVICE_APPDEFAULTS_TOPIC_ID,
|
||||||
|
@ -5395,8 +5409,9 @@ static void InitVarCachePref(StaticPrefs::UpdatePolicy aPolicy,
|
||||||
static Atomic<bool> sOncePrefRead(false);
|
static Atomic<bool> sOncePrefRead(false);
|
||||||
static StaticMutex sOncePrefMutex;
|
static StaticMutex sOncePrefMutex;
|
||||||
|
|
||||||
/* static */
|
namespace StaticPrefs {
|
||||||
void StaticPrefs::MaybeInitOncePrefs() {
|
|
||||||
|
void MaybeInitOncePrefs() {
|
||||||
if (MOZ_LIKELY(sOncePrefRead)) {
|
if (MOZ_LIKELY(sOncePrefRead)) {
|
||||||
// `Once` StaticPrefs have already been initialized to their default value.
|
// `Once` StaticPrefs have already been initialized to their default value.
|
||||||
return;
|
return;
|
||||||
|
@ -5408,48 +5423,42 @@ void StaticPrefs::MaybeInitOncePrefs() {
|
||||||
RefPtr<Runnable> runnable = NS_NewRunnableFunction(
|
RefPtr<Runnable> runnable = NS_NewRunnableFunction(
|
||||||
"Preferences::MaybeInitOncePrefs", [&]() { InitOncePrefs(); });
|
"Preferences::MaybeInitOncePrefs", [&]() { InitOncePrefs(); });
|
||||||
// This logic needs to run on the main thread
|
// This logic needs to run on the main thread
|
||||||
mozilla::SyncRunnable::DispatchToThread(
|
SyncRunnable::DispatchToThread(
|
||||||
SystemGroup::EventTargetFor(mozilla::TaskCategory::Other), runnable);
|
SystemGroup::EventTargetFor(TaskCategory::Other), runnable);
|
||||||
}
|
}
|
||||||
sOncePrefRead = true;
|
sOncePrefRead = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For a VarCache pref like this:
|
// For a pref like this:
|
||||||
//
|
//
|
||||||
// VARCACHE_PREF(Once, "my.varcache", my_varcache, int32_t, 99)
|
// VARCACHE_PREF($POLICY, "my.pref", my_pref, int32_t, 99)
|
||||||
//
|
//
|
||||||
// we generate a static variable definition and a setter like:
|
// we generate a variable definition like this:
|
||||||
|
//
|
||||||
|
// int32_t sVarCache_my_pref(99);
|
||||||
//
|
//
|
||||||
// int32_t StaticPrefs::sVarCache_my_varcache(99);
|
|
||||||
// int32_t StaticPrefs::my_varcache() {
|
|
||||||
// if (UpdatePolicy::Skip != UpdatePolicy::Once) {
|
|
||||||
// return sVarCache_myvarcache;
|
|
||||||
// }
|
|
||||||
// MaybeInitOncePrefs();
|
|
||||||
// return sVarCache_myvarcache;
|
|
||||||
// }
|
|
||||||
|
|
||||||
#define PREF(name, cpp_type, value)
|
#define PREF(name, cpp_type, value)
|
||||||
#define VARCACHE_PREF(policy, name, id, cpp_type, default_value) \
|
#define VARCACHE_PREF(policy, name, id, cpp_type, default_value) \
|
||||||
cpp_type StaticPrefs::sVarCache_##id(default_value);
|
cpp_type sVarCache_##id(default_value);
|
||||||
#include "mozilla/StaticPrefList.h"
|
#include "mozilla/StaticPrefList.h"
|
||||||
#undef PREF
|
#undef PREF
|
||||||
#undef VARCACHE_PREF
|
#undef VARCACHE_PREF
|
||||||
|
|
||||||
/* static */
|
static void InitAll(bool aIsStartup) {
|
||||||
void StaticPrefs::InitAll(bool aIsStartup) {
|
bool isParent = XRE_IsParentProcess();
|
||||||
|
|
||||||
// For prefs like these:
|
// For prefs like these:
|
||||||
//
|
//
|
||||||
// PREF("foo.bar.baz", bool, true)
|
// PREF("foo.bar.baz", bool, true)
|
||||||
// VARCACHE_PREF(Live, "my.varcache", my_varcache, int32_t, 99)
|
// VARCACHE_PREF($POLICY, "my.pref", my_pref, int32_t, 99)
|
||||||
//
|
//
|
||||||
// we generate registration calls:
|
// we generate registration calls like this:
|
||||||
//
|
//
|
||||||
// if (isParent)
|
// if (isParent) {
|
||||||
// SetPref_bool("foo.bar.baz", true);
|
// SetPref_bool("foo.bar.baz", true);
|
||||||
// InitVarCachePref(StaticPrefs::UpdatePolicy::Live, "my.varcache",
|
// }
|
||||||
// &StaticPrefs::sVarCache_my_varcache, 99, aIsStartup,
|
// InitVarCachePref(UpdatePolicy::Live, "my.pref", &sVarCache_my_pref,
|
||||||
// isParent);
|
// 99, aIsStartup, isParent);
|
||||||
//
|
//
|
||||||
// The SetPref_*() functions have a type suffix to avoid ambiguity between
|
// The SetPref_*() functions have a type suffix to avoid ambiguity between
|
||||||
// prefs having int32_t and float default values. That suffix is not needed
|
// prefs having int32_t and float default values. That suffix is not needed
|
||||||
|
@ -5458,30 +5467,27 @@ void StaticPrefs::InitAll(bool aIsStartup) {
|
||||||
//
|
//
|
||||||
// In content processes, we rely on the parent to send us the correct initial
|
// In content processes, we rely on the parent to send us the correct initial
|
||||||
// values via shared memory, so we do not re-initialize them here.
|
// values via shared memory, so we do not re-initialize them here.
|
||||||
bool isParent = XRE_IsParentProcess();
|
#define PREF(name, cpp_type, value) \
|
||||||
#define PREF(name, cpp_type, value) \
|
if (isParent) { \
|
||||||
if (isParent) SetPref_##cpp_type(name, value);
|
SetPref_##cpp_type(name, value); \
|
||||||
#define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
}
|
||||||
InitVarCachePref(StaticPrefs::UpdatePolicy::policy, \
|
#define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
||||||
NS_LITERAL_CSTRING(name), &StaticPrefs::sVarCache_##id, \
|
InitVarCachePref(UpdatePolicy::policy, NS_LITERAL_CSTRING(name), \
|
||||||
value, aIsStartup, isParent);
|
&sVarCache_##id, value, aIsStartup, isParent);
|
||||||
#include "mozilla/StaticPrefList.h"
|
#include "mozilla/StaticPrefList.h"
|
||||||
#undef PREF
|
#undef PREF
|
||||||
#undef VARCACHE_PREF
|
#undef VARCACHE_PREF
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */
|
static void InitOncePrefs() {
|
||||||
void StaticPrefs::InitOncePrefs() {
|
// For a pref like this:
|
||||||
// For prefs like these:
|
|
||||||
//
|
//
|
||||||
// VARCACHE_PREF(Skip, "my.varcache", my_varcache, int32_t, 99)
|
// VARCACHE_PREF($POLICY, "my.pref", my_pref, int32_t, 99)
|
||||||
//
|
//
|
||||||
// we generate registration calls:
|
// we generate an initialization (in a non-DEBUG build) like this:
|
||||||
//
|
//
|
||||||
// if (UpdatePolicy::Skip == UpdatePolicy::Once) {
|
// if (UpdatePolicy::$POLICY == UpdatePolicy::Once) {
|
||||||
// StaticPrefs::sVarCache_my_varcache =
|
// sVarCache_my_pref = PreferencesInternalMethods::GetPref("my.pref", 99);
|
||||||
// PreferencesInternalMethods::GetPref("my.varcache",
|
|
||||||
// StripAtomic<int32_t>(99));
|
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// This is done to get the potentially updated Preference value as we didn't
|
// This is done to get the potentially updated Preference value as we didn't
|
||||||
|
@ -5491,34 +5497,34 @@ void StaticPrefs::InitOncePrefs() {
|
||||||
// original Preference is being modified once `Once` StaticPrefs have been
|
// original Preference is being modified once `Once` StaticPrefs have been
|
||||||
// initialized as this would indicate a likely misuse of `Once` StaticPrefs
|
// initialized as this would indicate a likely misuse of `Once` StaticPrefs
|
||||||
// and that maybe instead they should have been made `Live`.
|
// and that maybe instead they should have been made `Live`.
|
||||||
|
//
|
||||||
#define PREF(name, cpp_type, value)
|
#define PREF(name, cpp_type, value)
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
# define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
# define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
||||||
if (UpdatePolicy::policy == UpdatePolicy::Once) { \
|
if (UpdatePolicy::policy == UpdatePolicy::Once) { \
|
||||||
MOZ_ASSERT(gOnceStaticPrefsAntiFootgun); \
|
MOZ_ASSERT(gOnceStaticPrefsAntiFootgun); \
|
||||||
StaticPrefs::sVarCache_##id = PreferencesInternalMethods::GetPref( \
|
sVarCache_##id = PreferencesInternalMethods::GetPref( \
|
||||||
name, StripAtomic<cpp_type>(value)); \
|
name, StripAtomic<cpp_type>(value)); \
|
||||||
auto checkPref = [&]() { \
|
auto checkPref = [&]() { \
|
||||||
MOZ_ASSERT(sOncePrefRead); \
|
MOZ_ASSERT(sOncePrefRead); \
|
||||||
StripAtomic<cpp_type> staticPrefValue = StaticPrefs::id(); \
|
StripAtomic<cpp_type> staticPrefValue = id(); \
|
||||||
StripAtomic<cpp_type> preferenceValue = \
|
StripAtomic<cpp_type> preferenceValue = \
|
||||||
PreferencesInternalMethods::GetPref( \
|
PreferencesInternalMethods::GetPref(Get##id##PrefName(), \
|
||||||
StaticPrefs::Get##id##PrefName(), \
|
StripAtomic<cpp_type>(value)); \
|
||||||
StripAtomic<cpp_type>(value)); \
|
MOZ_ASSERT( \
|
||||||
MOZ_ASSERT( \
|
staticPrefValue == preferenceValue, \
|
||||||
staticPrefValue == preferenceValue, \
|
"Preference '" name "' got modified since StaticPrefs::" #id \
|
||||||
"Preference '" name "' got modified since StaticPrefs::" #id \
|
" got initialized. Consider using a `Live` StaticPrefs instead"); \
|
||||||
" got initialized. Consider using a `Live` StaticPrefs instead"); \
|
}; \
|
||||||
}; \
|
gOnceStaticPrefsAntiFootgun->insert( \
|
||||||
gOnceStaticPrefsAntiFootgun->insert( \
|
std::pair<const char*, AntiFootgunCallback>(Get##id##PrefName(), \
|
||||||
std::pair<const char*, AntiFootgunCallback>(Get##id##PrefName(), \
|
std::move(checkPref))); \
|
||||||
std::move(checkPref))); \
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
# define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
# define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
||||||
if (UpdatePolicy::policy == UpdatePolicy::Once) { \
|
if (UpdatePolicy::policy == UpdatePolicy::Once) { \
|
||||||
StaticPrefs::sVarCache_##id = PreferencesInternalMethods::GetPref( \
|
sVarCache_##id = PreferencesInternalMethods::GetPref( \
|
||||||
name, StripAtomic<cpp_type>(value)); \
|
name, StripAtomic<cpp_type>(value)); \
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5527,6 +5533,8 @@ void StaticPrefs::InitOncePrefs() {
|
||||||
#undef VARCACHE_PREF
|
#undef VARCACHE_PREF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace StaticPrefs
|
||||||
|
|
||||||
static MOZ_MAYBE_UNUSED void SaveOncePrefToSharedMap(
|
static MOZ_MAYBE_UNUSED void SaveOncePrefToSharedMap(
|
||||||
SharedPrefMapBuilder& aBuilder, const char* aName, bool aValue) {
|
SharedPrefMapBuilder& aBuilder, const char* aName, bool aValue) {
|
||||||
auto oncePref = MakeUnique<Pref>(aName);
|
auto oncePref = MakeUnique<Pref>(aName);
|
||||||
|
@ -5578,22 +5586,23 @@ static MOZ_MAYBE_UNUSED void SaveOncePrefToSharedMap(
|
||||||
|
|
||||||
#define ONCE_PREF_NAME(name) ("$$$" name "$$$")
|
#define ONCE_PREF_NAME(name) ("$$$" name "$$$")
|
||||||
|
|
||||||
/* static */
|
namespace StaticPrefs {
|
||||||
void StaticPrefs::RegisterOncePrefs(SharedPrefMapBuilder& aBuilder) {
|
|
||||||
|
static void RegisterOncePrefs(SharedPrefMapBuilder& aBuilder) {
|
||||||
MOZ_ASSERT(XRE_IsParentProcess());
|
MOZ_ASSERT(XRE_IsParentProcess());
|
||||||
MOZ_DIAGNOSTIC_ASSERT(!gSharedMap,
|
MOZ_DIAGNOSTIC_ASSERT(!gSharedMap,
|
||||||
"Must be called before gSharedMap has been created");
|
"Must be called before gSharedMap has been created");
|
||||||
MaybeInitOncePrefs();
|
MaybeInitOncePrefs();
|
||||||
// For prefs like these:
|
|
||||||
|
// For a pref like this:
|
||||||
//
|
//
|
||||||
// VARCACHE_PREF(Once, "my.varcache", my_varcache, int32_t, 99)
|
// VARCACHE_PREF($POLICY, "my.pref", my_pref, int32_t, 99)
|
||||||
// (Other StaticPrefs policies are ignored)
|
|
||||||
//
|
//
|
||||||
// we generate registration calls:
|
// we generate a save call like this:
|
||||||
//
|
//
|
||||||
// if (UpdatePolicy::Once == UpdatePolicy::Once) {
|
// if (UpdatePolicy::$POLICY == UpdatePolicy::Once) {
|
||||||
// SaveOncePrefToSharedMap(aBuilder, ONCE_PREF_NAME(my.varcache),
|
// SaveOncePrefToSharedMap(aBuilder, ONCE_PREF_NAME(my.pref),
|
||||||
// sVarCache_myvarcache);
|
// sVarCache_my_pref);
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// `Once` StaticPrefs values will be stored in a hidden and locked preferences
|
// `Once` StaticPrefs values will be stored in a hidden and locked preferences
|
||||||
|
@ -5601,7 +5610,7 @@ void StaticPrefs::RegisterOncePrefs(SharedPrefMapBuilder& aBuilder) {
|
||||||
// hidden and not appear in about:config nor ever be stored to disk, we add
|
// hidden and not appear in about:config nor ever be stored to disk, we add
|
||||||
// the "$$$" prefix and suffix to the preference name and set the IsVisible
|
// the "$$$" prefix and suffix to the preference name and set the IsVisible
|
||||||
// flag to false.
|
// flag to false.
|
||||||
|
//
|
||||||
#define PREF(name, cpp_type, value)
|
#define PREF(name, cpp_type, value)
|
||||||
#define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
#define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
||||||
if (UpdatePolicy::policy == UpdatePolicy::Once) { \
|
if (UpdatePolicy::policy == UpdatePolicy::Once) { \
|
||||||
|
@ -5613,32 +5622,30 @@ void StaticPrefs::RegisterOncePrefs(SharedPrefMapBuilder& aBuilder) {
|
||||||
#undef VARCACHE_PREF
|
#undef VARCACHE_PREF
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */
|
static void InitStaticPrefsFromShared() {
|
||||||
void StaticPrefs::InitStaticPrefsFromShared() {
|
|
||||||
MOZ_ASSERT(!XRE_IsParentProcess());
|
MOZ_ASSERT(!XRE_IsParentProcess());
|
||||||
MOZ_DIAGNOSTIC_ASSERT(gSharedMap,
|
MOZ_DIAGNOSTIC_ASSERT(gSharedMap,
|
||||||
"Must be called once gSharedMap has been created");
|
"Must be called once gSharedMap has been created");
|
||||||
// For prefs like these:
|
|
||||||
|
// For a prefs like this:
|
||||||
//
|
//
|
||||||
// VARCACHE_PREF(Once, "my.varcache", my_varcache, int32_t, 99)
|
// VARCACHE_PREF($POLICY, "my.pref", my_pref, int32_t, 99)
|
||||||
// (Other StaticPrefs policies are ignored).
|
|
||||||
//
|
//
|
||||||
// we generate registration calls:
|
// we generate an initialization like this:
|
||||||
//
|
//
|
||||||
// if (UpdatePolicy::Once != UpdatePolicy::Skip) {
|
// if (UpdatePolicy::$POLICY != UpdatePolicy::Skip) {
|
||||||
// int32_t val;
|
// int32_t val;
|
||||||
// nsresult rv;
|
// nsresult rv;
|
||||||
// if (UpdatePolicy::Once == UpdatePolicy::Once) {
|
// if (UpdatePolicy::$POLICY == UpdatePolicy::Once) {
|
||||||
// rv = PreferencesInternalMethods::GetSharedPrefValue(
|
// rv = PreferencesInternalMethods::GetSharedPrefValue(
|
||||||
// "$$$my.varcache$$$", &val);
|
// "$$$my.pref$$$", &val);
|
||||||
// } else if (UpdatePolicy::Once == UpdatePolicy::Live) {
|
// } else if (UpdatePolicy::Once == UpdatePolicy::Live) {
|
||||||
// rv = PreferencesInternalMethods::GetSharedPrefValue(
|
// rv = PreferencesInternalMethods::GetSharedPrefValue("my.pref", &val);
|
||||||
// "my.varcache", &val);
|
|
||||||
// }
|
// }
|
||||||
// MOZ_DIAGNOSTIC_ALWAYS_TRUE(NS_SUCCEEDED(rv));
|
// MOZ_DIAGNOSTIC_ALWAYS_TRUE(NS_SUCCEEDED(rv));
|
||||||
// StaticPrefs::sVarCache_my_varcache = val;
|
// sVarCache_my_pref = val;
|
||||||
// }
|
// }
|
||||||
|
//
|
||||||
#define PREF(name, cpp_type, value)
|
#define PREF(name, cpp_type, value)
|
||||||
#define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
#define VARCACHE_PREF(policy, name, id, cpp_type, value) \
|
||||||
if (UpdatePolicy::policy != UpdatePolicy::Skip) { \
|
if (UpdatePolicy::policy != UpdatePolicy::Skip) { \
|
||||||
|
@ -5656,12 +5663,15 @@ void StaticPrefs::InitStaticPrefsFromShared() {
|
||||||
#include "mozilla/StaticPrefList.h"
|
#include "mozilla/StaticPrefList.h"
|
||||||
#undef PREF
|
#undef PREF
|
||||||
#undef VARCACHE_PREF
|
#undef VARCACHE_PREF
|
||||||
|
|
||||||
// `Once` StaticPrefs have been set to their value in the step above and
|
// `Once` StaticPrefs have been set to their value in the step above and
|
||||||
// outside the parent process they are immutable. So we set sOncePrefRead
|
// outside the parent process they are immutable. So we set sOncePrefRead
|
||||||
// so that we can directly skip any lazy initializations.
|
// so that we can directly skip any lazy initializations.
|
||||||
sOncePrefRead = true;
|
sOncePrefRead = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace StaticPrefs
|
||||||
|
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
||||||
#undef ENSURE_PARENT_PROCESS
|
#undef ENSURE_PARENT_PROCESS
|
||||||
|
|
|
@ -69,66 +69,61 @@ struct IsAtomic<Atomic<T, Order>> : TrueType {};
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct IsAtomic<std::atomic<T>> : TrueType {};
|
struct IsAtomic<std::atomic<T>> : TrueType {};
|
||||||
|
|
||||||
class StaticPrefs {
|
namespace StaticPrefs {
|
||||||
// For a VarCache pref like this:
|
|
||||||
//
|
|
||||||
// VARCACHE_PREF("my.varcache", my_varcache, int32_t, 99)
|
|
||||||
//
|
|
||||||
// we generate a static variable declaration, a getter and a setter
|
|
||||||
// definition. A StaticPref can be set by using the corresponding Set method.
|
|
||||||
// For example, if the accessor is Foo() then calling SetFoo(...) will update
|
|
||||||
// the preference and also change the return value of subsequent Foo() calls.
|
|
||||||
// Changing StaticPrefs is only allowed on the parent process' main thread.
|
|
||||||
//
|
|
||||||
// private:
|
|
||||||
// static int32_t sVarCache_my_varcache;
|
|
||||||
// public:
|
|
||||||
// static int32_t my_varcache();
|
|
||||||
// static const char* Getmy_varcachePrefName() { return "my.varcache"; }
|
|
||||||
// static int32_t Getmy_varcachePrefDefault() { return 99; }
|
|
||||||
//
|
|
||||||
|
|
||||||
public:
|
// Enums for the update policy.
|
||||||
// Enums for the update policy.
|
enum class UpdatePolicy {
|
||||||
enum class UpdatePolicy {
|
Skip, // Set the value to default, skip any Preferences calls.
|
||||||
Skip, // Set the value to default, skip any Preferences calls.
|
Once, // Evaluate the preference once, unchanged during the session.
|
||||||
Once, // Evaluate the preference once, unchanged during the session.
|
Live // Evaluate the preference and set callback so it stays current/live.
|
||||||
Live // Evaluate the preference and set callback so it stays current/live.
|
};
|
||||||
};
|
|
||||||
|
|
||||||
#define PREF(str, cpp_type, default_value)
|
void MaybeInitOncePrefs();
|
||||||
#define VARCACHE_PREF(policy, str, id, cpp_type, default_value) \
|
|
||||||
private: \
|
// For a VarCache pref like this:
|
||||||
static cpp_type sVarCache_##id; \
|
//
|
||||||
\
|
// VARCACHE_PREF($POLICY, "my.pref", my_pref, int32_t, 99)
|
||||||
public: \
|
//
|
||||||
static StripAtomic<cpp_type> id() { \
|
// we generate an extern variable declaration and three getter
|
||||||
if (UpdatePolicy::policy != UpdatePolicy::Once) { \
|
// declarations/definitions.
|
||||||
MOZ_DIAGNOSTIC_ASSERT( \
|
//
|
||||||
UpdatePolicy::policy == UpdatePolicy::Skip || \
|
// extern int32_t sVarCache_my_pref;
|
||||||
IsAtomic<cpp_type>::value || NS_IsMainThread(), \
|
// inline int32_t my_pref() {
|
||||||
"Non-atomic static pref '" str \
|
// if (UpdatePolicy::$POLICY != UpdatePolicy::Once) {
|
||||||
"' being accessed on background thread by getter"); \
|
// return sVarCache_my_pref;
|
||||||
return sVarCache_##id; \
|
// }
|
||||||
} \
|
// MaybeInitOncePrefs();
|
||||||
MaybeInitOncePrefs(); \
|
// return sVarCache_my_pref();
|
||||||
return sVarCache_##id; \
|
// }
|
||||||
} \
|
// inline const char* Getmy_prefPrefName() { return "my.pref"; }
|
||||||
static const char* Get##id##PrefName() { return str; } \
|
// inline int32_t Getmy_prefPrefDefault() { return 99; }
|
||||||
static StripAtomic<cpp_type> Get##id##PrefDefault() { return default_value; }
|
//
|
||||||
|
// The extern declaration of the variable is necessary for bindgen to see it
|
||||||
|
// and generate Rust bindings.
|
||||||
|
//
|
||||||
|
#define PREF(name, cpp_type, default_value)
|
||||||
|
#define VARCACHE_PREF(policy, name, id, cpp_type, default_value) \
|
||||||
|
extern cpp_type sVarCache_##id; \
|
||||||
|
inline StripAtomic<cpp_type> id() { \
|
||||||
|
if (UpdatePolicy::policy != UpdatePolicy::Once) { \
|
||||||
|
MOZ_DIAGNOSTIC_ASSERT( \
|
||||||
|
UpdatePolicy::policy == UpdatePolicy::Skip || \
|
||||||
|
IsAtomic<cpp_type>::value || NS_IsMainThread(), \
|
||||||
|
"Non-atomic static pref '" name \
|
||||||
|
"' being accessed on background thread by getter"); \
|
||||||
|
return sVarCache_##id; \
|
||||||
|
} \
|
||||||
|
MaybeInitOncePrefs(); \
|
||||||
|
return sVarCache_##id; \
|
||||||
|
} \
|
||||||
|
inline const char* Get##id##PrefName() { return name; } \
|
||||||
|
inline StripAtomic<cpp_type> Get##id##PrefDefault() { return default_value; }
|
||||||
|
|
||||||
#include "mozilla/StaticPrefList.h"
|
#include "mozilla/StaticPrefList.h"
|
||||||
#undef PREF
|
#undef PREF
|
||||||
#undef VARCACHE_PREF
|
#undef VARCACHE_PREF
|
||||||
|
|
||||||
private:
|
} // namespace StaticPrefs
|
||||||
friend class Preferences;
|
|
||||||
static void InitAll(bool aIsStartup);
|
|
||||||
static void MaybeInitOncePrefs();
|
|
||||||
static void InitOncePrefs();
|
|
||||||
static void InitStaticPrefsFromShared();
|
|
||||||
static void RegisterOncePrefs(SharedPrefMapBuilder& aBuilder);
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
// VARCACHE_PREF(
|
// VARCACHE_PREF(
|
||||||
// <update-policy>,
|
// <update-policy>,
|
||||||
// <pref-name-string>,
|
// <pref-name-string>,
|
||||||
// <pref-name-id>,
|
// <pref-name-id>, // indented one space to align with <pref-name-string>
|
||||||
// <cpp-type>, <default-value>
|
// <cpp-type>, <default-value>
|
||||||
// )
|
// )
|
||||||
//
|
//
|
||||||
|
@ -117,14 +117,14 @@
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"accessibility.monoaudio.enable",
|
"accessibility.monoaudio.enable",
|
||||||
accessibility_monoaudio_enable,
|
accessibility_monoaudio_enable,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"accessibility.browsewithcaret",
|
"accessibility.browsewithcaret",
|
||||||
AccessibilityBrowseWithCaret,
|
accessibility_browsewithcaret,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -136,273 +136,273 @@ VARCACHE_PREF(
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.allow_double_tap_zooming",
|
"apz.allow_double_tap_zooming",
|
||||||
APZAllowDoubleTapZooming,
|
apz_allow_double_tap_zooming,
|
||||||
RelaxedAtomicBool, true
|
RelaxedAtomicBool, true
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.allow_immediate_handoff",
|
"apz.allow_immediate_handoff",
|
||||||
APZAllowImmediateHandoff,
|
apz_allow_immediate_handoff,
|
||||||
RelaxedAtomicBool, true
|
RelaxedAtomicBool, true
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.allow_zooming",
|
"apz.allow_zooming",
|
||||||
APZAllowZooming,
|
apz_allow_zooming,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.android.chrome_fling_physics.enabled",
|
"apz.android.chrome_fling_physics.enabled",
|
||||||
APZUseChromeFlingPhysics,
|
apz_android_chrome_fling_physics_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.android.chrome_fling_physics.friction",
|
"apz.android.chrome_fling_physics.friction",
|
||||||
APZChromeFlingPhysicsFriction,
|
apz_android_chrome_fling_physics_friction,
|
||||||
AtomicFloat, 0.015f
|
AtomicFloat, 0.015f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.android.chrome_fling_physics.inflexion",
|
"apz.android.chrome_fling_physics.inflexion",
|
||||||
APZChromeFlingPhysicsInflexion,
|
apz_android_chrome_fling_physics_inflexion,
|
||||||
AtomicFloat, 0.35f
|
AtomicFloat, 0.35f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.android.chrome_fling_physics.stop_threshold",
|
"apz.android.chrome_fling_physics.stop_threshold",
|
||||||
APZChromeFlingPhysicsStopThreshold,
|
apz_android_chrome_fling_physics_stop_threshold,
|
||||||
AtomicFloat, 0.1f
|
AtomicFloat, 0.1f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.autoscroll.enabled",
|
"apz.autoscroll.enabled",
|
||||||
APZAutoscrollEnabled,
|
apz_autoscroll_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.axis_lock.breakout_angle",
|
"apz.axis_lock.breakout_angle",
|
||||||
APZAxisBreakoutAngle,
|
apz_axis_lock_breakout_angle,
|
||||||
AtomicFloat, float(M_PI / 8.0) /* 22.5 degrees */
|
AtomicFloat, float(M_PI / 8.0) /* 22.5 degrees */
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.axis_lock.breakout_threshold",
|
"apz.axis_lock.breakout_threshold",
|
||||||
APZAxisBreakoutThreshold,
|
apz_axis_lock_breakout_threshold,
|
||||||
AtomicFloat, 1.0f / 32.0f
|
AtomicFloat, 1.0f / 32.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.axis_lock.direct_pan_angle",
|
"apz.axis_lock.direct_pan_angle",
|
||||||
APZAllowedDirectPanAngle,
|
apz_axis_lock_direct_pan_angle,
|
||||||
AtomicFloat, float(M_PI / 3.0) /* 60 degrees */
|
AtomicFloat, float(M_PI / 3.0) /* 60 degrees */
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.axis_lock.lock_angle",
|
"apz.axis_lock.lock_angle",
|
||||||
APZAxisLockAngle,
|
apz_axis_lock_lock_angle,
|
||||||
AtomicFloat, float(M_PI / 6.0) /* 30 degrees */
|
AtomicFloat, float(M_PI / 6.0) /* 30 degrees */
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.axis_lock.mode",
|
"apz.axis_lock.mode",
|
||||||
APZAxisLockMode,
|
apz_axis_lock_mode,
|
||||||
RelaxedAtomicInt32, 0
|
RelaxedAtomicInt32, 0
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.content_response_timeout",
|
"apz.content_response_timeout",
|
||||||
APZContentResponseTimeout,
|
apz_content_response_timeout,
|
||||||
RelaxedAtomicInt32, 400
|
RelaxedAtomicInt32, 400
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.danger_zone_x",
|
"apz.danger_zone_x",
|
||||||
APZDangerZoneX,
|
apz_danger_zone_x,
|
||||||
RelaxedAtomicInt32, 50
|
RelaxedAtomicInt32, 50
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.danger_zone_y",
|
"apz.danger_zone_y",
|
||||||
APZDangerZoneY,
|
apz_danger_zone_y,
|
||||||
RelaxedAtomicInt32, 100
|
RelaxedAtomicInt32, 100
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.disable_for_scroll_linked_effects",
|
"apz.disable_for_scroll_linked_effects",
|
||||||
APZDisableForScrollLinkedEffects,
|
apz_disable_for_scroll_linked_effects,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.displayport_expiry_ms",
|
"apz.displayport_expiry_ms",
|
||||||
APZDisplayPortExpiryTime,
|
apz_displayport_expiry_ms,
|
||||||
RelaxedAtomicUint32, 15000
|
RelaxedAtomicUint32, 15000
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.drag.enabled",
|
"apz.drag.enabled",
|
||||||
APZDragEnabled,
|
apz_drag_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.drag.initial.enabled",
|
"apz.drag.initial.enabled",
|
||||||
APZDragInitiationEnabled,
|
apz_drag_initial_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.drag.touch.enabled",
|
"apz.drag.touch.enabled",
|
||||||
APZTouchDragEnabled,
|
apz_touch_drag_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.enlarge_displayport_when_clipped",
|
"apz.enlarge_displayport_when_clipped",
|
||||||
APZEnlargeDisplayPortWhenClipped,
|
apz_enlarge_displayport_when_clipped,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fixed-margin-override.enabled",
|
"apz.fixed-margin-override.enabled",
|
||||||
APZFixedMarginOverrideEnabled,
|
apz_fixed_margin_override_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fixed-margin-override.bottom",
|
"apz.fixed-margin-override.bottom",
|
||||||
APZFixedMarginOverrideBottom,
|
apz_fixed_margin_override_bottom,
|
||||||
RelaxedAtomicInt32, 0
|
RelaxedAtomicInt32, 0
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fixed-margin-override.top",
|
"apz.fixed-margin-override.top",
|
||||||
APZFixedMarginOverrideTop,
|
apz_fixed_margin_override_top,
|
||||||
RelaxedAtomicInt32, 0
|
RelaxedAtomicInt32, 0
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fling_accel_base_mult",
|
"apz.fling_accel_base_mult",
|
||||||
APZFlingAccelBaseMultiplier,
|
apz_fling_accel_base_mult,
|
||||||
AtomicFloat, 1.0f
|
AtomicFloat, 1.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fling_accel_interval_ms",
|
"apz.fling_accel_interval_ms",
|
||||||
APZFlingAccelInterval,
|
apz_fling_accel_interval_ms,
|
||||||
RelaxedAtomicInt32, 500
|
RelaxedAtomicInt32, 500
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fling_accel_supplemental_mult",
|
"apz.fling_accel_supplemental_mult",
|
||||||
APZFlingAccelSupplementalMultiplier,
|
apz_fling_accel_supplemental_mult,
|
||||||
AtomicFloat, 1.0f
|
AtomicFloat, 1.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fling_accel_min_velocity",
|
"apz.fling_accel_min_velocity",
|
||||||
APZFlingAccelMinVelocity,
|
apz_fling_accel_min_velocity,
|
||||||
AtomicFloat, 1.5f
|
AtomicFloat, 1.5f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Once,
|
Once,
|
||||||
"apz.fling_curve_function_x1",
|
"apz.fling_curve_function_x1",
|
||||||
APZCurveFunctionX1,
|
apz_fling_curve_function_x1,
|
||||||
float, 0.0f
|
float, 0.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Once,
|
Once,
|
||||||
"apz.fling_curve_function_x2",
|
"apz.fling_curve_function_x2",
|
||||||
APZCurveFunctionX2,
|
apz_fling_curve_function_x2,
|
||||||
float, 1.0f
|
float, 1.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Once,
|
Once,
|
||||||
"apz.fling_curve_function_y1",
|
"apz.fling_curve_function_y1",
|
||||||
APZCurveFunctionY1,
|
apz_fling_curve_function_y1,
|
||||||
float, 0.0f
|
float, 0.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Once,
|
Once,
|
||||||
"apz.fling_curve_function_y2",
|
"apz.fling_curve_function_y2",
|
||||||
APZCurveFunctionY2,
|
apz_fling_curve_function_y2,
|
||||||
float, 1.0f
|
float, 1.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fling_curve_threshold_inches_per_ms",
|
"apz.fling_curve_threshold_inches_per_ms",
|
||||||
APZCurveThreshold,
|
apz_fling_curve_threshold_inches_per_ms,
|
||||||
AtomicFloat, -1.0f
|
AtomicFloat, -1.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fling_friction",
|
"apz.fling_friction",
|
||||||
APZFlingFriction,
|
apz_fling_friction,
|
||||||
AtomicFloat, 0.002f
|
AtomicFloat, 0.002f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fling_min_velocity_threshold",
|
"apz.fling_min_velocity_threshold",
|
||||||
APZFlingMinVelocityThreshold,
|
apz_fling_min_velocity_threshold,
|
||||||
AtomicFloat, 0.5f
|
AtomicFloat, 0.5f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fling_stop_on_tap_threshold",
|
"apz.fling_stop_on_tap_threshold",
|
||||||
APZFlingStopOnTapThreshold,
|
apz_fling_stop_on_tap_threshold,
|
||||||
AtomicFloat, 0.05f
|
AtomicFloat, 0.05f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.fling_stopped_threshold",
|
"apz.fling_stopped_threshold",
|
||||||
APZFlingStoppedThreshold,
|
apz_fling_stopped_threshold,
|
||||||
AtomicFloat, 0.01f
|
AtomicFloat, 0.01f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.frame_delay.enabled",
|
"apz.frame_delay.enabled",
|
||||||
APZFrameDelayEnabled,
|
apz_frame_delay_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -410,7 +410,7 @@ VARCACHE_PREF(
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.gtk.kinetic_scroll.enabled",
|
"apz.gtk.kinetic_scroll.enabled",
|
||||||
APZGTKKineticScrollEnabled,
|
apz_gtk_kinetic_scroll_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
#endif
|
#endif
|
||||||
|
@ -423,7 +423,7 @@ VARCACHE_PREF(
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Once,
|
Once,
|
||||||
"apz.keyboard.enabled",
|
"apz.keyboard.enabled",
|
||||||
APZKeyboardEnabled,
|
apz_keyboard_enabled,
|
||||||
bool, PREF_VALUE
|
bool, PREF_VALUE
|
||||||
)
|
)
|
||||||
#undef PREF_VALUE
|
#undef PREF_VALUE
|
||||||
|
@ -431,278 +431,262 @@ VARCACHE_PREF(
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.keyboard.passive-listeners",
|
"apz.keyboard.passive-listeners",
|
||||||
APZKeyboardPassiveListeners,
|
apz_keyboard_passive_listeners,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.max_tap_time",
|
"apz.max_tap_time",
|
||||||
APZMaxTapTime,
|
apz_max_tap_time,
|
||||||
RelaxedAtomicInt32, 300
|
RelaxedAtomicInt32, 300
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.max_velocity_inches_per_ms",
|
"apz.max_velocity_inches_per_ms",
|
||||||
APZMaxVelocity,
|
apz_max_velocity_inches_per_ms,
|
||||||
AtomicFloat, -1.0f
|
AtomicFloat, -1.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Once,
|
Once,
|
||||||
"apz.max_velocity_queue_size",
|
"apz.max_velocity_queue_size",
|
||||||
APZMaxVelocityQueueSize,
|
apz_max_velocity_queue_size,
|
||||||
uint32_t, 5
|
uint32_t, 5
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.min_skate_speed",
|
"apz.min_skate_speed",
|
||||||
APZMinSkateSpeed,
|
apz_min_skate_speed,
|
||||||
AtomicFloat, 1.0f
|
AtomicFloat, 1.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.minimap.enabled",
|
"apz.minimap.enabled",
|
||||||
APZMinimap,
|
apz_minimap_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.one_touch_pinch.enabled",
|
"apz.one_touch_pinch.enabled",
|
||||||
APZOneTouchPinchEnabled,
|
apz_one_touch_pinch_enabled,
|
||||||
RelaxedAtomicBool, true
|
RelaxedAtomicBool, true
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.overscroll.enabled",
|
"apz.overscroll.enabled",
|
||||||
APZOverscrollEnabled,
|
apz_overscroll_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.overscroll.min_pan_distance_ratio",
|
"apz.overscroll.min_pan_distance_ratio",
|
||||||
APZMinPanDistanceRatio,
|
apz_overscroll_min_pan_distance_ratio,
|
||||||
AtomicFloat, 1.0f
|
AtomicFloat, 1.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.overscroll.spring_stiffness",
|
"apz.overscroll.spring_stiffness",
|
||||||
APZOverscrollSpringStiffness,
|
apz_overscroll_spring_stiffness,
|
||||||
AtomicFloat, 0.001f
|
AtomicFloat, 0.001f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.overscroll.stop_distance_threshold",
|
"apz.overscroll.stop_distance_threshold",
|
||||||
APZOverscrollStopDistanceThreshold,
|
apz_overscroll_stop_distance_threshold,
|
||||||
AtomicFloat, 5.0f
|
AtomicFloat, 5.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.paint_skipping.enabled",
|
"apz.paint_skipping.enabled",
|
||||||
APZPaintSkipping,
|
apz_paint_skipping_enabled,
|
||||||
RelaxedAtomicBool, true
|
RelaxedAtomicBool, true
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.peek_messages.enabled",
|
"apz.peek_messages.enabled",
|
||||||
APZPeekMessages,
|
apz_peek_messages_enabled,
|
||||||
RelaxedAtomicBool, true
|
RelaxedAtomicBool, true
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.pinch_lock.mode",
|
"apz.pinch_lock.mode",
|
||||||
APZPinchLockMode,
|
apz_pinch_lock_mode,
|
||||||
RelaxedAtomicInt32, 1
|
RelaxedAtomicInt32, 1
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.pinch_lock.scroll_lock_threshold",
|
"apz.pinch_lock.scroll_lock_threshold",
|
||||||
APZPinchLockScrollLockThreshold,
|
apz_pinch_lock_scroll_lock_threshold,
|
||||||
AtomicFloat, 1.0f / 32.0f
|
AtomicFloat, 1.0f / 32.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.pinch_lock.span_breakout_threshold",
|
"apz.pinch_lock.span_breakout_threshold",
|
||||||
APZPinchLockSpanBreakoutThreshold,
|
apz_pinch_lock_span_breakout_threshold,
|
||||||
AtomicFloat, 1.0f / 32.0f
|
AtomicFloat, 1.0f / 32.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.pinch_lock.span_lock_threshold",
|
"apz.pinch_lock.span_lock_threshold",
|
||||||
APZPinchLockSpanLockThreshold,
|
apz_pinch_lock_span_lock_threshold,
|
||||||
AtomicFloat, 1.0f / 32.0f
|
AtomicFloat, 1.0f / 32.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Once,
|
Once,
|
||||||
"apz.pinch_lock.buffer_max_age",
|
"apz.pinch_lock.buffer_max_age",
|
||||||
APZPinchLockBufferMaxAge,
|
apz_pinch_lock_buffer_max_age,
|
||||||
int32_t, 50 // milliseconds
|
int32_t, 50 // milliseconds
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.popups.enabled",
|
"apz.popups.enabled",
|
||||||
APZPopupsEnabled,
|
apz_popups_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.printtree",
|
"apz.printtree",
|
||||||
APZPrintTree,
|
apz_printtree,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.record_checkerboarding",
|
"apz.record_checkerboarding",
|
||||||
APZRecordCheckerboarding,
|
apz_record_checkerboarding,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.second_tap_tolerance",
|
"apz.second_tap_tolerance",
|
||||||
APZSecondTapTolerance,
|
apz_second_tap_tolerance,
|
||||||
AtomicFloat, 0.5f
|
AtomicFloat, 0.5f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.test.fails_with_native_injection",
|
"apz.test.fails_with_native_injection",
|
||||||
APZTestFailsWithNativeInjection,
|
apz_test_fails_with_native_injection,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.test.logging_enabled",
|
"apz.test.logging_enabled",
|
||||||
apz_test_logging_enabled,
|
apz_test_logging_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.touch_move_tolerance",
|
"apz.touch_move_tolerance",
|
||||||
APZTouchMoveTolerance,
|
apz_touch_move_tolerance,
|
||||||
AtomicFloat, 0.1f
|
AtomicFloat, 0.1f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.touch_start_tolerance",
|
"apz.touch_start_tolerance",
|
||||||
APZTouchStartTolerance,
|
apz_touch_start_tolerance,
|
||||||
AtomicFloat, 1.0f/4.5f
|
AtomicFloat, 1.0f/4.5f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.velocity_bias",
|
"apz.velocity_bias",
|
||||||
APZVelocityBias,
|
apz_velocity_bias,
|
||||||
AtomicFloat, 0.0f
|
AtomicFloat, 0.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.velocity_relevance_time_ms",
|
"apz.velocity_relevance_time_ms",
|
||||||
APZVelocityRelevanceTime,
|
apz_velocity_relevance_time_ms,
|
||||||
RelaxedAtomicUint32, 150
|
RelaxedAtomicUint32, 150
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.x_skate_highmem_adjust",
|
"apz.x_skate_highmem_adjust",
|
||||||
APZXSkateHighMemAdjust,
|
apz_x_skate_highmem_adjust,
|
||||||
AtomicFloat, 0.0f
|
AtomicFloat, 0.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.x_skate_size_multiplier",
|
"apz.x_skate_size_multiplier",
|
||||||
APZXSkateSizeMultiplier,
|
apz_x_skate_size_multiplier,
|
||||||
AtomicFloat, 1.5f
|
AtomicFloat, 1.5f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.x_stationary_size_multiplier",
|
"apz.x_stationary_size_multiplier",
|
||||||
APZXStationarySizeMultiplier,
|
apz_x_stationary_size_multiplier,
|
||||||
AtomicFloat, 3.0f
|
AtomicFloat, 3.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.y_skate_highmem_adjust",
|
"apz.y_skate_highmem_adjust",
|
||||||
APZYSkateHighMemAdjust,
|
apz_y_skate_highmem_adjust,
|
||||||
AtomicFloat, 0.0f
|
AtomicFloat, 0.0f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.y_skate_size_multiplier",
|
"apz.y_skate_size_multiplier",
|
||||||
APZYSkateSizeMultiplier,
|
apz_y_skate_size_multiplier,
|
||||||
AtomicFloat, 2.5f
|
AtomicFloat, 2.5f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.y_stationary_size_multiplier",
|
"apz.y_stationary_size_multiplier",
|
||||||
APZYStationarySizeMultiplier,
|
apz_y_stationary_size_multiplier,
|
||||||
AtomicFloat, 3.5f
|
AtomicFloat, 3.5f
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.zoom_animation_duration_ms",
|
"apz.zoom_animation_duration_ms",
|
||||||
APZZoomAnimationDuration,
|
apz_zoom_animation_duration_ms,
|
||||||
RelaxedAtomicInt32, 250
|
RelaxedAtomicInt32, 250
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.scale_repaint_delay_ms",
|
"apz.scale_repaint_delay_ms",
|
||||||
APZScaleRepaintDelay,
|
apz_scale_repaint_delay_ms,
|
||||||
RelaxedAtomicInt32, 500
|
RelaxedAtomicInt32, 500
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
"apz.relative-update.enabled",
|
"apz.relative-update.enabled",
|
||||||
APZRelativeUpdate,
|
apz_relative_update_enabled,
|
||||||
RelaxedAtomicBool, false
|
RelaxedAtomicBool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
VARCACHE_PREF(
|
|
||||||
Live,
|
|
||||||
"full-screen-api.mouse-event-allow-left-button-only",
|
|
||||||
full_screen_api_mouse_event_allow_left_button_only,
|
|
||||||
bool, true
|
|
||||||
)
|
|
||||||
|
|
||||||
// When this pref is set, parent documents may consider child iframes've loaded
|
|
||||||
// while they are still loading
|
|
||||||
VARCACHE_PREF(
|
|
||||||
Live,
|
|
||||||
"dom.cross_origin_iframes_loaded_in_background",
|
|
||||||
dom_cross_origin_iframes_loaded_in_background,
|
|
||||||
bool, false
|
|
||||||
)
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// Prefs starting with "beacon."
|
// Prefs starting with "beacon."
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -2648,6 +2632,15 @@ VARCACHE_PREF(
|
||||||
bool, false
|
bool, false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// When this pref is set, parent documents may consider child iframes have
|
||||||
|
// loaded while they are still loading.
|
||||||
|
VARCACHE_PREF(
|
||||||
|
Live,
|
||||||
|
"dom.cross_origin_iframes_loaded_in_background",
|
||||||
|
dom_cross_origin_iframes_loaded_in_background,
|
||||||
|
bool, false
|
||||||
|
)
|
||||||
|
|
||||||
// Is support for Navigator.geolocation enabled?
|
// Is support for Navigator.geolocation enabled?
|
||||||
VARCACHE_PREF(
|
VARCACHE_PREF(
|
||||||
Live,
|
Live,
|
||||||
|
@ -2736,6 +2729,13 @@ VARCACHE_PREF(
|
||||||
bool, true
|
bool, true
|
||||||
)
|
)
|
||||||
|
|
||||||
|
VARCACHE_PREF(
|
||||||
|
Live,
|
||||||
|
"full-screen-api.mouse-event-allow-left-button-only",
|
||||||
|
full_screen_api_mouse_event_allow_left_button_only,
|
||||||
|
bool, true
|
||||||
|
)
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// Prefs starting with "fuzzing.". It's important that these can only be
|
// Prefs starting with "fuzzing.". It's important that these can only be
|
||||||
// checked in fuzzing builds (when FUZZING is defined), otherwise you could
|
// checked in fuzzing builds (when FUZZING is defined), otherwise you could
|
||||||
|
|
|
@ -416,13 +416,13 @@ macro_rules! is_descriptor_enabled {
|
||||||
("font-display") => {
|
("font-display") => {
|
||||||
unsafe {
|
unsafe {
|
||||||
use crate::gecko_bindings::structs::mozilla;
|
use crate::gecko_bindings::structs::mozilla;
|
||||||
mozilla::StaticPrefs_sVarCache_layout_css_font_display_enabled
|
mozilla::StaticPrefs::sVarCache_layout_css_font_display_enabled
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
("font-variation-settings") => {
|
("font-variation-settings") => {
|
||||||
unsafe {
|
unsafe {
|
||||||
use crate::gecko_bindings::structs::mozilla;
|
use crate::gecko_bindings::structs::mozilla;
|
||||||
mozilla::StaticPrefs_sVarCache_layout_css_font_variations_enabled != 0
|
mozilla::StaticPrefs::sVarCache_layout_css_font_variations_enabled != 0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
($name:tt) => {
|
($name:tt) => {
|
||||||
|
|
|
@ -271,7 +271,7 @@ impl Device {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
let document_color_use =
|
let document_color_use =
|
||||||
unsafe { structs::StaticPrefs_sVarCache_browser_display_document_color_use };
|
unsafe { structs::StaticPrefs::sVarCache_browser_display_document_color_use };
|
||||||
let prefs = self.pref_sheet_prefs();
|
let prefs = self.pref_sheet_prefs();
|
||||||
match document_color_use {
|
match document_color_use {
|
||||||
1 => true,
|
1 => true,
|
||||||
|
|
|
@ -112,7 +112,7 @@ impl PseudoElement {
|
||||||
% for pseudo in PSEUDOS:
|
% for pseudo in PSEUDOS:
|
||||||
${pseudo_element_variant(pseudo)} =>
|
${pseudo_element_variant(pseudo)} =>
|
||||||
% if pseudo.is_tree_pseudo_element():
|
% if pseudo.is_tree_pseudo_element():
|
||||||
if unsafe { structs::StaticPrefs_sVarCache_layout_css_xul_tree_pseudos_content_enabled } {
|
if unsafe { structs::StaticPrefs::sVarCache_layout_css_xul_tree_pseudos_content_enabled } {
|
||||||
0
|
0
|
||||||
} else {
|
} else {
|
||||||
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS_AND_CHROME
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS_AND_CHROME
|
||||||
|
@ -210,7 +210,7 @@ impl PseudoElement {
|
||||||
return PseudoElement::tree_pseudo_element(name, Box::new([]))
|
return PseudoElement::tree_pseudo_element(name, Box::new([]))
|
||||||
}
|
}
|
||||||
if unsafe {
|
if unsafe {
|
||||||
structs::StaticPrefs_sVarCache_layout_css_unknown_webkit_pseudo_element
|
structs::StaticPrefs::sVarCache_layout_css_unknown_webkit_pseudo_element
|
||||||
} {
|
} {
|
||||||
const WEBKIT_PREFIX: &str = "-webkit-";
|
const WEBKIT_PREFIX: &str = "-webkit-";
|
||||||
if starts_with_ignore_ascii_case(name, WEBKIT_PREFIX) {
|
if starts_with_ignore_ascii_case(name, WEBKIT_PREFIX) {
|
||||||
|
|
|
@ -175,7 +175,7 @@ impl NonTSPseudoClass {
|
||||||
// For pseudo-classes with pref, the availability in content
|
// For pseudo-classes with pref, the availability in content
|
||||||
// depends on the pref.
|
// depends on the pref.
|
||||||
NonTSPseudoClass::Fullscreen => unsafe {
|
NonTSPseudoClass::Fullscreen => unsafe {
|
||||||
mozilla::StaticPrefs_sVarCache_full_screen_api_unprefix_enabled
|
mozilla::StaticPrefs::sVarCache_full_screen_api_unprefix_enabled
|
||||||
},
|
},
|
||||||
// Otherwise, a pseudo-class is enabled in content when it
|
// Otherwise, a pseudo-class is enabled in content when it
|
||||||
// doesn't have any enabled flag.
|
// doesn't have any enabled flag.
|
||||||
|
@ -355,7 +355,7 @@ impl<'a, 'i> ::selectors::Parser<'i> for SelectorParser<'a> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn parse_part(&self) -> bool {
|
fn parse_part(&self) -> bool {
|
||||||
self.chrome_rules_enabled() ||
|
self.chrome_rules_enabled() ||
|
||||||
unsafe { structs::StaticPrefs_sVarCache_layout_css_shadow_parts_enabled }
|
unsafe { structs::StaticPrefs::sVarCache_layout_css_shadow_parts_enabled }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_non_ts_pseudo_class(
|
fn parse_non_ts_pseudo_class(
|
||||||
|
|
|
@ -302,7 +302,7 @@ impl MediaFeatureExpression {
|
||||||
feature_name = &feature_name[8..];
|
feature_name = &feature_name[8..];
|
||||||
requirements.insert(ParsingRequirements::WEBKIT_PREFIX);
|
requirements.insert(ParsingRequirements::WEBKIT_PREFIX);
|
||||||
if unsafe {
|
if unsafe {
|
||||||
structs::StaticPrefs_sVarCache_layout_css_prefixes_device_pixel_ratio_webkit
|
structs::StaticPrefs::sVarCache_layout_css_prefixes_device_pixel_ratio_webkit
|
||||||
} {
|
} {
|
||||||
requirements.insert(
|
requirements.insert(
|
||||||
ParsingRequirements::WEBKIT_DEVICE_PIXEL_RATIO_PREF_ENABLED,
|
ParsingRequirements::WEBKIT_DEVICE_PIXEL_RATIO_PREF_ENABLED,
|
||||||
|
|
|
@ -686,7 +686,7 @@ impl<'a, 'b: 'a> Cascade<'a, 'b> {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let use_document_fonts = unsafe { structs::StaticPrefs_sVarCache_browser_display_use_document_fonts != 0 };
|
let use_document_fonts = unsafe { structs::StaticPrefs::sVarCache_browser_display_use_document_fonts != 0 };
|
||||||
let builder = &mut self.context.builder;
|
let builder = &mut self.context.builder;
|
||||||
let (default_font_type, prioritize_user_fonts) = {
|
let (default_font_type, prioritize_user_fonts) = {
|
||||||
let font = builder.get_font().gecko();
|
let font = builder.get_font().gecko();
|
||||||
|
|
|
@ -260,12 +260,12 @@ impl DocumentCondition {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if unsafe { structs::StaticPrefs_sVarCache_layout_css_moz_document_content_enabled } {
|
if unsafe { structs::StaticPrefs::sVarCache_layout_css_moz_document_content_enabled } {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if !unsafe {
|
if !unsafe {
|
||||||
structs::StaticPrefs_sVarCache_layout_css_moz_document_url_prefix_hack_enabled
|
structs::StaticPrefs::sVarCache_layout_css_moz_document_url_prefix_hack_enabled
|
||||||
} {
|
} {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -324,7 +324,7 @@ impl RawSelector {
|
||||||
#[cfg(feature = "gecko")]
|
#[cfg(feature = "gecko")]
|
||||||
{
|
{
|
||||||
if unsafe {
|
if unsafe {
|
||||||
!crate::gecko_bindings::structs::StaticPrefs_sVarCache_layout_css_supports_selector_enabled
|
!crate::gecko_bindings::structs::StaticPrefs::sVarCache_layout_css_supports_selector_enabled
|
||||||
} {
|
} {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ pub enum TimingKeyword {
|
||||||
#[cfg(feature = "gecko")]
|
#[cfg(feature = "gecko")]
|
||||||
fn step_position_jump_enabled(_context: &ParserContext) -> bool {
|
fn step_position_jump_enabled(_context: &ParserContext) -> bool {
|
||||||
use crate::gecko_bindings::structs;
|
use crate::gecko_bindings::structs;
|
||||||
unsafe { structs::StaticPrefs_sVarCache_layout_css_step_position_jump_enabled }
|
unsafe { structs::StaticPrefs::sVarCache_layout_css_step_position_jump_enabled }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "servo")]
|
#[cfg(feature = "servo")]
|
||||||
|
|
|
@ -75,7 +75,7 @@ fn line_height_moz_block_height_enabled(context: &ParserContext) -> bool {
|
||||||
use crate::gecko_bindings::structs;
|
use crate::gecko_bindings::structs;
|
||||||
context.in_ua_sheet() ||
|
context.in_ua_sheet() ||
|
||||||
unsafe {
|
unsafe {
|
||||||
structs::StaticPrefs_sVarCache_layout_css_line_height_moz_block_height_content_enabled
|
structs::StaticPrefs::sVarCache_layout_css_line_height_moz_block_height_content_enabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ pub type Polygon = generic::GenericPolygon<LengthPercentage>;
|
||||||
fn is_clip_path_path_enabled(context: &ParserContext) -> bool {
|
fn is_clip_path_path_enabled(context: &ParserContext) -> bool {
|
||||||
use crate::gecko_bindings::structs::mozilla;
|
use crate::gecko_bindings::structs::mozilla;
|
||||||
context.chrome_rules_enabled() ||
|
context.chrome_rules_enabled() ||
|
||||||
unsafe { mozilla::StaticPrefs_sVarCache_layout_css_clip_path_path_enabled }
|
unsafe { mozilla::StaticPrefs::sVarCache_layout_css_clip_path_path_enabled }
|
||||||
}
|
}
|
||||||
#[cfg(feature = "servo")]
|
#[cfg(feature = "servo")]
|
||||||
fn is_clip_path_path_enabled(_: &ParserContext) -> bool {
|
fn is_clip_path_path_enabled(_: &ParserContext) -> bool {
|
||||||
|
|
|
@ -25,7 +25,7 @@ use style_traits::{SpecifiedValueInfo, StyleParseErrorKind, ToCss};
|
||||||
fn moz_display_values_enabled(context: &ParserContext) -> bool {
|
fn moz_display_values_enabled(context: &ParserContext) -> bool {
|
||||||
use crate::gecko_bindings::structs;
|
use crate::gecko_bindings::structs;
|
||||||
context.in_ua_or_chrome_sheet() ||
|
context.in_ua_or_chrome_sheet() ||
|
||||||
unsafe { structs::StaticPrefs_sVarCache_layout_css_xul_display_values_content_enabled }
|
unsafe { structs::StaticPrefs::sVarCache_layout_css_xul_display_values_content_enabled }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "gecko")]
|
#[cfg(feature = "gecko")]
|
||||||
|
@ -33,7 +33,7 @@ fn moz_box_display_values_enabled(context: &ParserContext) -> bool {
|
||||||
use crate::gecko_bindings::structs;
|
use crate::gecko_bindings::structs;
|
||||||
context.in_ua_or_chrome_sheet() ||
|
context.in_ua_or_chrome_sheet() ||
|
||||||
unsafe {
|
unsafe {
|
||||||
structs::StaticPrefs_sVarCache_layout_css_xul_box_display_values_content_enabled
|
structs::StaticPrefs::sVarCache_layout_css_xul_box_display_values_content_enabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -381,7 +381,7 @@ impl ToComputedValue for TrackList<LengthPercentage, Integer> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn allow_grid_template_subgrids() -> bool {
|
fn allow_grid_template_subgrids() -> bool {
|
||||||
use crate::gecko_bindings::structs::mozilla;
|
use crate::gecko_bindings::structs::mozilla;
|
||||||
unsafe { mozilla::StaticPrefs_sVarCache_layout_css_grid_template_subgrid_value_enabled }
|
unsafe { mozilla::StaticPrefs::sVarCache_layout_css_grid_template_subgrid_value_enabled }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "servo")]
|
#[cfg(feature = "servo")]
|
||||||
|
|
|
@ -36,7 +36,7 @@ pub type SVGStrokeDashArray = generic::SVGStrokeDashArray<NonNegativeLengthPerce
|
||||||
#[cfg(feature = "gecko")]
|
#[cfg(feature = "gecko")]
|
||||||
pub fn is_context_value_enabled() -> bool {
|
pub fn is_context_value_enabled() -> bool {
|
||||||
use crate::gecko_bindings::structs::mozilla;
|
use crate::gecko_bindings::structs::mozilla;
|
||||||
unsafe { mozilla::StaticPrefs_sVarCache_gfx_font_rendering_opentype_svg_enabled }
|
unsafe { mozilla::StaticPrefs::sVarCache_gfx_font_rendering_opentype_svg_enabled }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Whether the `context-value` value is enabled.
|
/// Whether the `context-value` value is enabled.
|
||||||
|
|
|
@ -9,6 +9,13 @@ Unreleased
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
- Added support for HTTP `HEAD` requests to the HTTPD
|
||||||
|
|
||||||
|
geckodriver now responds correctly to HTTP `HEAD` requests,
|
||||||
|
which can be used for probing whether it supports a particular API.
|
||||||
|
|
||||||
|
Thanks to [Bastien Orivel] for this patch.
|
||||||
|
|
||||||
- Added support for searching for Nightly’s default path on macOS
|
- Added support for searching for Nightly’s default path on macOS
|
||||||
|
|
||||||
If the location of the Firefox binary is not given, geckodriver
|
If the location of the Firefox binary is not given, geckodriver
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[scroll-behavior-subframe-root.html]
|
|
||||||
[Subframe with auto scroll-behavior ; scroll() with smooth behavior]
|
|
||||||
expected:
|
|
||||||
if (os == "android") and not debug and e10s: FAIL
|
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
[unregister.https.html]
|
[unregister.https.html]
|
||||||
disabled:
|
disabled:
|
||||||
if (os == "android") and not e10s: https://bugzilla.mozilla.org/show_bug.cgi?id=1499972
|
if (os == "android") and not e10s: https://bugzilla.mozilla.org/show_bug.cgi?id=1499972
|
||||||
[Unregister twice]
|
|
||||||
expected:
|
|
||||||
if (os == "android") and not debug: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[enable_controls_reposition.html]
|
[enable_controls_reposition.html]
|
||||||
|
disabled:
|
||||||
|
if (os == "android") and debug: intermittent crash, Bug 1553046
|
||||||
expected:
|
expected:
|
||||||
if (os == "android") and debug: FAIL
|
|
||||||
FAIL
|
FAIL
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[line_integer_and_percent_mixed_overlap.html]
|
[line_integer_and_percent_mixed_overlap.html]
|
||||||
|
disabled:
|
||||||
|
if (os == "android") and debug: intermittent crash, Bug 1553046
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[bold_timestamp_past.html]
|
[bold_timestamp_past.html]
|
||||||
|
disabled:
|
||||||
|
if (os == "android") and debug: intermittent crash, Bug 1553046
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[bold_transition_with_timestamp.html]
|
[bold_transition_with_timestamp.html]
|
||||||
|
disabled:
|
||||||
|
if (os == "android") and e10s and debug: intermittent crash, Bug 1553046
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -2,5 +2,4 @@
|
||||||
disabled:
|
disabled:
|
||||||
if (os == "android") and e10s and debug: intermittent crash, Bug 1553046
|
if (os == "android") and e10s and debug: intermittent crash, Bug 1553046
|
||||||
expected:
|
expected:
|
||||||
if (os == "android") and debug: ERROR
|
|
||||||
FAIL
|
FAIL
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[class_text-decoration_line-through.html]
|
[class_text-decoration_line-through.html]
|
||||||
|
disabled:
|
||||||
|
if (os == "android") and debug: intermittent crash, Bug 1553046
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[italic_font_properties.html]
|
[italic_font_properties.html]
|
||||||
|
disabled:
|
||||||
|
if (os == "android") and debug: intermittent crash, Bug 1553046
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[italic_font_shorthand.html]
|
[italic_font_shorthand.html]
|
||||||
|
disabled:
|
||||||
|
if (os == "android") and debug: intermittent crash, Bug 1553046
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +1,5 @@
|
||||||
[italic_transition_with_timestamp.html]
|
[italic_transition_with_timestamp.html]
|
||||||
expected: FAIL
|
disabled:
|
||||||
|
if (os == "android") and debug: intermittent crash, Bug 1553046
|
||||||
|
expected:
|
||||||
|
FAIL
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[inherit_as_default_value_inherits_values_from_media_element.html]
|
[inherit_as_default_value_inherits_values_from_media_element.html]
|
||||||
|
disabled:
|
||||||
|
if (os == "android") and debug: intermittent crash, Bug 1553046
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -3575,7 +3575,7 @@ NSEvent* gLastDragMouseDownEvent = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: bug 1525793 -- this may need to handle zooming or not on a per-document basis.
|
// FIXME: bug 1525793 -- this may need to handle zooming or not on a per-document basis.
|
||||||
if (StaticPrefs::APZAllowZooming()) {
|
if (StaticPrefs::apz_allow_zooming()) {
|
||||||
NSPoint locationInWindow = nsCocoaUtils::EventLocationForWindow(anEvent, [self window]);
|
NSPoint locationInWindow = nsCocoaUtils::EventLocationForWindow(anEvent, [self window]);
|
||||||
ScreenPoint position =
|
ScreenPoint position =
|
||||||
ViewAs<ScreenPixel>([self convertWindowCoordinatesRoundDown:locationInWindow],
|
ViewAs<ScreenPixel>([self convertWindowCoordinatesRoundDown:locationInWindow],
|
||||||
|
|
|
@ -3057,7 +3057,7 @@ void nsWindow::OnScrollEvent(GdkEventScroll* aEvent) {
|
||||||
GdkDevice* device = gdk_event_get_source_device((GdkEvent*)aEvent);
|
GdkDevice* device = gdk_event_get_source_device((GdkEvent*)aEvent);
|
||||||
GdkInputSource source = gdk_device_get_source(device);
|
GdkInputSource source = gdk_device_get_source(device);
|
||||||
if (source == GDK_SOURCE_TOUCHSCREEN || source == GDK_SOURCE_TOUCHPAD) {
|
if (source == GDK_SOURCE_TOUCHSCREEN || source == GDK_SOURCE_TOUCHPAD) {
|
||||||
if (StaticPrefs::APZGTKKineticScrollEnabled() &&
|
if (StaticPrefs::apz_gtk_kinetic_scroll_enabled() &&
|
||||||
gtk_check_version(3, 20, 0) == nullptr) {
|
gtk_check_version(3, 20, 0) == nullptr) {
|
||||||
static auto sGdkEventIsScrollStopEvent =
|
static auto sGdkEventIsScrollStopEvent =
|
||||||
(gboolean(*)(const GdkEvent*))dlsym(
|
(gboolean(*)(const GdkEvent*))dlsym(
|
||||||
|
|
|
@ -859,7 +859,7 @@ bool nsBaseWidget::UseAPZ() {
|
||||||
(WindowType() == eWindowType_toplevel ||
|
(WindowType() == eWindowType_toplevel ||
|
||||||
WindowType() == eWindowType_child ||
|
WindowType() == eWindowType_child ||
|
||||||
(WindowType() == eWindowType_popup && HasRemoteContent() &&
|
(WindowType() == eWindowType_popup && HasRemoteContent() &&
|
||||||
StaticPrefs::APZPopupsEnabled())));
|
StaticPrefs::apz_popups_enabled())));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool nsBaseWidget::AllowWebRenderForThisWindow() {
|
bool nsBaseWidget::AllowWebRenderForThisWindow() {
|
||||||
|
@ -893,7 +893,7 @@ void nsBaseWidget::ConfigureAPZCTreeManager() {
|
||||||
NewRunnableMethod<float>("layers::IAPZCTreeManager::SetDPI", mAPZC,
|
NewRunnableMethod<float>("layers::IAPZCTreeManager::SetDPI", mAPZC,
|
||||||
&IAPZCTreeManager::SetDPI, dpi));
|
&IAPZCTreeManager::SetDPI, dpi));
|
||||||
|
|
||||||
if (StaticPrefs::APZKeyboardEnabled()) {
|
if (StaticPrefs::apz_keyboard_enabled()) {
|
||||||
KeyboardMap map = nsXBLWindowKeyHandler::CollectKeyboardShortcuts();
|
KeyboardMap map = nsXBLWindowKeyHandler::CollectKeyboardShortcuts();
|
||||||
// On Android the main thread is not the controller thread
|
// On Android the main thread is not the controller thread
|
||||||
APZThreadUtils::RunOnControllerThread(NewRunnableMethod<KeyboardMap>(
|
APZThreadUtils::RunOnControllerThread(NewRunnableMethod<KeyboardMap>(
|
||||||
|
|
|
@ -133,7 +133,8 @@ nsresult nsWindowBase::SynthesizeNativeTouchPoint(
|
||||||
uint32_t aPointerOrientation, nsIObserver* aObserver) {
|
uint32_t aPointerOrientation, nsIObserver* aObserver) {
|
||||||
AutoObserverNotifier notifier(aObserver, "touchpoint");
|
AutoObserverNotifier notifier(aObserver, "touchpoint");
|
||||||
|
|
||||||
if (StaticPrefs::APZTestFailsWithNativeInjection() || !InitTouchInjection()) {
|
if (StaticPrefs::apz_test_fails_with_native_injection() ||
|
||||||
|
!InitTouchInjection()) {
|
||||||
// If we don't have touch injection from the OS, or if we are running a test
|
// If we don't have touch injection from the OS, or if we are running a test
|
||||||
// that cannot properly inject events to satisfy the OS requirements (see
|
// that cannot properly inject events to satisfy the OS requirements (see
|
||||||
// bug 1313170) we can just fake it and synthesize the events from here.
|
// bug 1313170) we can just fake it and synthesize the events from here.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче