UNPKG

@microsoft/sp-webpart-base

Version:

SharePoint Framework support for building web parts

64 lines 3.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CanvasWebPartRenderTimeStampMap = void 0; var tslib_1 = require("tslib"); var sp_diagnostics_1 = require("@microsoft/sp-diagnostics"); var sp_telemetry_1 = require("@ms/sp-telemetry"); var WAIT_TIME = 5 * 1000; var CanvasWebPartRenderTimeStampMap = /** @class */ (function () { function CanvasWebPartRenderTimeStampMap() { } Object.defineProperty(CanvasWebPartRenderTimeStampMap, "isInTreatmentForWebPartFlickerPerfExp", { get: function () { return (sp_telemetry_1._SPPerfExperiment.getVariantAndTrackExperiment(sp_telemetry_1._PerformanceExperiment.WEXWebPartFlickerPerfExp) !== 0); }, enumerable: false, configurable: true }); CanvasWebPartRenderTimeStampMap.endAndStartNewMonitor = function (uniqueId, metaData, domElement) { CanvasWebPartRenderTimeStampMap._endMonitor(uniqueId, 'InterruptedByNextChange'); var monitor = new sp_diagnostics_1._QosMonitor('WebPartExternalUpdatePerf_MutationObserver'); monitor.extraData = tslib_1.__assign({ isInTreatment: CanvasWebPartRenderTimeStampMap.isInTreatmentForWebPartFlickerPerfExp }, metaData); var getSetTimeOut = function () { var endTime = Date.now(); return window.setTimeout(function () { CanvasWebPartRenderTimeStampMap._endMonitor(uniqueId, 'DOMIdled', { endTime: endTime }); }, WAIT_TIME); }; var targetNode = domElement; var timeoutId = getSetTimeOut(); var callback = function () { // refresh timeout clearTimeout(timeoutId); timeoutId = getSetTimeOut(); }; // Create an observer instance linked to the callback function var observer = new MutationObserver(callback); // Start observing the target node for configured mutations observer.observe(targetNode, { attributes: true, subtree: true, childList: true }); CanvasWebPartRenderTimeStampMap._webPartMap.set(uniqueId, { timeoutId: timeoutId, observer: observer, monitor: monitor }); }; CanvasWebPartRenderTimeStampMap.endWithRenderCompleteTime = function (uniqueId, renderCompleteTimeStamp) { CanvasWebPartRenderTimeStampMap._endMonitor(uniqueId, 'RenderCompleteCalled', { renderCompleteTimeStamp: renderCompleteTimeStamp }); }; CanvasWebPartRenderTimeStampMap._endMonitor = function (uniqueId, endType, extraData) { var webPartRerenderTime = CanvasWebPartRenderTimeStampMap._webPartMap.get(uniqueId); if (webPartRerenderTime) { var prevTimeoutId = webPartRerenderTime.timeoutId, prevObserver = webPartRerenderTime.observer, prevMonitor = webPartRerenderTime.monitor; clearTimeout(prevTimeoutId); prevObserver.disconnect(); prevMonitor.writeSuccess(tslib_1.__assign({ endType: endType }, extraData)); CanvasWebPartRenderTimeStampMap._webPartMap.delete(uniqueId); } }; CanvasWebPartRenderTimeStampMap._webPartMap = new Map(); return CanvasWebPartRenderTimeStampMap; }()); exports.CanvasWebPartRenderTimeStampMap = CanvasWebPartRenderTimeStampMap; //# sourceMappingURL=CanvasWebPartRenderTimeStampMap.js.map