diff options
Diffstat (limited to 'devtools/client/netmonitor/src/reducers/timing-markers.js')
-rw-r--r-- | devtools/client/netmonitor/src/reducers/timing-markers.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/src/reducers/timing-markers.js b/devtools/client/netmonitor/src/reducers/timing-markers.js new file mode 100644 index 0000000000..4a41f9b495 --- /dev/null +++ b/devtools/client/netmonitor/src/reducers/timing-markers.js @@ -0,0 +1,78 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const { + ADD_REQUEST, + ADD_TIMING_MARKER, + CLEAR_TIMING_MARKERS, + CLEAR_REQUESTS, +} = require("resource://devtools/client/netmonitor/src/constants.js"); + +function TimingMarkers() { + return { + firstDocumentDOMContentLoadedTimestamp: -1, + firstDocumentLoadTimestamp: -1, + firstDocumentRequestStartTimestamp: +Infinity, + }; +} + +function addRequest(state, action) { + const nextState = { ...state }; + const { startedMs } = action.data; + if (startedMs < state.firstDocumentRequestStartTimestamp) { + nextState.firstDocumentRequestStartTimestamp = startedMs; + } + + return nextState; +} + +function addTimingMarker(state, action) { + state = { ...state }; + + if ( + action.marker.name === "dom-interactive" && + state.firstDocumentDOMContentLoadedTimestamp === -1 + ) { + state.firstDocumentDOMContentLoadedTimestamp = action.marker.time; + return state; + } + + if ( + action.marker.name === "dom-complete" && + state.firstDocumentLoadTimestamp === -1 + ) { + state.firstDocumentLoadTimestamp = action.marker.time; + return state; + } + + return state; +} + +function clearTimingMarkers(state) { + return new TimingMarkers(); +} + +function timingMarkers(state = new TimingMarkers(), action) { + switch (action.type) { + case ADD_REQUEST: + return addRequest(state, action); + + case ADD_TIMING_MARKER: + return addTimingMarker(state, action); + + case CLEAR_REQUESTS: + case CLEAR_TIMING_MARKERS: + return clearTimingMarkers(state); + + default: + return state; + } +} + +module.exports = { + TimingMarkers, + timingMarkers, +}; |