@tamagui/react-native-web-lite
Version:
React Native for Web
141 lines (138 loc) • 7.38 kB
JavaScript
function _class_call_check(instance, Constructor) {
if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _create_class(Constructor, protoProps, staticProps) {
return protoProps && _defineProperties(Constructor.prototype, protoProps), staticProps && _defineProperties(Constructor, staticProps), Constructor;
}
function _define_property(obj, key, value) {
return key in obj ? Object.defineProperty(obj, key, {
value,
enumerable: !0,
configurable: !0,
writable: !0
}) : obj[key] = value, obj;
}
var Info = function Info2() {
"use strict";
_class_call_check(this, Info2), _define_property(this, "any_blank_count", 0), _define_property(this, "any_blank_ms", 0), _define_property(this, "any_blank_speed_sum", 0), _define_property(this, "mostly_blank_count", 0), _define_property(this, "mostly_blank_ms", 0), _define_property(this, "pixels_blank", 0), _define_property(this, "pixels_sampled", 0), _define_property(this, "pixels_scrolled", 0), _define_property(this, "total_time_spent", 0), _define_property(this, "sample_count", 0);
};
var DEBUG = !1,
_listeners = [],
_minSampleCount = 10,
_sampleRate = DEBUG ? 1 : null,
FillRateHelper = /* @__PURE__ */function () {
"use strict";
function FillRateHelper2(getFrameMetrics) {
_class_call_check(this, FillRateHelper2), _define_property(this, "_anyBlankStartTime", null), _define_property(this, "_enabled", !1), _define_property(this, "_getFrameMetrics", void 0), _define_property(this, "_info", new Info()), _define_property(this, "_mostlyBlankStartTime", null), _define_property(this, "_samplesStartTime", null), this._getFrameMetrics = getFrameMetrics, this._enabled = (_sampleRate || 0) > Math.random(), this._resetData();
}
return _create_class(FillRateHelper2, [{
key: "activate",
value: function () {
this._enabled && this._samplesStartTime == null && (DEBUG && console.debug("FillRateHelper: activate"), this._samplesStartTime = global.performance.now());
}
}, {
key: "deactivateAndFlush",
value: function () {
if (this._enabled) {
var start = this._samplesStartTime;
if (start == null) {
DEBUG && console.debug("FillRateHelper: bail on deactivate with no start time");
return;
}
if (this._info.sample_count < _minSampleCount) {
this._resetData();
return;
}
var total_time_spent = global.performance.now() - start,
info = {
...this._info,
total_time_spent
};
if (DEBUG) {
var derived = {
avg_blankness: this._info.pixels_blank / this._info.pixels_sampled,
avg_speed: this._info.pixels_scrolled / (total_time_spent / 1e3),
avg_speed_when_any_blank: this._info.any_blank_speed_sum / this._info.any_blank_count,
any_blank_per_min: this._info.any_blank_count / (total_time_spent / 1e3 / 60),
any_blank_time_frac: this._info.any_blank_ms / total_time_spent,
mostly_blank_per_min: this._info.mostly_blank_count / (total_time_spent / 1e3 / 60),
mostly_blank_time_frac: this._info.mostly_blank_ms / total_time_spent
};
for (var key in derived) derived[key] = Math.round(1e3 * derived[key]) / 1e3;
console.debug("FillRateHelper deactivateAndFlush: ", {
derived,
info
});
}
_listeners.forEach(function (listener) {
return listener(info);
}), this._resetData();
}
}
}, {
key: "computeBlankness",
value: function (props, cellsAroundViewport, scrollMetrics) {
if (!this._enabled || props.getItemCount(props.data) === 0 || cellsAroundViewport.last < cellsAroundViewport.first || this._samplesStartTime == null) return 0;
var {
dOffset,
offset,
velocity,
visibleLength
} = scrollMetrics;
this._info.sample_count++, this._info.pixels_sampled += Math.round(visibleLength), this._info.pixels_scrolled += Math.round(Math.abs(dOffset));
var scrollSpeed = Math.round(Math.abs(velocity) * 1e3),
now = global.performance.now();
this._anyBlankStartTime != null && (this._info.any_blank_ms += now - this._anyBlankStartTime), this._anyBlankStartTime = null, this._mostlyBlankStartTime != null && (this._info.mostly_blank_ms += now - this._mostlyBlankStartTime), this._mostlyBlankStartTime = null;
for (var blankTop = 0, first = cellsAroundViewport.first, firstFrame = this._getFrameMetrics(first, props); first <= cellsAroundViewport.last && (!firstFrame || !firstFrame.inLayout);) firstFrame = this._getFrameMetrics(first, props), first++;
firstFrame && first > 0 && (blankTop = Math.min(visibleLength, Math.max(0, firstFrame.offset - offset)));
for (var blankBottom = 0, last = cellsAroundViewport.last, lastFrame = this._getFrameMetrics(last, props); last >= cellsAroundViewport.first && (!lastFrame || !lastFrame.inLayout);) lastFrame = this._getFrameMetrics(last, props), last--;
if (lastFrame && last < props.getItemCount(props.data) - 1) {
var bottomEdge = lastFrame.offset + lastFrame.length;
blankBottom = Math.min(visibleLength, Math.max(0, offset + visibleLength - bottomEdge));
}
var pixels_blank = Math.round(blankTop + blankBottom),
blankness = pixels_blank / visibleLength;
return blankness > 0 ? (this._anyBlankStartTime = now, this._info.any_blank_speed_sum += scrollSpeed, this._info.any_blank_count++, this._info.pixels_blank += pixels_blank, blankness > 0.5 && (this._mostlyBlankStartTime = now, this._info.mostly_blank_count++)) : (scrollSpeed < 0.01 || Math.abs(dOffset) < 1) && this.deactivateAndFlush(), blankness;
}
}, {
key: "enabled",
value: function () {
return this._enabled;
}
}, {
key: "_resetData",
value: function () {
this._anyBlankStartTime = null, this._info = new Info(), this._mostlyBlankStartTime = null, this._samplesStartTime = null;
}
}], [{
key: "addListener",
value: function (callback) {
return _sampleRate === null && console.warn("Call `FillRateHelper.setSampleRate` before `addListener`."), _listeners.push(callback), {
remove: function () {
_listeners = _listeners.filter(function (listener) {
return callback !== listener;
});
}
};
}
}, {
key: "setSampleRate",
value: function (sampleRate) {
_sampleRate = sampleRate;
}
}, {
key: "setMinSampleCount",
value: function (minSampleCount) {
_minSampleCount = minSampleCount;
}
}]), FillRateHelper2;
}(),
FillRateHelper_default = FillRateHelper;
export { FillRateHelper_default as default };
//# sourceMappingURL=index.native.js.map