fune/devtools/client/netmonitor/shared/components/timings-panel.js
Fred Lin 2f68e50e6c Bug 1316291 - PART 1:Rename the requests-menu CSS classes in netmonitor.css;r=Honza
MozReview-Commit-ID: DceweCXElI4

--HG--
extra : rebase_source : c900d38b4e6ffb7bf8a6aa16e9f3b6106f63f6c9
2017-02-08 14:20:44 +08:00

72 lines
2.2 KiB
JavaScript

/* 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 { DOM, PropTypes } = require("devtools/client/shared/vendor/react");
const { L10N } = require("../../utils/l10n");
const { div, span } = DOM;
const types = ["blocked", "dns", "connect", "send", "wait", "receive"];
const TIMINGS_END_PADDING = "80px";
/*
* Timings panel component
* Display timeline bars that shows the total wait time for various stages
*/
function TimingsPanel({
request,
}) {
if (!request.eventTimings) {
return null;
}
const { timings, totalTime } = request.eventTimings;
const timelines = types.map((type, idx) => {
// Determine the relative offset for each timings box. For example, the
// offset of third timings box will be 0 + blocked offset + dns offset
const offset = types
.slice(0, idx)
.reduce((acc, cur) => (acc + timings[cur] || 0), 0);
const offsetScale = offset / totalTime || 0;
const timelineScale = timings[type] / totalTime || 0;
return div({
key: type,
id: `timings-summary-${type}`,
className: "tabpanel-summary-container timings-container",
},
span({ className: "tabpanel-summary-label timings-label" },
L10N.getStr(`netmonitor.timings.${type}`)
),
div({ className: "requests-list-timings-container" },
span({
className: "requests-list-timings-offset",
style: {
width: `calc(${offsetScale} * (100% - ${TIMINGS_END_PADDING})`,
},
}),
span({
className: `requests-list-timings-box ${type}`,
style: {
width: `calc(${timelineScale} * (100% - ${TIMINGS_END_PADDING}))`,
},
}),
span({ className: "requests-list-timings-total" },
L10N.getFormatStr("networkMenu.totalMS", timings[type])
)
),
);
});
return div({ className: "panel-container" }, timelines);
}
TimingsPanel.displayName = "TimingsPanel";
TimingsPanel.propTypes = {
request: PropTypes.object.isRequired,
};
module.exports = TimingsPanel;