diff options
Diffstat (limited to 'devtools/client/netmonitor/reducers/timing-markers.js')
-rw-r--r-- | devtools/client/netmonitor/reducers/timing-markers.js | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/reducers/timing-markers.js b/devtools/client/netmonitor/reducers/timing-markers.js new file mode 100644 index 000000000..cb500b2c4 --- /dev/null +++ b/devtools/client/netmonitor/reducers/timing-markers.js @@ -0,0 +1,52 @@ +/* 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 I = require("devtools/client/shared/vendor/immutable"); +const { ADD_TIMING_MARKER, + CLEAR_TIMING_MARKERS } = require("../constants"); + +const TimingMarkers = I.Record({ + firstDocumentDOMContentLoadedTimestamp: -1, + firstDocumentLoadTimestamp: -1, +}); + +function addTimingMarker(state, action) { + if (action.marker.name == "document::DOMContentLoaded" && + state.firstDocumentDOMContentLoadedTimestamp == -1) { + return state.set("firstDocumentDOMContentLoadedTimestamp", + action.marker.unixTime / 1000); + } + + if (action.marker.name == "document::Load" && + state.firstDocumentLoadTimestamp == -1) { + return state.set("firstDocumentLoadTimestamp", + action.marker.unixTime / 1000); + } + + return state; +} + +function clearTimingMarkers(state) { + return state.withMutations(st => { + st.remove("firstDocumentDOMContentLoadedTimestamp"); + st.remove("firstDocumentLoadTimestamp"); + }); +} + +function timingMarkers(state = new TimingMarkers(), action) { + switch (action.type) { + case ADD_TIMING_MARKER: + return addTimingMarker(state, action); + + case CLEAR_TIMING_MARKERS: + return clearTimingMarkers(state); + + default: + return state; + } +} + +module.exports = timingMarkers; |