@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
108 lines (106 loc) • 5.19 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TransactionTracker = exports.EVENT_NAME_VIEW_STATE_UPDATED = exports.EVENT_NAME_UPDATE_STATE = exports.EVENT_NAME_STATE_APPLY = exports.EVENT_NAME_ON_CHANGE = exports.EVENT_NAME_DISPATCH_TRANSACTION = exports.DEFAULT_USE_PERFORMANCE_MARK = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _isPerformanceApiAvailable = require("@atlaskit/editor-common/is-performance-api-available");
var _performanceMeasures = require("@atlaskit/editor-common/performance-measures");
var _getTimeSince = require("./getTimeSince");
var EVENT_NAME_STATE_APPLY = exports.EVENT_NAME_STATE_APPLY = "\uD83E\uDD89 EditorView::state::apply";
var EVENT_NAME_UPDATE_STATE = exports.EVENT_NAME_UPDATE_STATE = "\uD83E\uDD89 EditorView::updateState";
var EVENT_NAME_VIEW_STATE_UPDATED = exports.EVENT_NAME_VIEW_STATE_UPDATED = "\uD83E\uDD89 EditorView::onEditorViewStateUpdated";
var EVENT_NAME_ON_CHANGE = exports.EVENT_NAME_ON_CHANGE = "\uD83E\uDD89 ReactEditorView::onChange";
var EVENT_NAME_DISPATCH_TRANSACTION = exports.EVENT_NAME_DISPATCH_TRANSACTION = "\uD83E\uDD89 ReactEditorView::dispatchTransaction";
var DEFAULT_USE_PERFORMANCE_MARK = exports.DEFAULT_USE_PERFORMANCE_MARK = false;
var DEFAULT_SAMPLING_RATE = 100;
var noop = function noop() {};
var TransactionTracker = exports.TransactionTracker = /*#__PURE__*/function () {
function TransactionTracker() {
var _this = this;
(0, _classCallCheck2.default)(this, TransactionTracker);
// Counter so we can rate limit the transaction performance tracking
(0, _defineProperty2.default)(this, "dispatchCallCounter", 0);
// A map containing the time which measurement starts
(0, _defineProperty2.default)(this, "measureMap", new Map());
(0, _defineProperty2.default)(this, "measureListeners", []);
(0, _defineProperty2.default)(this, "bumpDispatchCounter", function (options) {
var trackingEnabled = options.enabled,
_options$samplingRate = options.samplingRate,
samplingRate = _options$samplingRate === void 0 ? DEFAULT_SAMPLING_RATE : _options$samplingRate;
if (trackingEnabled) {
if (_this.dispatchCallCounter >= samplingRate) {
_this.dispatchCallCounter = 0;
}
_this.dispatchCallCounter++;
}
return _this.dispatchCallCounter;
});
(0, _defineProperty2.default)(this, "getMeasureHelpers", function (options) {
var _options$usePerforman = options.usePerformanceMarks,
usePerformanceMarks = _options$usePerforman === void 0 ? DEFAULT_USE_PERFORMANCE_MARK : _options$usePerforman;
if (!_this.shouldTrackTransaction(options)) {
return {
startMeasure: noop,
stopMeasure: noop
};
}
return {
startMeasure: usePerformanceMarks ? _performanceMeasures.startMeasure : _this.startMeasureSimple,
stopMeasure: usePerformanceMarks ? _performanceMeasures.stopMeasure : _this.stopMeasureSimple
};
});
(0, _defineProperty2.default)(this, "startMeasureSimple", function (measureName) {
if (!(0, _isPerformanceApiAvailable.isPerformanceAPIAvailable)()) {
return;
}
_this.measureMap.set(measureName, performance.now());
});
(0, _defineProperty2.default)(this, "stopMeasureSimple", function (measureName, onMeasureComplete) {
if (!(0, _isPerformanceApiAvailable.isPerformanceAPIAvailable)()) {
return;
}
var startTime = _this.measureMap.get(measureName);
if (startTime) {
var duration = (0, _getTimeSince.getTimeSince)(startTime);
_this.measureMap.delete(measureName);
if (onMeasureComplete) {
onMeasureComplete(duration, startTime);
}
// Call each subscribed listener
_this.measureListeners.forEach(function (listener) {
return listener({
name: measureName,
duration: duration,
startTime: startTime
});
});
}
});
}
return (0, _createClass2.default)(TransactionTracker, [{
key: "addMeasureListener",
value: function addMeasureListener(listener) {
this.measureListeners.push(listener);
}
}, {
key: "removeMeasureListener",
value: function removeMeasureListener(listener) {
var index = this.measureListeners.indexOf(listener);
if (index > -1) {
this.measureListeners.splice(index, 1);
}
}
}, {
key: "shouldTrackTransaction",
value: function shouldTrackTransaction(options) {
var trackingEnabled = options.enabled,
_options$samplingRate2 = options.samplingRate,
samplingRate = _options$samplingRate2 === void 0 ? DEFAULT_SAMPLING_RATE : _options$samplingRate2;
return trackingEnabled && this.dispatchCallCounter === samplingRate;
}
}]);
}();