Bug 1163763 - L10N-ify many strings that didn't make previous uplifts for performance tools, and consolidate strings into one tool rather than profiler and timeline. r=vp
authorJordan Santell <jsantell@mozilla.com>
Thu, 16 Jul 2015 13:28:30 -0700
changeset 287803 3301c85aa6713f50caf3c8e63893b7e2904d3945
parent 287802 78512934fdb82bd679aa3e5584ab12d03df39c3a
child 287804 0c15668d85fb91c8f9938fc15a8e473717871249
push id5067
push userraliiev@mozilla.com
push dateMon, 21 Sep 2015 14:04:52 +0000
treeherdermozilla-beta@14221ffe5b2f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersvp
bugs1163763
milestone42.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1163763 - L10N-ify many strings that didn't make previous uplifts for performance tools, and consolidate strings into one tool rather than profiler and timeline. r=vp
browser/devtools/definitions.js
browser/devtools/performance/modules/global.js
browser/devtools/performance/modules/logic/marker-utils.js
browser/devtools/performance/modules/markers.js
browser/devtools/performance/modules/widgets/graphs.js
browser/devtools/performance/modules/widgets/marker-details.js
browser/devtools/performance/performance-view.js
browser/devtools/performance/performance.xul
browser/devtools/performance/test/browser_perf-loading-01.js
browser/devtools/performance/views/optimizations-list.js
browser/devtools/performance/views/recordings.js
browser/locales/en-US/chrome/browser/devtools/markers.properties
browser/locales/en-US/chrome/browser/devtools/performance.dtd
browser/locales/en-US/chrome/browser/devtools/performance.properties
browser/locales/en-US/chrome/browser/devtools/profiler.dtd
browser/locales/en-US/chrome/browser/devtools/profiler.properties
browser/locales/en-US/chrome/browser/devtools/timeline.dtd
browser/locales/en-US/chrome/browser/devtools/timeline.properties
browser/locales/jar.mn
--- a/browser/devtools/definitions.js
+++ b/browser/devtools/definitions.js
@@ -28,23 +28,23 @@ loader.lazyGetter(this, "ScratchpadPanel
 const toolboxProps = "chrome://browser/locale/devtools/toolbox.properties";
 const inspectorProps = "chrome://browser/locale/devtools/inspector.properties";
 const webConsoleProps = "chrome://browser/locale/devtools/webconsole.properties";
 const debuggerProps = "chrome://browser/locale/devtools/debugger.properties";
 const styleEditorProps = "chrome://browser/locale/devtools/styleeditor.properties";
 const shaderEditorProps = "chrome://browser/locale/devtools/shadereditor.properties";
 const canvasDebuggerProps = "chrome://browser/locale/devtools/canvasdebugger.properties";
 const webAudioEditorProps = "chrome://browser/locale/devtools/webaudioeditor.properties";
-const profilerProps = "chrome://browser/locale/devtools/profiler.properties";
+const performanceProps = "chrome://browser/locale/devtools/performance.properties";
 const netMonitorProps = "chrome://browser/locale/devtools/netmonitor.properties";
 const storageProps = "chrome://browser/locale/devtools/storage.properties";
 const scratchpadProps = "chrome://browser/locale/devtools/scratchpad.properties";
 
 loader.lazyGetter(this, "toolboxStrings", () => Services.strings.createBundle(toolboxProps));
-loader.lazyGetter(this, "profilerStrings",() => Services.strings.createBundle(profilerProps));
+loader.lazyGetter(this, "performanceStrings",() => Services.strings.createBundle(performanceProps));
 loader.lazyGetter(this, "webConsoleStrings", () => Services.strings.createBundle(webConsoleProps));
 loader.lazyGetter(this, "debuggerStrings", () => Services.strings.createBundle(debuggerProps));
 loader.lazyGetter(this, "styleEditorStrings", () => Services.strings.createBundle(styleEditorProps));
 loader.lazyGetter(this, "shaderEditorStrings", () => Services.strings.createBundle(shaderEditorProps));
 loader.lazyGetter(this, "canvasDebuggerStrings", () => Services.strings.createBundle(canvasDebuggerProps));
 loader.lazyGetter(this, "webAudioEditorStrings", () => Services.strings.createBundle(webAudioEditorProps));
 loader.lazyGetter(this, "inspectorStrings", () => Services.strings.createBundle(inspectorProps));
 loader.lazyGetter(this, "netMonitorStrings", () => Services.strings.createBundle(netMonitorProps));
@@ -249,24 +249,24 @@ Tools.canvasDebugger = {
 Tools.performance = {
   id: "performance",
   ordinal: 7,
   icon: "chrome://browser/skin/devtools/tool-profiler.svg",
   invertIconForLightTheme: true,
   highlightedicon: "chrome://browser/skin/devtools/tool-profiler-active.svg",
   url: "chrome://browser/content/devtools/performance.xul",
   visibilityswitch: "devtools.performance.enabled",
-  label: l10n("profiler.label2", profilerStrings),
-  panelLabel: l10n("profiler.panelLabel2", profilerStrings),
+  label: l10n("performance.label", performanceStrings),
+  panelLabel: l10n("performance.panelLabel", performanceStrings),
   get tooltip() {
-    return l10n("profiler.tooltip3", profilerStrings,
+    return l10n("performance.tooltip", performanceStrings,
     "Shift+" + functionkey(this.key));
   },
-  accesskey: l10n("profiler.accesskey", profilerStrings),
-  key: l10n("profiler.commandkey2", profilerStrings),
+  accesskey: l10n("performance.accesskey", performanceStrings),
+  key: l10n("performance.commandkey", performanceStrings),
   modifiers: "shift",
   inMenu: true,
 
   isTargetSupported: function (target) {
     return target.hasActor("profiler");
   },
 
   build: function (frame, target) {
--- a/browser/devtools/performance/modules/global.js
+++ b/browser/devtools/performance/modules/global.js
@@ -2,21 +2,20 @@
  * 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 { ViewHelpers } = require("resource:///modules/devtools/ViewHelpers.jsm");
 
 /**
  * Localization convenience methods.
- + TODO: merge these into a single file: Bug 1082695.
  */
 const L10N = new ViewHelpers.MultiL10N([
-  "chrome://browser/locale/devtools/timeline.properties",
-  "chrome://browser/locale/devtools/profiler.properties"
+  "chrome://browser/locale/devtools/markers.properties",
+  "chrome://browser/locale/devtools/performance.properties"
 ]);
 
 /**
  * A list of preferences for this tool. The values automatically update
  * if somebody edits edits about:config or the prefs change somewhere else.
  */
 const PREFS = new ViewHelpers.Prefs("devtools.performance", {
   "show-platform-data": ["Bool", "ui.show-platform-data"],
--- a/browser/devtools/performance/modules/logic/marker-utils.js
+++ b/browser/devtools/performance/modules/logic/marker-utils.js
@@ -88,22 +88,18 @@ function getMarkerClassName (type) {
  * @return {Array<object>}
  */
 function getMarkerFields (marker) {
   let blueprint = getBlueprintFor(marker);
 
   // If blueprint.fields is a function, use that
   if (typeof blueprint.fields === "function") {
     let fields = blueprint.fields(marker);
-    // Add a ":" to the label since the localization files contain the ":"
-    // if not present. This should be changed, ugh.
     return Object.keys(fields || []).map(label => {
-      // TODO revisit localization strings for markers bug 1163763
-      let normalizedLabel = label.indexOf(":") !== -1 ? label : (label + ":");
-      return { label: normalizedLabel, value: fields[label] };
+      return { label, value: fields[label] };
     });
   }
 
   // Otherwise, iterate over the array
   return (blueprint.fields || []).reduce((fields, field) => {
     // Ensure this marker has this field present
     if (field.property in marker) {
       let label = field.label;
@@ -163,17 +159,17 @@ const DOM = {
   /**
    * Builds the duration element, like "Duration: 200ms".
    *
    * @param {Document} doc
    * @param {ProfileTimelineMarker} marker
    * @return {Element}
    */
   buildDuration: function (doc, marker) {
-    let label = L10N.getStr("timeline.markerDetail.duration");
+    let label = L10N.getStr("marker.field.duration");
     let start = L10N.getFormatStrWithNumbers("timeline.tick", marker.start);
     let end = L10N.getFormatStrWithNumbers("timeline.tick", marker.end);
     let duration = L10N.getFormatStrWithNumbers("timeline.tick", marker.end - marker.start);
     let el = DOM.buildNameValueLabel(doc, label, duration);
     el.classList.add("marker-details-duration");
     el.setAttribute("tooltiptext", `${start} → ${end}`);
     return el;
   },
@@ -212,17 +208,17 @@ const DOM = {
    *        string type - String identifier for type of stack ("stack", "startStack" or "endStack")
    *        number frameIndex - The index of the topmost stack frame.
    *        array frames - Array of stack frames.
    */
   buildStackTrace: function(doc, { type, frameIndex, frames }) {
     let container = doc.createElement("vbox");
     let labelName = doc.createElement("label");
     labelName.className = "plain marker-details-labelname";
-    labelName.setAttribute("value", L10N.getStr(`timeline.markerDetail.${type}`));
+    labelName.setAttribute("value", L10N.getStr(`marker.field.${type}`));
     container.setAttribute("type", type);
     container.className = "marker-details-stack";
     container.appendChild(labelName);
 
     let wasAsyncParent = false;
     while (frameIndex > 0) {
       let frame = frames[frameIndex];
       let url = frame.source;
@@ -230,17 +226,17 @@ const DOM = {
       let line = frame.line;
 
       // If the previous frame had an async parent, then the async
       // cause is in this frame and should be displayed.
       if (wasAsyncParent) {
         let asyncBox = doc.createElement("hbox");
         let asyncLabel = doc.createElement("label");
         asyncLabel.className = "devtools-monospace";
-        asyncLabel.setAttribute("value", L10N.getFormatStr("timeline.markerDetail.asyncStack",
+        asyncLabel.setAttribute("value", L10N.getFormatStr("marker.field.asyncStack",
                                                            frame.asyncCause));
         asyncBox.appendChild(asyncLabel);
         container.appendChild(asyncBox);
         wasAsyncParent = false;
       }
 
       let hbox = doc.createElement("hbox");
 
@@ -273,17 +269,17 @@ const DOM = {
         // which handles the view source.
         aNode.setAttribute("data-action", JSON.stringify({
           url, line, action: "view-source"
         }));
       }
 
       if (!displayName && !url) {
         let label = doc.createElement("label");
-        label.setAttribute("value", L10N.getStr("timeline.markerDetail.unknownFrame"));
+        label.setAttribute("value", L10N.getStr("marker.value.unknownFrame"));
         hbox.appendChild(label);
       }
 
       container.appendChild(hbox);
 
       if (frame.asyncParent) {
         frameIndex = frame.asyncParent;
         wasAsyncParent = true;
@@ -296,54 +292,54 @@ const DOM = {
   }
 };
 
 /**
  * Mapping of JS marker causes to a friendlier form. Only
  * markers that are considered "from content" should be labeled here.
  */
 const JS_MARKER_MAP = {
-  "<script> element":          "Script Tag",
+  "<script> element":          L10N.getStr("marker.label.javascript.scriptElement"),
+  "promise callback":          L10N.getStr("marker.label.javascript.promiseCallback"),
+  "promise initializer":       L10N.getStr("marker.label.javascript.promiseInit"),
+  "Worker runnable":           L10N.getStr("marker.label.javascript.workerRunnable"),
+  "javascript: URI":           L10N.getStr("marker.label.javascript.jsURI"),
+  // The difference between these two event handler markers are differences
+  // in their WebIDL implementation, so distinguishing them is not necessary.
+  "EventHandlerNonNull":       L10N.getStr("marker.label.javascript.eventHandler"),
+  "EventListener.handleEvent": L10N.getStr("marker.label.javascript.eventHandler"),
+  // These markers do not get L10N'd because they're JS names.
   "setInterval handler":       "setInterval",
   "setTimeout handler":        "setTimeout",
   "FrameRequestCallback":      "requestAnimationFrame",
-  "promise callback":          "Promise Callback",
-  "promise initializer":       "Promise Init",
-  "Worker runnable":           "Worker",
-  "javascript: URI":           "JavaScript URI",
-  // The difference between these two event handler markers are differences
-  // in their WebIDL implementation, so distinguishing them is not necessary.
-  "EventHandlerNonNull":       "Event Handler",
-  "EventListener.handleEvent": "Event Handler",
 };
 
 /**
  * A series of formatters used by the blueprint.
  */
 const Formatters = {
   /**
    * Uses the marker name as the label for markers that do not have
    * a blueprint entry. Uses "Other" in the marker filter menu.
    */
   UnknownLabel: function (marker={}) {
-    return marker.name || L10N.getStr("timeline.label.unknown");
+    return marker.name || L10N.getStr("marker.label.unknown");
   },
 
   GCLabel: function (marker={}) {
-    let label = L10N.getStr("timeline.label.garbageCollection");
     // Only if a `nonincrementalReason` exists, do we want to label
     // this as a non incremental GC event.
     if ("nonincrementalReason" in marker) {
-      label = `${label} (Non-incremental)`;
+      return L10N.getStr("marker.label.garbageCollection.nonIncremental");
     }
-    return label;
+    return L10N.getStr("marker.label.garbageCollection");
   },
 
   JSLabel: function (marker={}) {
-    let generic = L10N.getStr("timeline.label.javascript2");
+    let generic = L10N.getStr("marker.label.javascript");
     if ("causeName" in marker) {
       return JS_MARKER_MAP[marker.causeName] || generic;
     }
     return generic;
   },
 
   DOMJSLabel: function (marker={}) {
     return `Event (${marker.type})`;
@@ -352,50 +348,54 @@ const Formatters = {
   /**
    * Returns a hash for computing a fields object for a JS marker. If the cause
    * is considered content (so an entry exists in the JS_MARKER_MAP), do not display it
    * since it's redundant with the label. Otherwise for Gecko code, either display
    * the cause, or "(Gecko)", depending on if "show-platform-data" is set.
    */
   JSFields: function (marker) {
     if ("causeName" in marker && !JS_MARKER_MAP[marker.causeName]) {
-      return { Reason: PREFS["show-platform-data"] ? marker.causeName : GECKO_SYMBOL };
+      let cause = PREFS["show-platform-data"] ? marker.causeName : GECKO_SYMBOL;
+      return {
+        [L10N.getStr("marker.field.causeName")]: cause
+      };
     }
   },
 
   DOMEventFields: function (marker) {
     let fields = Object.create(null);
     if ("type" in marker) {
-      fields[L10N.getStr("timeline.markerDetail.DOMEventType")] = marker.type;
+      fields[L10N.getStr("marker.field.DOMEventType")] = marker.type;
     }
     if ("eventPhase" in marker) {
       let phase;
       if (marker.eventPhase === Ci.nsIDOMEvent.AT_TARGET) {
-        phase = L10N.getStr("timeline.markerDetail.DOMEventTargetPhase");
+        phase = L10N.getStr("marker.value.DOMEventTargetPhase");
       } else if (marker.eventPhase === Ci.nsIDOMEvent.CAPTURING_PHASE) {
-        phase = L10N.getStr("timeline.markerDetail.DOMEventCapturingPhase");
+        phase = L10N.getStr("marker.value.DOMEventCapturingPhase");
       } else if (marker.eventPhase === Ci.nsIDOMEvent.BUBBLING_PHASE) {
-        phase = L10N.getStr("timeline.markerDetail.DOMEventBubblingPhase");
+        phase = L10N.getStr("marker.value.DOMEventBubblingPhase");
       }
-      fields[L10N.getStr("timeline.markerDetail.DOMEventPhase")] = phase;
+      fields[L10N.getStr("marker.field.DOMEventPhase")] = phase;
     }
     return fields;
   },
 
   StylesFields: function (marker) {
     if ("restyleHint" in marker) {
-      return { "Restyle Hint": marker.restyleHint.replace(/eRestyle_/g, "") };
+      return {
+        [L10N.getStr("marker.field.restyleHint")]: marker.restyleHint.replace(/eRestyle_/g, "")
+      };
     }
   },
 
   CycleCollectionFields: function (marker) {
-    let Type = PREFS["show-platform-data"]
-        ? marker.name
-        : marker.name.replace(/nsCycleCollector::/g, "");
-    return { Type };
+    return {
+      [L10N.getStr("marker.field.type")]: marker.name.replace(/nsCycleCollector::/g, "")
+    };
   },
 };
 
 /**
  * Takes a marker and returns the definition for that marker type,
  * falling back to the UNKNOWN definition if undefined.
  *
  * @param {Marker} marker
--- a/browser/devtools/performance/modules/markers.js
+++ b/browser/devtools/performance/modules/markers.js
@@ -5,17 +5,17 @@
 
 const { L10N } = require("devtools/performance/global");
 const { Formatters } = require("devtools/performance/marker-utils");
 
 /**
  * A simple schema for mapping markers to the timeline UI. The keys correspond
  * to marker names, while the values are objects with the following format:
  *
- * - group: The row index in the timeline overview graph; multiple markers
+ * - group: The row index in the overview graph; multiple markers
  *          can be added on the same row. @see <overview.js/buildGraphImage>
  * - label: The label used in the waterfall to identify the marker. Can be a
  *          string or just a function that accepts the marker and returns a
  *          string, if you want to use a dynamic property for the main label.
  *          If you use a function for a label, it *must* handle the case where
  *          no marker is provided for a main label to describe all markers of
  *          this type.
  * - colorName: The label of the DevTools color used for this marker. If
@@ -55,91 +55,91 @@ const TIMELINE_BLUEPRINT = {
     colorName: "graphs-grey",
     label: Formatters.UnknownLabel,
   },
 
   /* Group 0 - Reflow and Rendering pipeline */
   "Styles": {
     group: 0,
     colorName: "graphs-purple",
-    label: L10N.getStr("timeline.label.styles2"),
+    label: L10N.getStr("marker.label.styles"),
     fields: Formatters.StylesFields,
   },
   "Reflow": {
     group: 0,
     colorName: "graphs-purple",
-    label: L10N.getStr("timeline.label.reflow2"),
+    label: L10N.getStr("marker.label.reflow"),
   },
   "Paint": {
     group: 0,
     colorName: "graphs-green",
-    label: L10N.getStr("timeline.label.paint"),
+    label: L10N.getStr("marker.label.paint"),
   },
 
   /* Group 1 - JS */
   "DOMEvent": {
     group: 1,
     colorName: "graphs-yellow",
-    label: L10N.getStr("timeline.label.domevent"),
+    label: L10N.getStr("marker.label.domevent"),
     fields: Formatters.DOMEventFields,
   },
   "Javascript": {
     group: 1,
     colorName: "graphs-yellow",
     label: Formatters.JSLabel,
     fields: Formatters.JSFields
   },
   "Parse HTML": {
     group: 1,
     colorName: "graphs-yellow",
-    label: L10N.getStr("timeline.label.parseHTML"),
+    label: L10N.getStr("marker.label.parseHTML"),
   },
   "Parse XML": {
     group: 1,
     colorName: "graphs-yellow",
-    label: L10N.getStr("timeline.label.parseXML"),
+    label: L10N.getStr("marker.label.parseXML"),
   },
   "GarbageCollection": {
     group: 1,
     colorName: "graphs-red",
     label: Formatters.GCLabel,
     fields: [
-      { property: "causeName", label: "Reason:" },
-      { property: "nonincrementalReason", label: "Non-incremental Reason:" }
+      { property: "causeName", label: L10N.getStr("marker.field.causeName") },
+      { property: "nonincrementalReason", label: L10N.getStr("marker.field.nonIncrementalCause") }
     ],
   },
   "nsCycleCollector::Collect": {
     group: 1,
     colorName: "graphs-red",
-    label: "Cycle Collection",
+    label: L10N.getStr("marker.label.cycleCollection"),
     fields: Formatters.CycleCollectionFields,
   },
   "nsCycleCollector::ForgetSkippable": {
     group: 1,
     colorName: "graphs-red",
-    label: "Cycle Collection",
+    label: L10N.getStr("marker.label.cycleCollection.forgetSkippable"),
     fields: Formatters.CycleCollectionFields,
   },
 
   /* Group 2 - User Controlled */
   "ConsoleTime": {
     group: 2,
     colorName: "graphs-blue",
-    label: sublabelForProperty(L10N.getStr("timeline.label.consoleTime"), "causeName"),
+    label: sublabelForProperty(L10N.getStr("marker.label.consoleTime"), "causeName"),
     fields: [{
       property: "causeName",
-      label: L10N.getStr("timeline.markerDetail.consoleTimerName")
+      label: L10N.getStr("marker.field.consoleTimerName")
     }],
     nestable: false,
     collapsible: false,
   },
   "TimeStamp": {
     group: 2,
     colorName: "graphs-blue",
-    label: sublabelForProperty(L10N.getStr("timeline.label.timestamp"), "causeName"),
+    label: sublabelForProperty(L10N.getStr("marker.label.timestamp"), "causeName"),
     fields: [{
       property: "causeName",
       label: "Label:"
     }],
     collapsible: false,
   },
 };
 
--- a/browser/devtools/performance/modules/widgets/graphs.js
+++ b/browser/devtools/performance/modules/widgets/graphs.js
@@ -19,18 +19,18 @@ loader.lazyRequireGetter(this, "EventEmi
   "devtools/toolkit/event-emitter");
 
 loader.lazyRequireGetter(this, "colorUtils",
   "devtools/css-color", true);
 loader.lazyRequireGetter(this, "getColor",
   "devtools/shared/theme", true);
 loader.lazyRequireGetter(this, "ProfilerGlobal",
   "devtools/performance/global");
-loader.lazyRequireGetter(this, "TimelineGlobal",
-  "devtools/performance/global");
+loader.lazyRequireGetter(this, "L10N",
+  "devtools/performance/global", true);
 loader.lazyRequireGetter(this, "MarkersOverview",
   "devtools/performance/markers-overview", true);
 
 /**
  * For line graphs
  */
 const HEIGHT = 35; // px
 const STROKE_WIDTH = 1; // px
@@ -119,17 +119,17 @@ FramerateGraph.prototype = Heritage.exte
 
 /**
  * Constructor for the memory graph. Inherits from PerformanceGraph.
  *
  * @param nsIDOMNode parent
  *        The parent node holding the overview.
  */
 function MemoryGraph(parent) {
-  PerformanceGraph.call(this, parent, TimelineGlobal.L10N.getStr("graphs.memory"));
+  PerformanceGraph.call(this, parent, L10N.getStr("graphs.memory"));
 }
 
 MemoryGraph.prototype = Heritage.extend(PerformanceGraph.prototype, {
   mainColor: MEMORY_GRAPH_COLOR_NAME,
   setPerformanceData: function ({ duration, memory }) {
     this.dataDuration = duration;
     return this.setData(memory);
   }
--- a/browser/devtools/performance/modules/widgets/marker-details.js
+++ b/browser/devtools/performance/modules/widgets/marker-details.js
@@ -6,18 +6,16 @@
 /**
  * This file contains the rendering code for the marker sidebar.
  */
 
 const { Cc, Ci, Cu, Cr } = require("chrome");
 
 loader.lazyRequireGetter(this, "EventEmitter",
   "devtools/toolkit/event-emitter");
-loader.lazyRequireGetter(this, "L10N",
-  "devtools/performance/global", true);
 loader.lazyRequireGetter(this, "MarkerUtils",
   "devtools/performance/marker-utils");
 
 /**
  * A detailed view for one single marker.
  *
  * @param nsIDOMNode parent
  *        The parent node holding the view.
--- a/browser/devtools/performance/performance-view.js
+++ b/browser/devtools/performance/performance-view.js
@@ -168,17 +168,17 @@ let PerformanceView = {
     // Be a little flexible on the buffer status, although not sure how
     // this could happen, as RecordingModel clamps.
     if (percent >= 99) {
       $container.setAttribute("buffer-status", "full");
     } else {
       $container.setAttribute("buffer-status", "in-progress");
     }
 
-    $bufferLabel.value = `Buffer ${percent}% full`;
+    $bufferLabel.value = L10N.getFormatStr("profiler.bufferFull", percent);
     this.emit(EVENTS.UI_BUFFER_UPDATED, percent);
   },
 
   /**
    * Toggles the `locked` attribute on the record buttons based
    * on `lock`.
    *
    * @param {boolean} lock
@@ -284,18 +284,17 @@ let PerformanceView = {
     }
   },
 
   /**
    * Handler for clicking the import button.
    */
   _onImportButtonClick: function(e) {
     let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
-    // TODO localize? in bug 1163763
-    fp.init(window, "Import recording…", Ci.nsIFilePicker.modeOpen);
+    fp.init(window, L10N.getStr("recordingsList.importDialogTitle"), Ci.nsIFilePicker.modeOpen);
     fp.appendFilter(L10N.getStr("recordingsList.saveDialogJSONFilter"), "*.json");
     fp.appendFilter(L10N.getStr("recordingsList.saveDialogAllFilter"), "*.*");
 
     if (fp.show() == Ci.nsIFilePicker.returnOK) {
       this.emit(EVENTS.UI_IMPORT_RECORDING, fp.file);
     }
   },
 
--- a/browser/devtools/performance/performance.xul
+++ b/browser/devtools/performance/performance.xul
@@ -3,18 +3,18 @@
    - 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/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/content/devtools/widgets.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/devtools/common.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/devtools/widgets.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/devtools/performance.css" type="text/css"?>
 <!DOCTYPE window [
-  <!ENTITY % profilerDTD SYSTEM "chrome://browser/locale/devtools/profiler.dtd">
-  %profilerDTD;
+  <!ENTITY % performanceDTD SYSTEM "chrome://browser/locale/devtools/performance.dtd">
+  %performanceDTD;
 ]>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <script src="chrome://browser/content/devtools/theme-switching.js"/>
   <script type="application/javascript" src="performance/performance-controller.js"/>
   <script type="application/javascript" src="performance/performance-view.js"/>
   <script type="application/javascript" src="performance/views/overview.js"/>
   <script type="application/javascript" src="performance/views/toolbar.js"/>
@@ -31,150 +31,150 @@
   <script type="application/javascript" src="performance/views/frames-list.js"/>
 
   <popupset id="performance-options-popupset">
     <menupopup id="performance-filter-menupopup"/>
     <menupopup id="performance-options-menupopup">
       <menuitem id="option-show-platform-data"
                 type="checkbox"
                 data-pref="show-platform-data"
-                label="&profilerUI.showPlatformData;"
-                tooltiptext="&profilerUI.showPlatformData.tooltiptext;"/>
+                label="&performanceUI.showPlatformData;"
+                tooltiptext="&performanceUI.showPlatformData.tooltiptext;"/>
       <menuitem id="option-enable-memory"
                 class="experimental-option"
                 type="checkbox"
                 data-pref="enable-memory"
-                label="&profilerUI.enableMemory;"
-                tooltiptext="&profilerUI.enableMemory.tooltiptext;"/>
+                label="&performanceUI.enableMemory;"
+                tooltiptext="&performanceUI.enableMemory.tooltiptext;"/>
       <menuitem id="option-enable-allocations"
                 class="experimental-option"
                 type="checkbox"
                 data-pref="enable-allocations"
-                label="&profilerUI.enableAllocations;"
-                tooltiptext="&profilerUI.enableAllocations.tooltiptext;"/>
+                label="&performanceUI.enableAllocations;"
+                tooltiptext="&performanceUI.enableAllocations.tooltiptext;"/>
       <menuitem id="option-enable-framerate"
                 type="checkbox"
                 data-pref="enable-framerate"
-                label="&profilerUI.enableFramerate;"
-                tooltiptext="&profilerUI.enableFramerate.tooltiptext;"/>
+                label="&performanceUI.enableFramerate;"
+                tooltiptext="&performanceUI.enableFramerate.tooltiptext;"/>
       <menuitem id="option-invert-call-tree"
                 type="checkbox"
                 data-pref="invert-call-tree"
-                label="&profilerUI.invertTree;"
-                tooltiptext="&profilerUI.invertTree.tooltiptext;"/>
+                label="&performanceUI.invertTree;"
+                tooltiptext="&performanceUI.invertTree.tooltiptext;"/>
       <menuitem id="option-invert-flame-graph"
                 type="checkbox"
                 data-pref="invert-flame-graph"
-                label="&profilerUI.invertFlameGraph;"
-                tooltiptext="&profilerUI.invertFlameGraph.tooltiptext;"/>
+                label="&performanceUI.invertFlameGraph;"
+                tooltiptext="&performanceUI.invertFlameGraph.tooltiptext;"/>
       <menuitem id="option-flatten-tree-recursion"
                 type="checkbox"
                 data-pref="flatten-tree-recursion"
-                label="&profilerUI.flattenTreeRecursion;"
-                tooltiptext="&profilerUI.flattenTreeRecursion.tooltiptext;"/>
+                label="&performanceUI.flattenTreeRecursion;"
+                tooltiptext="&performanceUI.flattenTreeRecursion.tooltiptext;"/>
       <menuitem id="option-enable-jit-optimizations"
                 class="experimental-option"
                 type="checkbox"
                 data-pref="enable-jit-optimizations"
-                label="&profilerUI.enableJITOptimizations;"
-                tooltiptext="&profilerUI.enableJITOptimizations.tooltiptext;"/>
+                label="&performanceUI.enableJITOptimizations;"
+                tooltiptext="&performanceUI.enableJITOptimizations.tooltiptext;"/>
     </menupopup>
   </popupset>
 
   <hbox class="theme-body" flex="1">
 
     <!-- Sidebar: controls and recording list -->
     <vbox id="recordings-pane">
       <toolbar id="recordings-toolbar"
                class="devtools-toolbar">
         <hbox id="recordings-controls"
               class="devtools-toolbarbutton-group">
           <toolbarbutton id="main-record-button"
                          class="devtools-toolbarbutton record-button"
-                         tooltiptext="&profilerUI.recordButton2.tooltip;"/>
+                         tooltiptext="&performanceUI.recordButton.tooltip;"/>
           <toolbarbutton id="import-button"
                          class="devtools-toolbarbutton"
-                         label="&profilerUI.importButton;"/>
+                         label="&performanceUI.importButton;"/>
           <toolbarbutton id="clear-button"
                          class="devtools-toolbarbutton"
-                         label="&profilerUI.clearButton;"/>
+                         label="&performanceUI.clearButton;"/>
         </hbox>
       </toolbar>
       <vbox id="recordings-list" flex="1"/>
     </vbox>
 
     <!-- Main panel content -->
     <vbox id="performance-pane" flex="1">
 
       <!-- Top toolbar controls -->
       <toolbar id="performance-toolbar"
                class="devtools-toolbar">
         <hbox id="performance-toolbar-controls-other"
               class="devtools-toolbarbutton-group">
           <toolbarbutton id="filter-button"
                          class="devtools-toolbarbutton"
                          popup="performance-filter-menupopup"
-                         tooltiptext="&profilerUI.options.filter.tooltiptext;"/>
+                         tooltiptext="&performanceUI.options.filter.tooltiptext;"/>
         </hbox>
         <hbox id="performance-toolbar-controls-detail-views"
               class="devtools-toolbarbutton-group">
           <toolbarbutton id="select-waterfall-view"
                          class="devtools-toolbarbutton devtools-button"
-                         label="Waterfall"
+                         label="&performanceUI.toolbar.waterfall;"
                          hidden="true"
                          data-view="waterfall" />
           <toolbarbutton id="select-js-calltree-view"
                          class="devtools-toolbarbutton devtools-button"
-                         label="Call Tree"
+                         label="&performanceUI.toolbar.js-calltree;"
                          hidden="true"
                          data-view="js-calltree" />
           <toolbarbutton id="select-js-flamegraph-view"
                          class="devtools-toolbarbutton devtools-button"
-                         label="Flame Chart"
+                         label="&performanceUI.toolbar.js-flamegraph;"
                          hidden="true"
                          data-view="js-flamegraph" />
           <toolbarbutton id="select-memory-calltree-view"
                          class="devtools-toolbarbutton devtools-button"
-                         label="Allocations Tree"
+                         label="&performanceUI.toolbar.memory-calltree;"
                          hidden="true"
                          data-view="memory-calltree" />
           <toolbarbutton id="select-memory-flamegraph-view"
                          class="devtools-toolbarbutton devtools-button"
-                         label="Allocations Chart"
+                         label="&performanceUI.toolbar.memory-flamegraph;"
                          hidden="true"
                          data-view="memory-flamegraph" />
           <toolbarbutton id="select-optimizations-view"
                          class="devtools-toolbarbutton devtools-button"
                          label="Optimizations"
                          hidden="true"
                          data-view="optimizations" />
         </hbox>
         <spacer flex="1"></spacer>
         <hbox id="performance-toolbar-controls-options"
               class="devtools-toolbarbutton-group">
           <toolbarbutton id="performance-options-button"
                          class="devtools-toolbarbutton devtools-option-toolbarbutton"
                          popup="performance-options-menupopup"
-                         tooltiptext="&profilerUI.options.gear.tooltiptext;"/>
+                         tooltiptext="&performanceUI.options.gear.tooltiptext;"/>
         </hbox>
       </toolbar>
 
       <!-- Recording contents and general notice messages -->
       <deck id="performance-view" flex="1">
 
         <!-- "Empty" notice, shown when there's no recordings available -->
         <hbox id="empty-notice"
               class="notice-container"
               align="center"
               pack="center"
               flex="1">
           <hbox class="devtools-toolbarbutton-group"
                 pack="center">
             <toolbarbutton class="devtools-toolbarbutton record-button"
-                           label="&profilerUI.startRecording;"
+                           label="&performanceUI.startRecording;"
                            standalone="true"/>
           </hbox>
         </hbox>
 
         <!-- Recording contents -->
         <vbox id="performance-view-content" flex="1">
 
           <!-- Overview graphs -->
@@ -188,69 +188,65 @@
           <deck id="details-pane-container" flex="1">
 
             <!-- "Loading" notice, shown when a recording is being loaded -->
             <hbox id="loading-notice"
                   class="notice-container devtools-throbber"
                   align="center"
                   pack="center"
                   flex="1">
-              <label value="&profilerUI.loadingNotice;"/>
+              <label value="&performanceUI.loadingNotice;"/>
             </hbox>
 
             <!-- "Recording" notice, shown when a recording is in progress -->
             <vbox id="recording-notice"
                   class="notice-container"
                   align="center"
                   pack="center"
                   flex="1">
               <hbox class="devtools-toolbarbutton-group"
                     pack="center">
                 <toolbarbutton class="devtools-toolbarbutton record-button"
-                               label="&profilerUI.stopRecording;"
+                               label="&performanceUI.stopRecording;"
                                standalone="true"/>
               </hbox>
-              <label class="realtime-disabled-message">
-                Realtime recording data disabled on non-multiprocess Firefox.
-              </label>
-              <label class="realtime-disabled-on-e10s-message">
-                Enable multiprocess Firefox in preferences for rendering recording data in realtime.
-              </label>
+              <label class="realtime-disabled-message"
+                     value="&performanceUI.disabledRealTime.nonE10SBuild;"/>
+              <label class="realtime-disabled-on-e10s-message"
+                     value="&performanceUI.disabledRealTime.disabledE10S;"/>
               <label class="buffer-status-message"
-                     tooltiptext="&profilerUI.bufferStatusTooltip;"/>
+                     tooltiptext="&performanceUI.bufferStatusTooltip;"/>
               <label class="buffer-status-message-full"
-                     value="&profilerUI.bufferStatusFull;"/>
+                     value="&performanceUI.bufferStatusFull;"/>
             </vbox>
 
             <!-- "Console" notice, shown when a console recording is in progress -->
             <vbox id="console-recording-notice"
                   class="notice-container"
                   align="center"
                   pack="center"
                   flex="1">
               <hbox class="console-profile-recording-notice">
-                <label value="&profilerUI.console.recordingNoticeStart;" />
+                <label value="&performanceUI.console.recordingNoticeStart;" />
                 <label class="console-profile-command" />
-                <label value="&profilerUI.console.recordingNoticeEnd;" />
+                <label value="&performanceUI.console.recordingNoticeEnd;" />
               </hbox>
               <hbox class="console-profile-stop-notice">
-                <label value="&profilerUI.console.stopCommandStart;" />
+                <label value="&performanceUI.console.stopCommandStart;" />
                 <label class="console-profile-command" />
-                <label value="&profilerUI.console.stopCommandEnd;" />
+                <label value="&performanceUI.console.stopCommandEnd;" />
               </hbox>
-              <label class="realtime-disabled-message">
-                Realtime recording data disabled on non-multiprocess Firefox.
-              </label>
-              <label class="realtime-disabled-on-e10s-message">
-                Enable multiprocess Firefox in preferences for rendering recording data in realtime.
-              </label>
+              <label class="realtime-disabled-message"
+                     value="&performanceUI.disabledRealTime.nonE10SBuild;"/>
+              <label class="realtime-disabled-on-e10s-message"
+                     value="&performanceUI.disabledRealTime.disabledE10S;"/>
               <label class="buffer-status-message"
-                     tooltiptext="&profilerUI.bufferStatusTooltip;"/>
+                     tooltiptext="&performanceUI.bufferStatusTooltip;"/>
               <label class="buffer-status-message-full"
-                     value="&profilerUI.bufferStatusFull;"/>
+                     value="&performanceUI.bufferStatusFull;"/>
             </vbox>
 
             <!-- Detail views -->
             <deck id="details-pane" flex="1">
 
               <!-- Waterfall -->
               <hbox id="waterfall-view" flex="1">
                 <vbox flex="1">
@@ -264,69 +260,69 @@
 
               <!-- JS Tree and JIT view -->
               <hbox id="js-profile-view" flex="1">
                 <vbox id="js-calltree-view" flex="1">
                   <hbox class="call-tree-headers-container">
                     <label class="plain call-tree-header"
                            type="duration"
                            crop="end"
-                           value="&profilerUI.table.totalDuration2;"
-                           tooltiptext="&profilerUI.table.totalDuration.tooltip;"/>
+                           value="&performanceUI.table.totalDuration;"
+                           tooltiptext="&performanceUI.table.totalDuration.tooltip;"/>
                     <label class="plain call-tree-header"
                            type="percentage"
                            crop="end"
-                           value="&profilerUI.table.totalPercentage;"
-                           tooltiptext="&profilerUI.table.totalPercentage.tooltip;"/>
+                           value="&performanceUI.table.totalPercentage;"
+                           tooltiptext="&performanceUI.table.totalPercentage.tooltip;"/>
                     <label class="plain call-tree-header"
                            type="self-duration"
                            crop="end"
-                           value="&profilerUI.table.selfDuration2;"
-                           tooltiptext="&profilerUI.table.selfDuration.tooltip;"/>
+                           value="&performanceUI.table.selfDuration;"
+                           tooltiptext="&performanceUI.table.selfDuration.tooltip;"/>
                     <label class="plain call-tree-header"
                            type="self-percentage"
                            crop="end"
-                           value="&profilerUI.table.selfPercentage;"
-                           tooltiptext="&profilerUI.table.selfPercentage.tooltip;"/>
+                           value="&performanceUI.table.selfPercentage;"
+                           tooltiptext="&performanceUI.table.selfPercentage.tooltip;"/>
                     <label class="plain call-tree-header"
                            type="samples"
                            crop="end"
-                           value="&profilerUI.table.samples;"
-                           tooltiptext="&profilerUI.table.samples.tooltip;"/>
+                           value="&performanceUI.table.samples;"
+                           tooltiptext="&performanceUI.table.samples.tooltip;"/>
                     <label class="plain call-tree-header"
                            type="function"
                            crop="end"
-                           value="&profilerUI.table.function;"
-                           tooltiptext="&profilerUI.table.function.tooltip;"/>
+                           value="&performanceUI.table.function;"
+                           tooltiptext="&performanceUI.table.function.tooltip;"/>
                   </hbox>
                   <vbox class="call-tree-cells-container" flex="1"/>
                 </vbox>
               </hbox>
 
               <!-- JS FlameChart -->
               <hbox id="js-flamegraph-view" flex="1">
               </hbox>
 
               <!-- Memory Tree -->
               <vbox id="memory-calltree-view" flex="1">
                 <hbox class="call-tree-headers-container">
                   <label class="plain call-tree-header"
                          type="allocations"
                          crop="end"
-                         value="&profilerUI.table.totalAlloc1;"
-                         tooltiptext="&profilerUI.table.totalAlloc.tooltip;"/>
+                         value="&performanceUI.table.totalAlloc;"
+                         tooltiptext="&performanceUI.table.totalAlloc.tooltip;"/>
                   <label class="plain call-tree-header"
                          type="self-allocations"
                          crop="end"
-                         value="&profilerUI.table.selfAlloc1;"
-                         tooltiptext="&profilerUI.table.selfAlloc.tooltip;"/>
+                         value="&performanceUI.table.selfAlloc;"
+                         tooltiptext="&performanceUI.table.selfAlloc.tooltip;"/>
                   <label class="plain call-tree-header"
                          type="function"
                          crop="end"
-                         value="&profilerUI.table.function;"/>
+                         value="&performanceUI.table.function;"/>
                 </hbox>
                 <vbox class="call-tree-cells-container" flex="1"/>
               </vbox>
 
               <!-- Memory FlameChart -->
               <hbox id="memory-flamegraph-view" flex="1">
               </hbox>
 
@@ -347,17 +343,17 @@
                   <tabpanels flex="1">
 
                     <!-- Optimizations Panel -->
                     <tabpanel id="optimizations-tabpanel"
                               class="tabpanel-content">
                       <vbox id="jit-optimizations-view">
                         <toolbar id="jit-optimizations-toolbar" class="devtools-toolbar">
                           <hbox id="jit-optimizations-header">
-                            <span class="jit-optimizations-title">&profilerUI.JITOptimizationsTitle;</span>
+                            <span class="jit-optimizations-title">&performanceUI.JITOptimizationsTitle;</span>
                             <span class="header-function-name" />
                             <span class="header-file opt-url debugger-link" />
                             <span class="header-line opt-line" />
                           </hbox>
                         </toolbar>
                         <vbox id="jit-optimizations-raw-view"></vbox>
                       </vbox>
                     </tabpanel>
--- a/browser/devtools/performance/test/browser_perf-loading-01.js
+++ b/browser/devtools/performance/test/browser_perf-loading-01.js
@@ -4,21 +4,17 @@
 /**
  * Tests that the recordings view shows the right label while recording, after
  * recording, and once the record has loaded.
  */
 
 let test = Task.async(function*() {
   let { target, panel, toolbox } = yield initPerformance(SIMPLE_URL);
   let { RecordingsView, PerformanceController, PerformanceView,
-        EVENTS, $, L10N, ViewHelpers } = panel.panelWin;
-
-  // This should be removed with bug 1163763.
-  let DBG_STRINGS_URI = "chrome://browser/locale/devtools/debugger.properties";
-  let DBG_L10N = new ViewHelpers.L10N(DBG_STRINGS_URI);
+        EVENTS, $, L10N } = panel.panelWin;
 
   info("Start to record");
   yield startRecording(panel);
   let durationNode = $(".recording-item-duration",
     RecordingsView.selectedItem.target);
 
   is(durationNode.getAttribute("value"),
     L10N.getStr("recordingsList.recordingLabel"),
@@ -29,17 +25,17 @@ let test = Task.async(function*() {
   let willStop = PerformanceController.once(EVENTS.RECORDING_WILL_STOP);
   let hasStopped = PerformanceController.once(EVENTS.RECORDING_STOPPED);
 
   click(panel.panelWin, $("#main-record-button"));
   yield clicked;
   yield willStop;
 
   is(durationNode.getAttribute("value"),
-    DBG_L10N.getStr("loadingText"),
+    L10N.getStr("recordingsList.loadingLabel"),
     "The duration node should show the 'loading' message while stopping");
 
   let stateChanged = once(PerformanceView, EVENTS.UI_STATE_CHANGED);
   yield hasStopped;
   yield stateChanged;
 
   let duration = RecordingsView.selectedItem.attachment.getDuration().toFixed(0);
   is(durationNode.getAttribute("value"),
--- a/browser/devtools/performance/views/optimizations-list.js
+++ b/browser/devtools/performance/views/optimizations-list.js
@@ -1,16 +1,16 @@
 /* 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 URL_LABEL_TOOLTIP = L10N.getStr("table.url.tooltiptext");
 const OPTIMIZATION_FAILURE = L10N.getStr("jit.optimizationFailure");
-const JIT_SAMPLES = L10N.getStr("jit.samples2");
+const JIT_SAMPLES = L10N.getStr("jit.samples");
 const JIT_EMPTY_TEXT = L10N.getStr("jit.empty");
 const PROPNAME_MAX_LENGTH = 4;
 
 /**
  * View for rendering a list of all optmizations found in a frame.
  * The terminology and types used here can be referenced:
  * @see browser/devtools/performance/modules/logic/jit.js
  */
--- a/browser/devtools/performance/views/recordings.js
+++ b/browser/devtools/performance/views/recordings.js
@@ -1,17 +1,13 @@
 /* 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";
 
-// This should be removed with bug 1163763.
-const DBG_STRINGS_URI = "chrome://browser/locale/devtools/debugger.properties";
-const DBG_L10N = new ViewHelpers.L10N(DBG_STRINGS_URI);
-
 /**
  * Functions handling the recordings UI.
  */
 let RecordingsView = Heritage.extend(WidgetMethods, {
   /**
    * Initialization function, called when the tool is started.
    */
   initialize: function() {
@@ -146,17 +142,17 @@ let RecordingsView = Heritage.extend(Wid
    * @param RecordingModel recording
    *        The model of the recording that is being stopped.
    */
   _onRecordingWillStop: function(_, recording) {
     let recordingItem = this.getItemForPredicate(e => e.attachment === recording);
 
     // Mark the corresponding item as loading.
     let durationNode = $(".recording-item-duration", recordingItem.target);
-    durationNode.setAttribute("value", DBG_L10N.getStr("loadingText"));
+    durationNode.setAttribute("value", L10N.getStr("recordingsList.loadingLabel"));
   },
 
   /**
    * Signals that a recording has been imported.
    *
    * @param RecordingModel model
    *        The recording model containing data on the recording session.
    */
@@ -209,18 +205,17 @@ let RecordingsView = Heritage.extend(Wid
     this.emit(EVENTS.RECORDING_SELECTED, model);
   }),
 
   /**
    * The click listener for the "save" button of each item in this container.
    */
   _onSaveButtonClick: function (e) {
     let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
-    // TODO localize? in bug 1163763
-    fp.init(window, "Save recording…", Ci.nsIFilePicker.modeSave);
+    fp.init(window, L10N.getStr("recordingsList.saveDialogTitle"), Ci.nsIFilePicker.modeSave);
     fp.appendFilter(L10N.getStr("recordingsList.saveDialogJSONFilter"), "*.json");
     fp.appendFilter(L10N.getStr("recordingsList.saveDialogAllFilter"), "*.*");
     fp.defaultString = "profile.json";
 
     fp.open({ done: result => {
       if (result == Ci.nsIFilePicker.returnCancel) {
         return;
       }
new file mode 100644
--- /dev/null
+++ b/browser/locales/en-US/chrome/browser/devtools/markers.properties
@@ -0,0 +1,80 @@
+# 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/.
+
+# LOCALIZATION NOTE These strings are used inside the Performance Tools
+# which is available from the Web Developer sub-menu -> 'Performance'.
+# The correct localization of this file might be to keep it in
+# English, or another language commonly spoken among web developers.
+# You want to make that choice consistent across the developer tools.
+# A good criteria is the language in which you'd find the best
+# documentation on web development on the web. These strings
+# are specifically for marker names in the performance tool.
+
+# LOCALIZATION NOTE (marker.label.*):
+# These strings are displayed in the Performance Tool waterfall, identifying markers.
+# We want to use the same wording as Google Chrome when appropriate.
+marker.label.styles=Recalculate Style
+marker.label.reflow=Layout
+marker.label.paint=Paint
+marker.label.javascript=Function Call
+marker.label.parseHTML=Parse HTML
+marker.label.parseXML=Parse XML
+marker.label.domevent=DOM Event
+marker.label.consoleTime=Console
+marker.label.garbageCollection=Incremental GC
+marker.label.garbageCollection.nonIncremental=Non-incremental GC
+marker.label.cycleCollection=Cycle Collection
+marker.label.cycleCollection.forgetSkippable=CC Graph Reduction
+marker.label.timestamp=Timestamp
+marker.label.unknown=Unknown
+
+# LOCALIZATION NOTE (marker.label.javascript.*):
+# These strings are displayed as JavaScript markers that have special
+# reasons that can be translated.
+marker.label.javascript.scriptElement=Script Tag
+marker.label.javascript.promiseCallback=Promise Callback
+marker.label.javascript.promiseInit=Promise Init
+marker.label.javascript.workerRunnable=Worker
+marker.label.javascript.jsURI=JavaScript URI
+marker.label.javascript.eventHandler=Event Handler
+
+# LOCALIZATION NOTE (marker.fieldFormat):
+# Some timeline markers come with details, like a size, a name, a js function.
+# %1$S is replaced with one of the above label (marker.label.*) and %2$S
+# with the details. For examples: Paint (200x100), or console.time (FOO)
+marker.fieldFormat=%1$S (%2$S)
+
+# LOCALIZATION NOTE (marker.field.*):
+# Strings used in the waterfall sidebar as property names.
+
+# General marker fields
+marker.field.start=Start:
+marker.field.end=End:
+marker.field.duration=Duration:
+# Field names for stack values
+marker.field.stack=Stack:
+marker.field.startStack=Stack at start:
+marker.field.endStack=Stack at end:
+# %S is the "Async Cause" of a marker, and this signifies that the cause
+# was an asynchronous one in a displayed stack.
+marker.field.asyncStack=(Async: %S)
+# For console.time markers
+marker.field.consoleTimerName=Timer Name:
+# For DOM Event markers
+marker.field.DOMEventType=Event Type:
+marker.field.DOMEventPhase=Phase:
+# Non-incremental cause for a Garbage Collection marker
+marker.field.nonIncrementalCause=Non-incremental Cause:
+# For "Recalculate Style" markers
+marker.field.restyleHint=Restyle Hint:
+# General "reason" for a marker (JavaScript, Garbage Collection)
+marker.field.causeName=Cause:
+# General "type" for a marker (Cycle Collection, Garbage Collection)
+marker.field.type=Type:
+
+# Strings used in the waterfall sidebar as values.
+marker.value.unknownFrame=<unknown location>
+marker.value.DOMEventTargetPhase=Target
+marker.value.DOMEventCapturingPhase=Capture
+marker.value.DOMEventBubblingPhase=Bubbling
new file mode 100644
--- /dev/null
+++ b/browser/locales/en-US/chrome/browser/devtools/performance.dtd
@@ -0,0 +1,157 @@
+<!-- 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/. -->
+
+<!-- LOCALIZATION NOTE : FILE This file contains the Performance strings -->
+<!-- LOCALIZATION NOTE : FILE Do not translate commandkey -->
+
+<!-- LOCALIZATION NOTE : FILE The correct localization of this file might be to
+  - keep it in English, or another language commonly spoken among web developers.
+  - You want to make that choice consistent across the developer tools.
+  - A good criteria is the language in which you'd find the best
+  - documentation on web development on the web. -->
+
+<!-- LOCALIZATION NOTE (performanceUI.startRecording/performanceUI.stopRecording): These are
+  -  the labels shown on the main recording buttons to start/stop recording. -->
+<!ENTITY performanceUI.startRecording "Start Recording Performance">
+<!ENTITY performanceUI.stopRecording  "Stop Recording Performance">
+
+<!-- LOCALIZATION NOTE (performanceUI.bufferStatusTooltip): This string
+  -  is displayed as the tooltip for the buffer capacity during a recording. -->
+<!ENTITY performanceUI.bufferStatusTooltip "The profiler stores samples in a circular buffer, and once the buffer reaches the limit for a recording, newer samples begin to overwrite samples at the beginning of the recording.">
+
+<!-- LOCALIZATION NOTE (performanceUI.disabledRealTime.nonE10SBuild): This string
+  -  is displayed as a message for why the real time overview graph is disabled
+  -  when running on a non-multiprocess build. -->
+<!ENTITY performanceUI.disabledRealTime.nonE10SBuild "Realtime recording data disabled on non-multiprocess Firefox.">
+
+<!-- LOCALIZATION NOTE (performanceUI.disabledRealTime.disabledE10S): This string
+  -  is displayed as a message for why the real time overview graph is disabled
+  -  when running on a build that can run multiprocess Firefox, but just is not enabled. -->
+<!ENTITY performanceUI.disabledRealTime.disabledE10S "Enable multiprocess Firefox in preferences for rendering recording data in realtime.">
+
+<!-- LOCALIZATION NOTE (performanceUI.bufferStatusFull): This string
+  -  is displayed when the profiler's circular buffer has started to overlap. -->
+<!ENTITY performanceUI.bufferStatusFull "The buffer is full. Older samples are now being overwritten.">
+
+<!-- LOCALIZATION NOTE (performanceUI.loadingNotice): This is the label shown
+  -  in the call list view while loading a profile. -->
+<!ENTITY performanceUI.loadingNotice "Loading…">
+
+<!-- LOCALIZATION NOTE (performanceUI.recordButton): This string is displayed
+  -  on a button that starts a new profile. -->
+<!ENTITY performanceUI.recordButton.tooltip "Toggle the recording state of a performance recording.">
+
+<!-- LOCALIZATION NOTE (performanceUI.importButton): This string is displayed
+  -  on a button that opens a dialog to import a saved profile data file. -->
+<!ENTITY performanceUI.importButton "Import…">
+
+<!-- LOCALIZATION NOTE (performanceUI.exportButton): This string is displayed
+  -  on a button that opens a dialog to export a saved profile data file. -->
+<!ENTITY performanceUI.exportButton "Save">
+
+<!-- LOCALIZATION NOTE (performanceUI.clearButton): This string is displayed
+  -  on a button that remvoes all the recordings. -->
+<!ENTITY performanceUI.clearButton "Clear">
+
+<!-- LOCALIZATION NOTE (performanceUI.toolbar.*): These strings are displayed
+  -  in the toolbar on buttons that select which view is currently shown. -->
+<!ENTITY performanceUI.toolbar.waterfall "Waterfall">
+<!ENTITY performanceUI.toolbar.js-calltree "Call Tree">
+<!ENTITY performanceUI.toolbar.memory-calltree "Allocations">
+<!ENTITY performanceUI.toolbar.js-flamegraph "JS Flame Chart">
+<!ENTITY performanceUI.toolbar.memory-flamegraph "Allocations Flame Chart">
+
+<!-- LOCALIZATION NOTE (performanceUI.table.*): These strings are displayed
+  -  in the call tree headers for a recording. -->
+<!ENTITY performanceUI.table.totalDuration            "Total Time">
+<!ENTITY performanceUI.table.totalDuration.tooltip    "The amount of time spent in this function and functions it calls.">
+<!ENTITY performanceUI.table.selfDuration             "Self Time">
+<!ENTITY performanceUI.table.selfDuration.tooltip     "The amount of time spent only within this function.">
+<!ENTITY performanceUI.table.totalPercentage          "Total Cost">
+<!ENTITY performanceUI.table.totalPercentage.tooltip  "The percentage of time spent in this function and functions it calls.">
+<!ENTITY performanceUI.table.selfPercentage           "Self Cost">
+<!ENTITY performanceUI.table.selfPercentage.tooltip   "The percentage of time spent only within this function.">
+<!ENTITY performanceUI.table.samples                  "Samples">
+<!ENTITY performanceUI.table.samples.tooltip          "The number of times this function was on the stack when the profiler took a sample.">
+<!ENTITY performanceUI.table.function                 "Function">
+<!ENTITY performanceUI.table.function.tooltip         "The name and source location of the sampled function.">
+<!ENTITY performanceUI.table.totalAlloc               "Total Sampled Allocations">
+<!ENTITY performanceUI.table.totalAlloc.tooltip       "The total number of Object allocations sampled at this location and in callees.">
+<!ENTITY performanceUI.table.selfAlloc                "Self Sampled Allocations">
+<!ENTITY performanceUI.table.selfAlloc.tooltip        "The number of Object allocations sampled at this location.">
+
+<!-- LOCALIZATION NOTE (performanceUI.newtab.tooltiptext): The tooltiptext shown
+  -  on the "+" (new tab) button for a profile when a selection is available. -->
+<!ENTITY performanceUI.newtab.tooltiptext "Add new tab from selection">
+
+<!-- LOCALIZATION NOTE (performanceUI.toolbar.filter.tooltiptext): This string
+  -  is displayed next to the filter button-->
+<!ENTITY performanceUI.options.filter.tooltiptext "Select what data to display in the timeline">
+
+<!-- LOCALIZATION NOTE (performanceUI.options.tooltiptext): This is the tooltip
+  -  for the options button. -->
+<!ENTITY performanceUI.options.gear.tooltiptext "Configure performance preferences.">
+
+<!-- LOCALIZATION NOTE (performanceUI.invertTree): This is the label shown next to
+  -  a checkbox that inverts and un-inverts the profiler's call tree. -->
+<!ENTITY performanceUI.invertTree             "Invert Call Tree">
+<!ENTITY performanceUI.invertTree.tooltiptext "Inverting the call tree displays the profiled call paths starting from the youngest frames and expanding out to the older frames.">
+
+<!-- LOCALIZATION NOTE (performanceUI.invertFlameGraph): This is the label shown next to
+  -  a checkbox that inverts and un-inverts the profiler's flame graph. -->
+<!ENTITY performanceUI.invertFlameGraph             "Invert Flame Chart">
+<!ENTITY performanceUI.invertFlameGraph.tooltiptext "Inverting the flame chart displays the profiled call paths starting from the youngest frames and expanding out to the older frames.">
+
+<!-- LOCALIZATION NOTE (performanceUI.showPlatformData): This is the
+  -  label for the checkbox that toggles whether or not Gecko platform data
+  -  is displayed in the profiler. -->
+<!ENTITY performanceUI.showPlatformData             "Show Gecko Platform Data">
+<!ENTITY performanceUI.showPlatformData.tooltiptext "Showing platform data enables the JavaScript Profiler reports to include Gecko platform symbols.">
+
+<!-- LOCALIZATION NOTE (performanceUI.flattenTreeRecursion): This is the
+  -  label for the checkbox that toggles the flattening of tree recursion in inspected
+  -  functions in the profiler. -->
+<!ENTITY performanceUI.flattenTreeRecursion             "Flatten Tree Recursion">
+<!ENTITY performanceUI.flattenTreeRecursion.tooltiptext "Flatten recursion when inspecting functions.">
+
+<!-- LOCALIZATION NOTE (performanceUI.enableMemory): This string
+  -  is displayed next to a checkbox determining whether or not memory
+  -  measurements are enabled. -->
+<!ENTITY performanceUI.enableMemory             "Record Memory">
+<!ENTITY performanceUI.enableMemory.tooltiptext "Record memory consumption while profiling.">
+
+<!-- LOCALIZATION NOTE (performanceUI.enableAllocations): This string
+  -  is displayed next to a checkbox determining whether or not allocation
+  -  measurements are enabled. -->
+<!ENTITY performanceUI.enableAllocations             "Record Allocations">
+<!ENTITY performanceUI.enableAllocations.tooltiptext "Record Object allocations while profiling.">
+
+<!-- LOCALIZATION NOTE (performanceUI.enableFramerate): This string
+  -  is displayed next to a checkbox determining whether or not framerate
+  -  is recorded. -->
+<!ENTITY performanceUI.enableFramerate             "Record Framerate">
+<!ENTITY performanceUI.enableFramerate.tooltiptext "Record framerate while profiling.">
+
+<!-- LOCALIZATION NOTE (performanceUI.enableJITOptimizations): This string
+  -  is displayed next to a checkbox determining whether or not JIT optimization data
+  -  should be recorded. -->
+<!ENTITY performanceUI.enableJITOptimizations             "Record JIT Optimizations">
+<!ENTITY performanceUI.enableJITOptimizations.tooltiptext "Record JIT optimization data sampled in each JavaScript frame.">
+
+<!-- LOCALIZATION NOTE (performanceUI.JITOptimizationsTitle): This string
+  -  is displayed as the title of the JIT Optimizations panel. -->
+<!ENTITY performanceUI.JITOptimizationsTitle "JIT Optimizations">
+
+<!-- LOCALIZATION NOTE (performanceUI.console.recordingNoticeStart/recordingNoticeEnd):
+  -  This string is displayed when a recording is selected that started via console.profile.
+  -  Wraps the command used to start, like "Currently recording via console.profile("label")" -->
+<!ENTITY performanceUI.console.recordingNoticeStart "Currently recording via">
+<!ENTITY performanceUI.console.recordingNoticeEnd   "">
+
+<!-- LOCALIZATION NOTE (performanceUI.console.stopCommandStart/stopCommandEnd):
+  -  This string is displayed when a recording is selected that started via console.profile.
+  -  Indicates how to stop the recording, wrapping the command, like
+  -  "Stop recording by entering console.profileEnd("label") into the console." -->
+<!ENTITY performanceUI.console.stopCommandStart "Stop recording by entering">
+<!ENTITY performanceUI.console.stopCommandEnd   "into the console.">
new file mode 100644
--- /dev/null
+++ b/browser/locales/en-US/chrome/browser/devtools/performance.properties
@@ -0,0 +1,172 @@
+# 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/.
+
+# LOCALIZATION NOTE These strings are used inside the Performance Tools
+# which is available from the Web Developer sub-menu -> 'Performance'.
+# The correct localization of this file might be to keep it in
+# English, or another language commonly spoken among web developers.
+# You want to make that choice consistent across the developer tools.
+# A good criteria is the language in which you'd find the best
+# documentation on web development on the web.
+
+# LOCALIZATION NOTE (performance.label):
+# This string is displayed in the title of the tab when the profiler is
+# displayed inside the developer tools window and in the Developer Tools Menu.
+performance.label=Performance
+
+# LOCALIZATION NOTE (performance.panelLabel):
+# This is used as the label for the toolbox panel.
+performance.panelLabel=Performance Panel
+
+# LOCALIZATION NOTE (performance.commandkey, performance.accesskey)
+# Used for the menuitem in the tool menu
+performance.commandkey=VK_F5
+performance.accesskey=P
+
+# LOCALIZATION NOTE (performance.tooltip):
+# This string is displayed in the tooltip of the tab when the profiler is
+# displayed inside the developer tools window.
+# Keyboard shortcut for Performance Tools will be shown inside brackets.
+performance.tooltip=Performance (%S)
+
+# LOCALIZATION NOTE (noRecordingsText): The text to display in the
+# recordings menu when there are no recorded profiles yet.
+noRecordingsText=There are no profiles yet.
+
+# LOCALIZATION NOTE (recordingsList.itemLabel):
+# This string is displayed in the recordings list of the Performance Tools,
+# identifying a set of function calls.
+recordingsList.itemLabel=Recording #%S
+
+# LOCALIZATION NOTE (recordingsList.recordingLabel):
+# This string is displayed in the recordings list of the Performance Tools,
+# for an item that has not finished recording.
+recordingsList.recordingLabel=In progress…
+
+# LOCALIZATION NOTE (recordingsList.loadingLabel):
+# This string is displayed in the recordings list of the Performance Tools,
+# for an item that is finished and is loading.
+recordingsList.loadingLabel=Loading…
+
+# LOCALIZATION NOTE (recordingsList.durationLabel):
+# This string is displayed in the recordings list of the Performance Tools,
+# for an item that has finished recording.
+recordingsList.durationLabel=%S ms
+
+# LOCALIZATION NOTE (recordingsList.saveLabel):
+# This string is displayed in the recordings list of the Performance Tools,
+# for saving an item to disk.
+recordingsList.saveLabel=Save
+
+# LOCALIZATION NOTE (graphs.fps):
+# This string is displayed in the framerate graph of the Performance Tools,
+# as the unit used to measure frames per second. This label should be kept
+# AS SHORT AS POSSIBLE so it doesn't obstruct important parts of the graph.
+graphs.fps=fps
+
+# LOCALIZATION NOTE (graphs.ms):
+# This string is displayed in the flamegraph of the Performance Tools,
+# as the unit used to measure time (in milliseconds). This label should be kept
+# AS SHORT AS POSSIBLE so it doesn't obstruct important parts of the graph.
+graphs.ms=ms
+
+# LOCALIZATION NOTE (graphs.memory):
+# This string is displayed in the memory graph of the Performance tool,
+# as the unit used to memory consumption. This label should be kept
+# AS SHORT AS POSSIBLE so it doesn't obstruct important parts of the graph.
+graphs.memory=MB
+
+# LOCALIZATION NOTE (category.*):
+# These strings are displayed in the categories graph of the Performance Tools,
+# as the legend for each block in every bar. These labels should be kept
+# AS SHORT AS POSSIBLE so they don't obstruct important parts of the graph.
+category.other=Gecko
+category.css=Styles
+category.js=JIT
+category.gc=GC
+category.network=Network
+category.graphics=Graphics
+category.storage=Storage
+category.events=Input & Events
+category.tools=Tools
+
+# LOCALIZATION NOTE (table.ms):
+# This string is displayed in the call tree after units of time in milliseconds.
+table.ms=ms
+
+# LOCALIZATION NOTE (table.percentage):
+# This string is displayed in the call tree after units representing percentages.
+table.percentage=%
+
+# LOCALIZATION NOTE (table.root):
+# This string is displayed in the call tree for the root node.
+table.root=(root)
+
+# LOCALIZATION NOTE (table.idle):
+# This string is displayed in the call tree for the idle blocks.
+table.idle=(idle)
+
+# LOCALIZATION NOTE (table.url.tooltiptext):
+# This string is displayed in the call tree as the tooltip text for the url
+# labels which, when clicked, jump to the debugger.
+table.url.tooltiptext=View source in Debugger
+
+# LOCALIZATION NOTE (table.zoom.tooltiptext):
+# This string is displayed in the call tree as the tooltip text for the 'zoom'
+# buttons (small magnifying glass icons) which spawn a new tab.
+table.zoom.tooltiptext=Inspect frame in new tab
+
+# LOCALIZATION NOTE (table.view-optimizations.tooltiptext):
+# This string is displayed in the icon displayed next to frames that
+# have optimization data
+table.view-optimizations.tooltiptext=View optimizations in JIT View
+
+# LOCALIZATION NOTE (recordingsList.importDialogTitle):
+# This string is displayed as a title for importing a recoring from disk.
+recordingsList.importDialogTitle=Import recording…
+
+# LOCALIZATION NOTE (recordingsList.saveDialogTitle):
+# This string is displayed as a title for saving a recording to disk.
+recordingsList.saveDialogTitle=Save recording…
+
+# LOCALIZATION NOTE (recordingsList.saveDialogJSONFilter):
+# This string is displayed as a filter for saving a recording to disk.
+recordingsList.saveDialogJSONFilter=JSON Files
+
+# LOCALIZATION NOTE (recordingsList.saveDialogAllFilter):
+# This string is displayed as a filter for saving a recording to disk.
+recordingsList.saveDialogAllFilter=All Files
+
+# LOCALIZATION NOTE (jit.optimizationFailure):
+# This string is displayed in a tooltip when no JIT optimizations were detected.
+jit.optimizationFailure=Optimization failed
+
+# LOCALIZATION NOTE (jit.samples):
+# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
+# This string is displayed for the unit representing the number of times a
+# frame is sampled.
+# "#1" represents the number of samples
+# example: 30 samples
+jit.samples=#1 sample;#1 samples
+
+# LOCALIZATION NOTE (jit.empty):
+# This string is displayed when there are no JIT optimizations to display.
+jit.empty=No JIT optimizations recorded for this frame.
+
+# LOCALIZATION NOTE (timeline.tick):
+# This string is displayed in the timeline overview, for delimiting ticks
+# by time, in milliseconds.
+timeline.tick=%S ms
+
+# LOCALIZATION NOTE (timeline.records):
+# This string is displayed in the timeline waterfall, as a title for the menu.
+timeline.records=RECORDS
+
+# LOCALIZATION NOTE (profiler.bufferFull):
+# This string is displayed when recording, indicating how much of the
+# buffer is currently be used.
+# %S is the percentage of the buffer used -- there are two "%"s after to escape
+# the % that is actually displayed.
+# Example: "Buffer 54% full"
+profiler.bufferFull=Buffer %S%% full
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/devtools/profiler.dtd
+++ /dev/null
@@ -1,166 +0,0 @@
-<!-- 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/. -->
-
-<!-- LOCALIZATION NOTE : FILE This file contains the Profiler strings -->
-<!-- LOCALIZATION NOTE : FILE Do not translate commandkey -->
-
-<!-- LOCALIZATION NOTE : FILE The correct localization of this file might be to
-  - keep it in English, or another language commonly spoken among web developers.
-  - You want to make that choice consistent across the developer tools.
-  - A good criteria is the language in which you'd find the best
-  - documentation on web development on the web. -->
-
-<!-- LOCALIZATION NOTE (profilerUI.emptyNotice1/2): This is the label shown
-  -  in the call list view when empty. -->
-<!-- TODO remove -->
-<!ENTITY profilerUI.emptyNotice1    "Click on the">
-<!-- TODO remove -->
-<!ENTITY profilerUI.emptyNotice2    "button to start recording JavaScript function calls.">
-
-<!-- LOCALIZATION NOTE (profilerUI.stopNotice1/2): This is the label shown
-  -  in the call list view while recording a profile. -->
-<!-- TODO remove -->
-<!ENTITY profilerUI.stopNotice1    "Click on the">
-<!-- TODO remove -->
-<!ENTITY profilerUI.stopNotice2    "button again to stop profiling.">
-
-<!-- LOCALIZATION NOTE (profilerUI.startRecording/profilerUI.stopRecording): These are
-  -  the labels shown on the main recording buttons to start/stop recording. -->
-<!ENTITY profilerUI.startRecording "Start Recording Performance">
-<!ENTITY profilerUI.stopRecording  "Stop Recording Performance">
-
-<!-- LOCALIZATION NOTE (profilerUI.bufferStatusTooltip): This string
-  -  is displayed as the tooltip for the buffer capacity during a recording. -->
-<!ENTITY profilerUI.bufferStatusTooltip "The profiler stores samples in a circular buffer, and once the buffer reaches the limit for a recording, newer samples begin to overwrite samples at the beginning of the recording.">
-
-<!-- LOCALIZATION NOTE (profilerUI.bufferStatusFull): This string
-  -  is displayed when the profiler's circular buffer has started to overlap. -->
-<!ENTITY profilerUI.bufferStatusFull "The buffer is full. Older samples are now being overwritten.">
-
-<!-- LOCALIZATION NOTE (profilerUI.loadingNotice): This is the label shown
-  -  in the call list view while loading a profile. -->
-<!ENTITY profilerUI.loadingNotice "Loading…">
-
-<!-- LOCALIZATION NOTE (profilerUI.recordButton): This string is displayed
-  -  on a button that starts a new profile. -->
-<!-- TODO remove -->
-<!ENTITY profilerUI.recordButton.tooltip "Record JavaScript function calls.">
-
-<!-- LOCALIZATION NOTE (profilerUI.recordButton2): This string is displayed
-  -  on a button that starts a new profile. -->
-<!ENTITY profilerUI.recordButton2.tooltip "Toggle the recording state of a performance recording.">
-
-<!-- LOCALIZATION NOTE (profilerUI.importButton): This string is displayed
-  -  on a button that opens a dialog to import a saved profile data file. -->
-<!ENTITY profilerUI.importButton "Import…">
-
-<!-- LOCALIZATION NOTE (profilerUI.exportButton): This string is displayed
-  -  on a button that opens a dialog to export a saved profile data file. -->
-<!ENTITY profilerUI.exportButton "Save">
-
-<!-- LOCALIZATION NOTE (profilerUI.clearButton): This string is displayed
-  -  on a button that remvoes all the recordings. -->
-<!ENTITY profilerUI.clearButton "Clear">
-
-<!-- LOCALIZATION NOTE (profilerUI.toolbar.*): These strings are displayed
-  -  in the toolbar on buttons that select which view is currently shown. -->
-<!ENTITY profilerUI.toolbar.waterfall "Timeline">
-<!ENTITY profilerUI.toolbar.js-calltree "JavaScript">
-<!ENTITY profilerUI.toolbar.memory-calltree1 "Allocations">
-<!ENTITY profilerUI.toolbar.js-flamegraph "JS Flame Chart">
-<!ENTITY profilerUI.toolbar.memory-flamegraph1 "Allocations Flame Chart">
-
-<!-- LOCALIZATION NOTE (profilerUI.table.*): These strings are displayed
-  -  in the call tree headers for a recording. -->
-<!ENTITY profilerUI.table.totalDuration2           "Total Time">
-<!ENTITY profilerUI.table.totalDuration.tooltip    "The amount of time spent in this function and functions it calls.">
-<!ENTITY profilerUI.table.selfDuration2            "Self Time">
-<!ENTITY profilerUI.table.selfDuration.tooltip     "The amount of time spent only within this function.">
-<!ENTITY profilerUI.table.totalPercentage          "Total Cost">
-<!ENTITY profilerUI.table.totalPercentage.tooltip  "The percentage of time spent in this function and functions it calls.">
-<!ENTITY profilerUI.table.selfPercentage           "Self Cost">
-<!ENTITY profilerUI.table.selfPercentage.tooltip   "The percentage of time spent only within this function.">
-<!ENTITY profilerUI.table.samples                  "Samples">
-<!ENTITY profilerUI.table.samples.tooltip          "The number of times this function was on the stack when the profiler took a sample.">
-<!ENTITY profilerUI.table.function                 "Function">
-<!ENTITY profilerUI.table.function.tooltip         "The name and source location of the sampled function.">
-<!ENTITY profilerUI.table.totalAlloc1              "Total Sampled Allocations">
-<!ENTITY profilerUI.table.totalAlloc.tooltip       "The total number of Object allocations sampled at this location and in callees.">
-<!ENTITY profilerUI.table.selfAlloc1               "Self Sampled Allocations">
-<!ENTITY profilerUI.table.selfAlloc.tooltip        "The number of Object allocations sampled at this location.">
-
-<!-- LOCALIZATION NOTE (profilerUI.newtab.tooltiptext): The tooltiptext shown
-  -  on the "+" (new tab) button for a profile when a selection is available. -->
-<!ENTITY profilerUI.newtab.tooltiptext "Add new tab from selection">
-
-<!-- LOCALIZATION NOTE (profilerUI.toolbar.filter.tooltiptext): This string
-  -  is displayed next to the filter button-->
-<!ENTITY profilerUI.options.filter.tooltiptext "Select what data to display in the timeline">
-
-<!-- LOCALIZATION NOTE (profilerUI.options.tooltiptext): This is the tooltip
-  -  for the options button. -->
-<!ENTITY profilerUI.options.gear.tooltiptext "Configure performance preferences.">
-
-<!-- LOCALIZATION NOTE (profilerUI.invertTree): This is the label shown next to
-  -  a checkbox that inverts and un-inverts the profiler's call tree. -->
-<!ENTITY profilerUI.invertTree             "Invert Call Tree">
-<!ENTITY profilerUI.invertTree.tooltiptext "Inverting the call tree displays the profiled call paths starting from the youngest frames and expanding out to the older frames.">
-
-<!-- LOCALIZATION NOTE (profilerUI.invertFlameGraph): This is the label shown next to
-  -  a checkbox that inverts and un-inverts the profiler's flame graph. -->
-<!ENTITY profilerUI.invertFlameGraph             "Invert Flame Chart">
-<!ENTITY profilerUI.invertFlameGraph.tooltiptext "Inverting the flame chart displays the profiled call paths starting from the youngest frames and expanding out to the older frames.">
-
-<!-- LOCALIZATION NOTE (profilerUI.showPlatformData): This is the
-  -  label for the checkbox that toggles whether or not Gecko platform data
-  -  is displayed in the profiler. -->
-<!ENTITY profilerUI.showPlatformData             "Show Gecko Platform Data">
-<!ENTITY profilerUI.showPlatformData.tooltiptext "Showing platform data enables the JavaScript Profiler reports to include Gecko platform symbols.">
-
-<!-- LOCALIZATION NOTE (profilerUI.flattenTreeRecursion): This is the
-  -  label for the checkbox that toggles the flattening of tree recursion in inspected
-  -  functions in the profiler. -->
-<!ENTITY profilerUI.flattenTreeRecursion             "Flatten Tree Recursion">
-<!ENTITY profilerUI.flattenTreeRecursion.tooltiptext "Flatten recursion when inspecting functions.">
-
-<!-- LOCALIZATION NOTE (profilerUI.enableMemory): This string
-  -  is displayed next to a checkbox determining whether or not memory
-  -  measurements are enabled. -->
-<!ENTITY profilerUI.enableMemory             "Record Memory">
-<!ENTITY profilerUI.enableMemory.tooltiptext "Record memory consumption while profiling.">
-
-<!-- LOCALIZATION NOTE (profilerUI.enableAllocations): This string
-  -  is displayed next to a checkbox determining whether or not allocation
-  -  measurements are enabled. -->
-<!ENTITY profilerUI.enableAllocations             "Record Allocations">
-<!ENTITY profilerUI.enableAllocations.tooltiptext "Record Object allocations while profiling.">
-
-<!-- LOCALIZATION NOTE (profilerUI.enableFramerate): This string
-  -  is displayed next to a checkbox determining whether or not framerate
-  -  is recorded. -->
-<!ENTITY profilerUI.enableFramerate             "Record Framerate">
-<!ENTITY profilerUI.enableFramerate.tooltiptext "Record framerate while profiling.">
-
-<!-- LOCALIZATION NOTE (profilerUI.enableJITOptimizations): This string
-  -  is displayed next to a checkbox determining whether or not JIT optimization data
-  -  should be recorded. -->
-<!ENTITY profilerUI.enableJITOptimizations             "Record JIT Optimizations">
-<!ENTITY profilerUI.enableJITOptimizations.tooltiptext "Record JIT optimization data sampled in each JavaScript frame.">
-
-<!-- LOCALIZATION NOTE (profilerUI.JITOptimizationsTitle): This string
-  -  is displayed as the title of the JIT Optimizations panel. -->
-<!ENTITY profilerUI.JITOptimizationsTitle "JIT Optimizations">
-
-<!-- LOCALIZATION NOTE (profilerUI.console.recordingNoticeStart/recordingNoticeEnd):
-  -  This string is displayed when a recording is selected that started via console.profile.
-  -  Wraps the command used to start, like "Currently recording via console.profile("label")" -->
-<!ENTITY profilerUI.console.recordingNoticeStart "Currently recording via">
-<!ENTITY profilerUI.console.recordingNoticeEnd   "">
-
-<!-- LOCALIZATION NOTE (profilerUI.console.stopCommandStart/stopCommandEnd):
-  -  This string is displayed when a recording is selected that started via console.profile.
-  -  Indicates how to stop the recording, wrapping the command, like
-  -  "Stop recording by entering console.profilEnd("label") into the console." -->
-<!ENTITY profilerUI.console.stopCommandStart "Stop recording by entering">
-<!ENTITY profilerUI.console.stopCommandEnd   "into the console.">
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/devtools/profiler.properties
+++ /dev/null
@@ -1,157 +0,0 @@
-# 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/.
-
-# LOCALIZATION NOTE These strings are used inside the Profiler
-# which is available from the Web Developer sub-menu -> 'Profiler'.
-# The correct localization of this file might be to keep it in
-# English, or another language commonly spoken among web developers.
-# You want to make that choice consistent across the developer tools.
-# A good criteria is the language in which you'd find the best
-# documentation on web development on the web.
-
-# LOCALIZATION NOTE (profiler.label):
-# This string is displayed in the title of the tab when the profiler is
-# displayed inside the developer tools window and in the Developer Tools Menu.
-profiler.label2=Performance
-
-# LOCALIZATION NOTE (profiler.panelLabel):
-# This is used as the label for the toolbox panel.
-profiler.panelLabel2=Performance Panel
-
-# LOCALIZATION NOTE (profiler2.commandkey, profiler.accesskey)
-# Used for the menuitem in the tool menu
-profiler.commandkey2=VK_F5
-profiler.accesskey=P
-
-# LOCALIZATION NOTE (profiler.tooltip3):
-# This string is displayed in the tooltip of the tab when the profiler is
-# displayed inside the developer tools window.
-# Keyboard shortcut for JS Profiler will be shown inside brackets.
-profiler.tooltip3=JavaScript Profiler (%S)
-
-# LOCALIZATION NOTE (noRecordingsText): The text to display in the
-# recordings menu when there are no recorded profiles yet.
-noRecordingsText=There are no profiles yet.
-
-# LOCALIZATION NOTE (recordingsList.itemLabel):
-# This string is displayed in the recordings list of the Profiler,
-# identifying a set of function calls.
-recordingsList.itemLabel=Recording #%S
-
-# LOCALIZATION NOTE (recordingsList.recordingLabel):
-# This string is displayed in the recordings list of the Profiler,
-# for an item that has not finished recording.
-recordingsList.recordingLabel=In progress…
-
-# LOCALIZATION NOTE (recordingsList.durationLabel):
-# This string is displayed in the recordings list of the Profiler,
-# for an item that has finished recording.
-recordingsList.durationLabel=%S ms
-
-# LOCALIZATION NOTE (recordingsList.saveLabel):
-# This string is displayed in the recordings list of the Profiler,
-# for saving an item to disk.
-recordingsList.saveLabel=Save
-
-# LOCALIZATION NOTE (profile.tab):
-# This string is displayed in the profile view for a tab, after the
-# recording has finished, as the recording 'start → stop' range in milliseconds.
-profile.tab=%1$S ms → %2$S ms
-
-# LOCALIZATION NOTE (graphs.fps):
-# This string is displayed in the framerate graph of the Profiler,
-# as the unit used to measure frames per second. This label should be kept
-# AS SHORT AS POSSIBLE so it doesn't obstruct important parts of the graph.
-graphs.fps=fps
-
-# LOCALIZATION NOTE (graphs.ms):
-# This string is displayed in the flamegraph of the Profiler,
-# as the unit used to measure time (in milliseconds). This label should be kept
-# AS SHORT AS POSSIBLE so it doesn't obstruct important parts of the graph.
-graphs.ms=ms
-
-# LOCALIZATION NOTE (category.*):
-# These strings are displayed in the categories graph of the Profiler,
-# as the legend for each block in every bar. These labels should be kept
-# AS SHORT AS POSSIBLE so they don't obstruct important parts of the graph.
-category.other=Gecko
-category.css=Styles
-category.js=JIT
-category.gc=GC
-category.network=Network
-category.graphics=Graphics
-category.storage=Storage
-category.events=Input & Events
-category.tools=Tools
-
-# LOCALIZATION NOTE (graphs.ms):
-# This string is displayed in the call tree after units of time in milliseconds.
-table.ms=ms
-
-# LOCALIZATION NOTE (graphs.ms):
-# This string is displayed in the call tree after units representing percentages.
-table.percentage=%
-
-# LOCALIZATION NOTE (table.root):
-# This string is displayed in the call tree for the root node.
-table.root=(root)
-
-# LOCALIZATION NOTE (table.idle):
-# This string is displayed in the call tree for the idle blocks.
-table.idle=(idle)
-
-# LOCALIZATION NOTE (table.url.tooltiptext):
-# This string is displayed in the call tree as the tooltip text for the url
-# labels which, when clicked, jump to the debugger.
-table.url.tooltiptext=View source in Debugger
-
-# LOCALIZATION NOTE (table.zoom.tooltiptext):
-# This string is displayed in the call tree as the tooltip text for the 'zoom'
-# buttons (small magnifying glass icons) which spawn a new tab.
-table.zoom.tooltiptext=Inspect frame in new tab
-
-# LOCALIZATION NOTE (table.view-optimizations.tooltiptext):
-# This string is displayed in the icon displayed next to frames that
-# have optimization data
-table.view-optimizations.tooltiptext=View optimizations in JIT View
-
-
-# LOCALIZATION NOTE (recordingsList.saveDialogTitle):
-# This string is displayed as a title for saving a recording to disk.
-recordingsList.saveDialogTitle=Save profile…
-
-# LOCALIZATION NOTE (recordingsList.saveDialogJSONFilter):
-# This string is displayed as a filter for saving a recording to disk.
-recordingsList.saveDialogJSONFilter=JSON Files
-
-# LOCALIZATION NOTE (recordingsList.saveDialogAllFilter):
-# This string is displayed as a filter for saving a recording to disk.
-recordingsList.saveDialogAllFilter=All Files
-
-# LOCALIZATION NOTE (jit.optimizationFailure):
-# This string is displayed in a tooltip when no JIT optimizations were detected.
-jit.optimizationFailure=Optimization failed
-
-# LOCALIZATION NOTE (jit.samples2):
-# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
-# This string is displayed for the unit representing the number of times a
-# frame is sampled.
-# "#1" represents the number of samples
-# example: 30 samples
-jit.samples2=#1 sample;#1 samples
-
-# LOCALIZATION NOTE (jit.empty):
-# This string is displayed when there are no JIT optimizations to display.
-jit.empty=No JIT optimizations recorded for this frame.
-
-# LOCALIZATION NOTE (consoleProfile.recordingNotice/stopCommand):
-# These strings are displayed when a recording is in progress, that was started from the console.
-# TODO REMOVE
-consoleProfile.recordingNotice=Currently recording profile "%S".
-# TODO REMOVE
-consoleProfile.stopCommand=Stop profiling by typing \"console.profileEnd(\'%S\')\" into the console.
-
-# LOCALIZATION NOTE (profiler.bufferStatus):
-# This string is displayed illustrating how full the profiler's circular buffer is.
-profiler.bufferStatus=Buffer capacity: %S%
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/devtools/timeline.dtd
+++ /dev/null
@@ -1,43 +0,0 @@
-<!-- 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/. -->
-
-<!-- LOCALIZATION NOTE : FILE This file contains the Timeline strings -->
-<!-- LOCALIZATION NOTE : FILE Do not translate commandkey -->
-
-<!-- LOCALIZATION NOTE : FILE The correct localization of this file might be to
-  - keep it in English, or another language commonly spoken among web developers.
-  - You want to make that choice consistent across the developer tools.
-  - A good criteria is the language in which you'd find the best
-  - documentation on web development on the web. -->
-
-<!-- LOCALIZATION NOTE (timelineUI.recordButton): This string is displayed
-  -  on a button that starts a new recording. -->
-<!ENTITY timelineUI.recordButton.tooltip "Record timeline operations">
-
-<!-- LOCALIZATION NOTE (timelineUI.recordLabel): This string is displayed
-  -  as a label to signal that a recording is in progress. -->
-<!ENTITY timelineUI.recordLabel "Recording…">
-
-<!-- LOCALIZATION NOTE (timelineUI.memoryCheckbox.label): This string
-  -  is displayed next to a checkbox determining whether or not memory
-  -  measurements are enabled. -->
-<!ENTITY timelineUI.memoryCheckbox.label "Memory">
-
-<!-- LOCALIZATION NOTE (timelineUI.memoryCheckbox.tooltip): This string
-  -  is displayed next to the memory checkbox -->
-<!ENTITY timelineUI.memoryCheckbox.tooltip "Enable memory measurements">
-
-<!-- LOCALIZATION NOTE (timelineUI.filterButton.tooltip): This string
-  -  is displayed next to the filter button-->
-<!ENTITY timelineUI.filterButton.tooltip "Select what data to display">
-
-<!-- LOCALIZATION NOTE (timelineUI.emptyNotice1/2): This is the label shown
-  -  in the timeline view when empty. -->
-<!ENTITY timelineUI.emptyNotice1    "Click on the">
-<!ENTITY timelineUI.emptyNotice2    "button to start recording timeline events.">
-
-<!-- LOCALIZATION NOTE (timelineUI.stopNotice1/2): This is the label shown
-  -  in the timeline view while recording. -->
-<!ENTITY timelineUI.stopNotice1    "Click on the">
-<!ENTITY timelineUI.stopNotice2    "button again to stop recording.">
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/devtools/timeline.properties
+++ /dev/null
@@ -1,79 +0,0 @@
-# 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/.
-
-# LOCALIZATION NOTE These strings are used inside the Timeline
-# which is available from the Web Developer sub-menu -> 'Timeline'.
-# The correct localization of this file might be to keep it in
-# English, or another language commonly spoken among web developers.
-# You want to make that choice consistent across the developer tools.
-# A good criteria is the language in which you'd find the best
-# documentation on web development on the web.
-
-# LOCALIZATION NOTE (timeline.label):
-# This string is displayed in the title of the tab when the timeline is
-# displayed inside the developer tools window and in the Developer Tools Menu.
-timeline.label=Timeline
-
-# LOCALIZATION NOTE (timeline.panelLabel):
-# This is used as the label for the toolbox panel.
-timeline.panelLabel=Timeline Panel
-
-# LOCALIZATION NOTE (timeline.tooltip):
-# This string is displayed in the tooltip of the tab when the timeline is
-# displayed inside the developer tools window.
-timeline.tooltip=Performance Timeline
-
-# LOCALIZATION NOTE (timeline.tick):
-# This string is displayed in the timeline overview, for delimiting ticks
-# by time, in milliseconds.
-timeline.tick=%S ms
-
-# LOCALIZATION NOTE (timeline.records):
-# This string is displayed in the timeline waterfall, as a title for the menu.
-timeline.records=RECORDS
-
-# LOCALIZATION NOTE (timeline.label.*):
-# These strings are displayed in the timeline waterfall, identifying markers.
-# We want to use the same wording as Google Chrome
-timeline.label.styles2=Recalculate Style
-timeline.label.reflow2=Layout
-timeline.label.paint=Paint
-timeline.label.javascript2=Function Call
-timeline.label.parseHTML=Parse HTML
-timeline.label.parseXML=Parse XML
-timeline.label.domevent=DOM Event
-timeline.label.consoleTime=Console
-timeline.label.garbageCollection=GC Event
-timeline.label.timestamp=Timestamp
-timeline.label.unknown=Unknown
-
-# LOCALIZATION NOTE (graphs.memory):
-# This string is displayed in the memory graph of the Performance tool,
-# as the unit used to memory consumption. This label should be kept
-# AS SHORT AS POSSIBLE so it doesn't obstruct important parts of the graph.
-graphs.memory=MB
-
-# LOCALIZATION NOTE (timeline.markerDetailFormat):
-# Some timeline markers come with details, like a size, a name, a js function.
-# %1$S is replaced with one of the above label (timeline.label.*) and %2$S
-# with the details. For examples: Paint (200x100), or console.time (FOO)
-timeline.markerDetailFormat=%1$S (%2$S)
-
-# LOCALIZATION NOTE (time.markerDetail.*):
-# Strings used in the waterfall sidebar.
-timeline.markerDetail.start=Start:
-timeline.markerDetail.end=End:
-timeline.markerDetail.duration=Duration:
-timeline.markerDetail.consoleTimerName=Timer Name:
-timeline.markerDetail.DOMEventType=Event Type:
-timeline.markerDetail.DOMEventPhase=Phase:
-timeline.markerDetail.DOMEventTargetPhase=Target
-timeline.markerDetail.DOMEventCapturingPhase=Capture
-timeline.markerDetail.DOMEventBubblingPhase=Bubbling
-timeline.markerDetail.stack=Stack:
-timeline.markerDetail.startStack=Stack at start:
-timeline.markerDetail.endStack=Stack at end:
-timeline.markerDetail.unknownFrame=<unknown location>
-timeline.markerDetail.asyncStack=(Async: %S)
-timeline.markerDetail.causeName=Cause:
--- a/browser/locales/jar.mn
+++ b/browser/locales/jar.mn
@@ -54,27 +54,26 @@
     locale/browser/devtools/storage.properties        (%chrome/browser/devtools/storage.properties)
     locale/browser/devtools/styleeditor.properties    (%chrome/browser/devtools/styleeditor.properties)
     locale/browser/devtools/styleeditor.dtd           (%chrome/browser/devtools/styleeditor.dtd)
     locale/browser/devtools/styleinspector.dtd        (%chrome/browser/devtools/styleinspector.dtd)
     locale/browser/devtools/webConsole.dtd            (%chrome/browser/devtools/webConsole.dtd)
     locale/browser/devtools/VariablesView.dtd         (%chrome/browser/devtools/VariablesView.dtd)
     locale/browser/devtools/sourceeditor.properties   (%chrome/browser/devtools/sourceeditor.properties)
     locale/browser/devtools/sourceeditor.dtd          (%chrome/browser/devtools/sourceeditor.dtd)
-    locale/browser/devtools/profiler.dtd              (%chrome/browser/devtools/profiler.dtd)
-    locale/browser/devtools/profiler.properties       (%chrome/browser/devtools/profiler.properties)
     locale/browser/devtools/promisedebugger.dtd       (%chrome/browser/devtools/promisedebugger.dtd)
     locale/browser/devtools/promisedebugger.properties  (%chrome/browser/devtools/promisedebugger.properties)
+    locale/browser/devtools/performance.dtd           (%chrome/browser/devtools/performance.dtd)
+    locale/browser/devtools/performance.properties    (%chrome/browser/devtools/performance.properties)
     locale/browser/devtools/layoutview.dtd            (%chrome/browser/devtools/layoutview.dtd)
     locale/browser/devtools/responsiveUI.properties   (%chrome/browser/devtools/responsiveUI.properties)
     locale/browser/devtools/toolbox.dtd            (%chrome/browser/devtools/toolbox.dtd)
     locale/browser/devtools/toolbox.properties     (%chrome/browser/devtools/toolbox.properties)
     locale/browser/devtools/inspector.dtd          (%chrome/browser/devtools/inspector.dtd)
-    locale/browser/devtools/timeline.dtd           (%chrome/browser/devtools/timeline.dtd)
-    locale/browser/devtools/timeline.properties    (%chrome/browser/devtools/timeline.properties)
+    locale/browser/devtools/markers.properties     (%chrome/browser/devtools/markers.properties)
     locale/browser/devtools/projecteditor.properties     (%chrome/browser/devtools/projecteditor.properties)
     locale/browser/devtools/eyedropper.properties     (%chrome/browser/devtools/eyedropper.properties)
     locale/browser/devtools/connection-screen.dtd  (%chrome/browser/devtools/connection-screen.dtd)
     locale/browser/devtools/connection-screen.properties (%chrome/browser/devtools/connection-screen.properties)
     locale/browser/devtools/font-inspector.dtd     (%chrome/browser/devtools/font-inspector.dtd)
     locale/browser/devtools/har.properties         (%chrome/browser/devtools/har.properties)
     locale/browser/devtools/app-manager.dtd        (%chrome/browser/devtools/app-manager.dtd)
     locale/browser/devtools/app-manager.properties (%chrome/browser/devtools/app-manager.properties)