diff --git a/docs-developer/CHANGELOG-formats.md b/docs-developer/CHANGELOG-formats.md index 50da5c96d4..e07d501aa6 100644 --- a/docs-developer/CHANGELOG-formats.md +++ b/docs-developer/CHANGELOG-formats.md @@ -6,6 +6,27 @@ Note that this is not an exhaustive list. Processed profile format upgraders can ## Processed profile format +### Version 64 + +A new `SourceLocationTable` has been added to `profile.shared.sourceLocationTable`. It holds the original (pre-compilation) source positions produced by source map symbolication, paired with the generated `line`/`column` already on `FrameTable`. + +- `source: IndexIntoSourceTable[]`: source file index. Set independently for func entries (the function's definition file) and frame entries (the execution point's file). +- `line: number[]`: 1-based line number +- `column: number[]`: 1-based column number + +Two new columns were added that index into this table: + +- `FrameTable.originalLocation: Array`: the original execution point for the frame +- `FuncTable.originalLocation: Array`: the original definition site for the function + +A new `content: Array` column was added to `SourceTable`. + +### Version 63 + +A new `tooltipRows` field was added to `CounterDisplayConfig`. +This metadata describes the rows of the counter's hover tooltip (data source, value format, label). +For existing profiles, the rows are derived from the counter's `category` and `name`. + ### Version 62 A new `display` field of type `CounterDisplayConfig` was added to `RawCounter`. diff --git a/jest.config.js b/jest.config.js index 3b89ea2c4e..cd2c9ea6d6 100644 --- a/jest.config.js +++ b/jest.config.js @@ -18,7 +18,7 @@ const browserEnvConfig = { // Transform ESM modules to CommonJS for Jest // These packages ship as pure ESM and need to be transformed by Babel transformIgnorePatterns: [ - '/node_modules/(?!(query-string|decode-uri-component|iongraph-web|split-on-first|filter-obj|fetch-mock|devtools-reps)/)', + '/node_modules/(?!(query-string|decode-uri-component|iongraph-web|split-on-first|filter-obj|fetch-mock|devtools-reps|json-slabs|commander)/)', ], // Mock static assets (images, CSS, etc.) @@ -30,6 +30,7 @@ const browserEnvConfig = { globals: { AVAILABLE_STAGING_LOCALES: null, + SOURCE_MAP_WORKER_PATH: 'src/test/fixtures/source-map.worker.stub.js', }, snapshotFormat: { diff --git a/locales/be/app.ftl b/locales/be/app.ftl index 7374ee5854..454393e848 100644 --- a/locales/be/app.ftl +++ b/locales/be/app.ftl @@ -253,16 +253,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Паведаміце пра памылку на GitHub -## Footer Links - -FooterLinks--legal = Прававыя звесткі -FooterLinks--Privacy = Прыватнасць -FooterLinks--Cookies = Кукі -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Налады +SettingsMenu--docs = Дакументацыя +SettingsMenu--legal = Прававыя звесткі +SettingsMenu--privacy = Прыватнасць +SettingsMenu--cookies = Кукі +SettingsMenu--language-switcher = .title = Змяніць мову -FooterLinks--hide-button = - .title = Схаваць спасылкі ў ніжнім калонтытуле - .aria-label = Схаваць спасылкі ў ніжнім калонтытуле ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -469,7 +470,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Памылка запампоўкі MenuButtons--index--revert = Вярнуцца да зыходнага профілю -MenuButtons--index--docs = Дакументы MenuButtons--permalink--button = .label = Пастаянная спасылка @@ -850,15 +850,6 @@ TrackNameButton--hide-track = TrackNameButton--hide-process = .title = Схаваць працэс -## TrackMemoryGraph -## This is used to show the memory graph of that process in the timeline part of -## the UI. To learn more about it, visit: -## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track - -TrackMemoryGraph--relative-memory-at-this-time = адносная памяць на гэты момант -TrackMemoryGraph--memory-range-in-graph = дыяпазон памяці ў графіку -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = размеркаванні і вызваленні з моманту папярэдняга ўзору - ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, ## graphed over time. @@ -1109,6 +1100,12 @@ BottomBox--assembly-code-not-available-title = Код асэмблера нед # Elements: # link text - A link to the github issue about supported scenarios. BottomBox--assembly-code-not-available-text = Глядзіце абмеркаванне #4520 каб даведацца аб сцэнарыях, якія падтрымліваюцца, і запланаваных паляпшэннях. +# The toggle button for making the bottom box fullscreen. +BottomBox--hide-fullscreen = + .title = Выйсці з поўнага экрана +# The toggle button for making the bottom box fullscreen. +BottomBox--show-fullscreen = + .title = Увесь экран SourceView--close-button = .title = Закрыць акно з кодам diff --git a/locales/de/app.ftl b/locales/de/app.ftl index 2105e61eb7..85f964073f 100644 --- a/locales/de/app.ftl +++ b/locales/de/app.ftl @@ -283,16 +283,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Melden Sie den Fehler auf GitHub -## Footer Links - -FooterLinks--legal = Rechtliches -FooterLinks--Privacy = Datenschutz -FooterLinks--Cookies = Cookies -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Einstellungen +SettingsMenu--docs = Dokumentation +SettingsMenu--legal = Rechtliches +SettingsMenu--privacy = Datenschutz +SettingsMenu--cookies = Cookies +SettingsMenu--language-switcher = .title = Sprache ändern -FooterLinks--hide-button = - .title = Fußzeilen-Links ausblenden - .aria-label = Fußzeilen-Links ausblenden ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -499,7 +500,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Fehler beim Hochladen MenuButtons--index--revert = Auf Originalprofil zurücksetzen -MenuButtons--index--docs = Dokumentation MenuButtons--permalink--button = .label = Permalink @@ -867,9 +867,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = Relativer Speicherverbrauch zu diesem Zeitpunkt -TrackMemoryGraph--memory-range-in-graph = Speicherbereich im Diagramm -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = Allokationen und Aufhebungen von Allokationen seit der vorherigen Stichprobe +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = aktueller Speicherbedarf +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = Speicherbereich im Diagramm +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = Zuweisungen und Freigaben seit der letzten Stichprobe + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -916,6 +933,11 @@ TrackPower--tooltip-average-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = Durchschnittliche Leistung in der aktuellen Auswahl +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } μW + .label = Durchschnittliche Leistung in der aktuellen Auswahl # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/el/app.ftl b/locales/el/app.ftl index 80e5033b98..5f879431ee 100644 --- a/locales/el/app.ftl +++ b/locales/el/app.ftl @@ -293,16 +293,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Αναφορά σφάλματος στο GitHub -## Footer Links - -FooterLinks--legal = Νομικά -FooterLinks--Privacy = Απόρρητο -FooterLinks--Cookies = Cookie -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Ρυθμίσεις +SettingsMenu--docs = Τεκμηρίωση +SettingsMenu--legal = Νομικά +SettingsMenu--privacy = Απόρρητο +SettingsMenu--cookies = Cookie +SettingsMenu--language-switcher = .title = Αλλαγή γλώσσας -FooterLinks--hide-button = - .title = Απόκρυψη συνδέσμων υποσέλιδου - .aria-label = Απόκρυψη συνδέσμων υποσέλιδου ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -518,7 +519,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Σφάλμα μεταφόρτωσης MenuButtons--index--revert = Επιστροφή στο αρχικό προφίλ -MenuButtons--index--docs = Έγγραφα MenuButtons--permalink--button = .label = Μόνιμος σύνδεσμος @@ -886,9 +886,22 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = σχετική μνήμη αυτήν τη στιγμή -TrackMemoryGraph--memory-range-in-graph = εύρος μνήμης στο γράφημα -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = κατανομές και αποδεσμεύσεις από το προηγούμενο δείγμα +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = σχετική μνήμη τη συγκεκριμένη στιγμή +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = εύρος μνήμης στο γράφημα + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, diff --git a/locales/en-CA/app.ftl b/locales/en-CA/app.ftl index 34fdc5de95..bcd9d98ebb 100644 --- a/locales/en-CA/app.ftl +++ b/locales/en-CA/app.ftl @@ -297,16 +297,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Report the error on GitHub -## Footer Links - -FooterLinks--legal = Legal -FooterLinks--Privacy = Privacy -FooterLinks--Cookies = Cookies -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Settings +SettingsMenu--docs = Documentation +SettingsMenu--legal = Legal +SettingsMenu--privacy = Privacy +SettingsMenu--cookies = Cookies +SettingsMenu--language-switcher = .title = Change language -FooterLinks--hide-button = - .title = Hide footer links - .aria-label = Hide footer links ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -523,7 +524,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Error uploading MenuButtons--index--revert = Revert to Original Profile -MenuButtons--index--docs = Docs MenuButtons--permalink--button = .label = Permalink @@ -891,9 +891,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = relative memory at this time -TrackMemoryGraph--memory-range-in-graph = memory range in graph -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = allocations and deallocations since the previous sample +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = relative memory at this time +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = memory range in graph +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = allocations and deallocations since the previous sample + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -940,6 +957,11 @@ TrackPower--tooltip-average-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = Average power in the current selection +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } μW + .label = Average power in the current selection # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/en-GB/app.ftl b/locales/en-GB/app.ftl index 35cabc04bc..7ea46c3eba 100644 --- a/locales/en-GB/app.ftl +++ b/locales/en-GB/app.ftl @@ -297,16 +297,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Report the error on GitHub -## Footer Links - -FooterLinks--legal = Legal -FooterLinks--Privacy = Privacy -FooterLinks--Cookies = Cookies -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Settings +SettingsMenu--docs = Documentation +SettingsMenu--legal = Legal +SettingsMenu--privacy = Privacy +SettingsMenu--cookies = Cookies +SettingsMenu--language-switcher = .title = Change language -FooterLinks--hide-button = - .title = Hide footer links - .aria-label = Hide footer links ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -523,7 +524,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Error uploading MenuButtons--index--revert = Revert to Original Profile -MenuButtons--index--docs = Docs MenuButtons--permalink--button = .label = Permalink @@ -891,9 +891,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = relative memory at this time -TrackMemoryGraph--memory-range-in-graph = memory range in graph -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = allocations and deallocations since the previous sample +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = relative memory at this time +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = memory range in graph +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = allocations and deallocations since the previous sample + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -940,6 +957,11 @@ TrackPower--tooltip-average-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = Average power in the current selection +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } μW + .label = Average power in the current selection # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/en-US/app.ftl b/locales/en-US/app.ftl index be577ee3a9..5625f479b5 100644 --- a/locales/en-US/app.ftl +++ b/locales/en-US/app.ftl @@ -315,16 +315,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Report the error on GitHub -## Footer Links - -FooterLinks--legal = Legal -FooterLinks--Privacy = Privacy -FooterLinks--Cookies = Cookies -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Settings +SettingsMenu--docs = Documentation +SettingsMenu--legal = Legal +SettingsMenu--privacy = Privacy +SettingsMenu--cookies = Cookies +SettingsMenu--language-switcher = .title = Change language -FooterLinks--hide-button = - .title = Hide footer links - .aria-label = Hide footer links ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -576,7 +577,6 @@ MenuButtons--index--share-error-uploading = .label = Error uploading MenuButtons--index--revert = Revert to Original Profile -MenuButtons--index--docs = Docs MenuButtons--permalink--button = .label = Permalink @@ -964,9 +964,28 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = relative memory at this time -TrackMemoryGraph--memory-range-in-graph = memory range in graph -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = allocations and deallocations since the previous sample +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = relative memory at this time + +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = memory range in graph + +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = allocations and deallocations since the previous sample + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -1020,6 +1039,12 @@ TrackPower--tooltip-average-power-watt = { $value } W TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = Average power in the current selection +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } μW + .label = Average power in the current selection + # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/es-CL/app.ftl b/locales/es-CL/app.ftl index 3ce7d24832..f14e73b5ff 100644 --- a/locales/es-CL/app.ftl +++ b/locales/es-CL/app.ftl @@ -239,16 +239,17 @@ ErrorBoundary--report-error-to-developers-description = Por favor, reporta este # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Reportar el error en GitHub -## Footer Links - -FooterLinks--legal = Legal -FooterLinks--Privacy = Privacidad -FooterLinks--Cookies = Cookies -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Ajustes +SettingsMenu--docs = Documentación +SettingsMenu--legal = Legal +SettingsMenu--privacy = Privacidad +SettingsMenu--cookies = Cookies +SettingsMenu--language-switcher = .title = Cambiar idioma -FooterLinks--hide-button = - .title = Ocultar enlaces de pie de página - .aria-label = Ocultar enlaces de pie de página ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -446,7 +447,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Error al subir MenuButtons--index--revert = Revertir al perfil original -MenuButtons--index--docs = Docs MenuButtons--permalink--button = .label = Enlace permanente @@ -810,9 +810,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = memoria relativa en este momento -TrackMemoryGraph--memory-range-in-graph = rango de memoria en un gráfico -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = Asignaciones y desasignaciones desde la muestra anterior +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = memoria relativa en este momento +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = rango de memoria en gráfico +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = asignaciones y desasignaciones desde la muestra anterior + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -859,6 +876,11 @@ TrackPower--tooltip-average-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = Consumo promedio en la selección actual +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } μW + .label = Consumo (potencia) promedio en la selección actual # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/fr/app.ftl b/locales/fr/app.ftl index 7ce07dbd55..e96cdee9a3 100644 --- a/locales/fr/app.ftl +++ b/locales/fr/app.ftl @@ -224,16 +224,17 @@ ErrorBoundary--report-error-to-developers-description = Merci de signaler ce pro # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Signaler l’erreur sur GitHub -## Footer Links - -FooterLinks--legal = Mentions légales -FooterLinks--Privacy = Confidentialité -FooterLinks--Cookies = Cookies -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Paramètres +SettingsMenu--docs = Documentation +SettingsMenu--legal = Mentions légales +SettingsMenu--privacy = Vie privée +SettingsMenu--cookies = Cookies +SettingsMenu--language-switcher = .title = Changer de langue -FooterLinks--hide-button = - .title = Masquer les liens de pied de page - .aria-label = Masquer les liens de pied de page ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -436,7 +437,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Erreur lors de l’envoi MenuButtons--index--revert = Revenir au profil d’origine -MenuButtons--index--docs = Documentation MenuButtons--permalink--button = .label = Lien permanent @@ -791,15 +791,6 @@ TrackNameButton--hide-track = TrackNameButton--hide-process = .title = Masquer le processus -## TrackMemoryGraph -## This is used to show the memory graph of that process in the timeline part of -## the UI. To learn more about it, visit: -## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track - -TrackMemoryGraph--relative-memory-at-this-time = mémoire relative à ce moment -TrackMemoryGraph--memory-range-in-graph = plage mémoire dans le graphique -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = allocations et désallocations depuis l’échantillon précédent - ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, ## graphed over time. diff --git a/locales/fur/app.ftl b/locales/fur/app.ftl index 947ff4f720..2f3c985016 100644 --- a/locales/fur/app.ftl +++ b/locales/fur/app.ftl @@ -21,6 +21,16 @@ AppHeader--app-header =
{ -profiler-brand-name }
strissinâ e molâ achì un profîl par cjariâlu, opûr: Home--compare-recordings-info = Tu puedis ancje paragonâ diviersis regjistrazions. Vierç la interface pal confront. Home--your-recent-uploaded-recordings-title = Lis tôs regjistrazions cjariadis in rêt di resint +Home--dark-mode-title = Modalitât scure # We replace the elements such as and with links to the # documentation to use these tools. Home--load-files-from-other-tools2 = @@ -403,6 +415,8 @@ MarkerSettings--panel-search = .title = Visualize dome marcadôrs che a corispuindin a un ciert non MarkerSettings--marker-filters = .title = Filtris pai marcadôrs +MarkerSettings--copy-table = + .title = Copie tabele come test ## MarkerSidebar ## This is the sidebar component that is used in Marker Table panel. @@ -441,7 +455,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Erôr tal cjariâ in rêt MenuButtons--index--revert = Ripristine al profîl origjinâl -MenuButtons--index--docs = Documentazion MenuButtons--permalink--button = .label = Colegament permanent @@ -520,6 +533,8 @@ MenuButtons--metaInfo--buffer-duration-seconds = MenuButtons--metaInfo--buffer-duration-unlimited = Ilimitade MenuButtons--metaInfo--application = Aplicazion MenuButtons--metaInfo--name-and-version = Non e version: +# The time between application startup and when the profiler was started +MenuButtons--metaInfo--application-uptime2 = Timp di ativitât: MenuButtons--metaInfo--update-channel = Canâl di inzornament: MenuButtons--metaInfo--build-id = ID compilazion: MenuButtons--metaInfo--build-type = Gjenar di compilazion: @@ -796,15 +811,6 @@ TrackNameButton--hide-track = TrackNameButton--hide-process = .title = Plate procès -## TrackMemoryGraph -## This is used to show the memory graph of that process in the timeline part of -## the UI. To learn more about it, visit: -## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track - -TrackMemoryGraph--relative-memory-at-this-time = memorie relative in chest moment -TrackMemoryGraph--memory-range-in-graph = interval di memorie tal grafic -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = assegnazions e rimozions di assegnazion dal campion precedent - ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, ## graphed over time. @@ -830,6 +836,11 @@ TrackPower--tooltip-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-power-milliwatt = { $value } mW .label = Consum +# This is used in the tooltip when the instant power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-power-microwatt = { $value } μW + .label = Consum # This is used in the tooltip when the power value uses the kilowatt unit. # Variables: # $value (String) - the power value at this location @@ -1050,6 +1061,12 @@ BottomBox--assembly-code-not-available-title = Codiç in assembler no disponibil # Elements: # link text - A link to the github issue about supported scenarios. BottomBox--assembly-code-not-available-text = Viôt il probleme #4520 pai senaris supuartâts e i mioraments planificâts. +# The toggle button for making the bottom box fullscreen. +BottomBox--hide-fullscreen = + .title = Jes dal plen visôr +# The toggle button for making the bottom box fullscreen. +BottomBox--show-fullscreen = + .title = Plen visôr SourceView--close-button = .title = Siere la viodude sorzint @@ -1124,6 +1141,17 @@ AssemblyView--show-button = # Assembly refers to the low-level programming language. AssemblyView--hide-button = .title = Plate la viodude assembly +# The "◀" button above the assembly view. +AssemblyView--prev-button = + .title = Prime +# The "▶" button above the assembly view. +AssemblyView--next-button = + .title = Sucessîf +# The label showing the current position and total count above the assembly view. +# Variables: +# $current (Number) - The current position (1-indexed). +# $total (Number) - The total count. +AssemblyView--position-label = { $current } di { $total } ## UploadedRecordingsHome ## This is the page that displays all the profiles that user has uploaded. diff --git a/locales/fy-NL/app.ftl b/locales/fy-NL/app.ftl index ef86d2dfea..addadbbaa5 100644 --- a/locales/fy-NL/app.ftl +++ b/locales/fy-NL/app.ftl @@ -297,16 +297,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = De flater op GitHub melde -## Footer Links - -FooterLinks--legal = Juridysk -FooterLinks--Privacy = Privacy -FooterLinks--Cookies = Cookies -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Ynstellingen +SettingsMenu--docs = Dokumintaasje +SettingsMenu--legal = Juridysk +SettingsMenu--privacy = Privacy +SettingsMenu--cookies = Cookies +SettingsMenu--language-switcher = .title = Taal wizigje -FooterLinks--hide-button = - .title = Fuottekstkeppelingen ferstopje - .aria-label = Fuottekstkeppelingen ferstopje ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -523,7 +524,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Flater by it opladen MenuButtons--index--revert = Tebek nei orizjineel profyl -MenuButtons--index--docs = Dokuminten MenuButtons--permalink--button = .label = Permalink @@ -891,9 +891,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = relatyf ûnthâld op dit stuit -TrackMemoryGraph--memory-range-in-graph = ûnthâldberik yn grafyk -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = tawizingen en fuortsmiten tawizingen sûnt de foarige stekproef +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = relatyf ûnthâld op dit stuit +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = ûnthâldberik yn grafyk +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = allokaasjes en de-allokaasjes sûnt de foarige opname + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -940,6 +957,11 @@ TrackPower--tooltip-average-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = Gemiddeld fermogen yn de aktuele seleksje +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } µW + .label = Gemiddeld fermogen yn de aktuele seleksje # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/ia/app.ftl b/locales/ia/app.ftl index d8ae18cf8a..119fd5d9b8 100644 --- a/locales/ia/app.ftl +++ b/locales/ia/app.ftl @@ -294,16 +294,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Reportar le error sur GitHub -## Footer Links - -FooterLinks--legal = Legal -FooterLinks--Privacy = Confidentialitate -FooterLinks--Cookies = Cookies -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Configurationes +SettingsMenu--docs = Documentation +SettingsMenu--legal = Legal +SettingsMenu--privacy = Confidentialitate +SettingsMenu--cookies = Cookies +SettingsMenu--language-switcher = .title = Cambiar lingua -FooterLinks--hide-button = - .title = Celar ligamines de pede de pagina - .aria-label = Celar ligamines de pede de pagina ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -509,7 +510,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Error durante le incargamento MenuButtons--index--revert = Reverter al profilo original -MenuButtons--index--docs = Documentos MenuButtons--permalink--button = .label = Ligamine permanente @@ -875,9 +875,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = relative memoria al momento -TrackMemoryGraph--memory-range-in-graph = intervallo de memoria in graphico -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = allocationes e de-allocationes desde le previe exemplo +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = memoria relative al momento +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = intervallo de memoria in graphico +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = allocationes e de-allocationes desde le previe specimen + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -924,6 +941,11 @@ TrackPower--tooltip-average-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = Potentia medie in le selection actual +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } μW + .label = Potentia medie in le selection actual # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/it/app.ftl b/locales/it/app.ftl index ca335aa98a..09ba75b1cd 100644 --- a/locales/it/app.ftl +++ b/locales/it/app.ftl @@ -231,16 +231,17 @@ ErrorBoundary--report-error-to-developers-description = Segnalare questo problem # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Segnala l’errore su GitHub -## Footer Links - -FooterLinks--legal = Note legali -FooterLinks--Privacy = Informativa sulla privacy -FooterLinks--Cookies = Cookie -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Impostazioni +SettingsMenu--docs = Documentazione +SettingsMenu--legal = Note legali +SettingsMenu--privacy = Privacy +SettingsMenu--cookies = Cookie +SettingsMenu--language-switcher = .title = Cambia lingua -FooterLinks--hide-button = - .title = Nascondi collegamenti a piè di pagina - .aria-label = Nascondi collegamenti a piè di pagina ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -433,7 +434,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Errore durante il caricamento MenuButtons--index--revert = Ripristina profilo originale -MenuButtons--index--docs = Documentazione MenuButtons--permalink--button = .label = Link permanente @@ -797,9 +797,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = memoria relativa al momento -TrackMemoryGraph--memory-range-in-graph = intervallo di memoria nel grafico -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = allocazioni e deallocazioni dal campione precedente +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = memoria relativa a questo punto +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = range di memoria nel grafico +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = allocazioni e deallocazioni dal campione precedente + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -846,6 +863,11 @@ TrackPower--tooltip-average-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = Consumo medio nella selezione corrente +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } μW + .label = Consumo medio nella selezione corrente # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/kab/app.ftl b/locales/kab/app.ftl index c002367445..247331155b 100644 --- a/locales/kab/app.ftl +++ b/locales/kab/app.ftl @@ -105,17 +105,6 @@ Details--open-sidebar-button = Details--close-sidebar-button = .title = Mdel agalis adisan -## Footer Links - -FooterLinks--legal = Usḍif -FooterLinks--Privacy = Tabaḍnit -FooterLinks--Cookies = Inagan n tuqqna -FooterLinks--languageSwitcher--select = - .title = Snifel tutlayt -FooterLinks--hide-button = - .title = Ffer iseɣwan n uḍar n usebter - .aria-label = Ffer iseɣwan n uḍar n usebter - ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the ## page. @@ -210,7 +199,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Tuccḍa deg usali MenuButtons--index--revert = Uɣal ɣer umaɣnu aɣbalu -MenuButtons--index--docs = Tasemlit MenuButtons--permalink--button = .label = Permalink @@ -411,13 +399,6 @@ TrackContextMenu--no-results-found = Ulac igmaḍ yettwafen i “{ $search TrackNameButton--hide-process = .title = Ffer asesfer -## TrackMemoryGraph -## This is used to show the memory graph of that process in the timeline part of -## the UI. To learn more about it, visit: -## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track - -TrackMemoryGraph--relative-memory-at-this-time = takatut tamassaɣt deg wakud-a - ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, ## graphed over time. diff --git a/locales/nl/app.ftl b/locales/nl/app.ftl index cd9953774b..ca9147c060 100644 --- a/locales/nl/app.ftl +++ b/locales/nl/app.ftl @@ -297,16 +297,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = De fout op GitHub melden -## Footer Links - -FooterLinks--legal = Juridisch -FooterLinks--Privacy = Privacy -FooterLinks--Cookies = Cookies -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Instellingen +SettingsMenu--docs = Documentatie +SettingsMenu--legal = Juridisch +SettingsMenu--privacy = Privacy +SettingsMenu--cookies = Cookies +SettingsMenu--language-switcher = .title = Taal wijzigen -FooterLinks--hide-button = - .title = Voettekstkoppelingen verbergen - .aria-label = Voettekstkoppelingen verbergen ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -523,7 +524,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Fout bij uploaden MenuButtons--index--revert = Terug naar origineel profiel -MenuButtons--index--docs = Documentatie MenuButtons--permalink--button = .label = Permalink @@ -891,9 +891,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = relatief geheugen op dit moment -TrackMemoryGraph--memory-range-in-graph = geheugenbereik in grafiek -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = toewijzingen en verwijderde toewijzingen sinds de vorige steekproef +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = relatief geheugen op dit moment +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = geheugenbereik in grafiek +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = allocaties en deallocaties sinds de vorige opname + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -940,6 +957,11 @@ TrackPower--tooltip-average-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = Gemiddeld vermogen in de huidige selectie +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } µW + .label = Gemiddeld vermogen in de huidige selectie # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/pt-BR/app.ftl b/locales/pt-BR/app.ftl index cb0ad49bad..3ed870825e 100644 --- a/locales/pt-BR/app.ftl +++ b/locales/pt-BR/app.ftl @@ -237,17 +237,6 @@ ErrorBoundary--report-error-to-developers-description = Relate este problema aos # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Relatar o erro no GitHub -## Footer Links - -FooterLinks--legal = Jurídico -FooterLinks--Privacy = Privacidade -FooterLinks--Cookies = Cookies -FooterLinks--languageSwitcher--select = - .title = Mudar idioma -FooterLinks--hide-button = - .title = Ocultar links de rodapé - .aria-label = Ocultar links de rodapé - ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the ## page. @@ -440,7 +429,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Erro ao enviar MenuButtons--index--revert = Reverter para o profile original -MenuButtons--index--docs = Documentação MenuButtons--permalink--button = .label = Link permanente @@ -801,15 +789,6 @@ TrackNameButton--hide-track = TrackNameButton--hide-process = .title = Ocultar processo -## TrackMemoryGraph -## This is used to show the memory graph of that process in the timeline part of -## the UI. To learn more about it, visit: -## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track - -TrackMemoryGraph--relative-memory-at-this-time = memória relativa neste momento -TrackMemoryGraph--memory-range-in-graph = intervalo de memória no gráfico -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = alocações e desalocações desde a amostra anterior - ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, ## graphed over time. diff --git a/locales/ru/app.ftl b/locales/ru/app.ftl index 5594d1aa2c..70f9a7633c 100644 --- a/locales/ru/app.ftl +++ b/locales/ru/app.ftl @@ -287,16 +287,17 @@ ErrorBoundary--report-error-to-developers-description = Пожалуйста, с # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Сообщить об ошибке на GitHub -## Footer Links - -FooterLinks--legal = Юридическая информация -FooterLinks--Privacy = Приватность -FooterLinks--Cookies = Куки -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Настройки +SettingsMenu--docs = Документация +SettingsMenu--legal = Юридическая информация +SettingsMenu--privacy = Приватность +SettingsMenu--cookies = Куки +SettingsMenu--language-switcher = .title = Изменить язык -FooterLinks--hide-button = - .title = Скрыть ссылки в нижнем колонтитуле - .aria-label = Скрыть ссылки в нижнем колонтитуле ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -513,7 +514,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Ошибка выгрузки MenuButtons--index--revert = Вернуться к исходному профилю -MenuButtons--index--docs = Документация MenuButtons--permalink--button = .label = Постоянная ссылка @@ -892,9 +892,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = относительная память в это время -TrackMemoryGraph--memory-range-in-graph = диапазон памяти на графике -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = размещения и освобождения с момента предыдущей выборки +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = относительная память на данный момент +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = диапазон памяти на графике +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = распределения и отмены по сравнению с предыдущим семплом + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = ЦПУ ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -941,6 +958,11 @@ TrackPower--tooltip-average-power-watt = { $value } Вт # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } мВт .label = Средняя мощность при текущем выборе +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } мВт + .label = Средняя мощность при текущем выборе # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/sr/app.ftl b/locales/sr/app.ftl index 7428af5a05..aa5b65e609 100644 --- a/locales/sr/app.ftl +++ b/locales/sr/app.ftl @@ -11,31 +11,447 @@ -firefox-brand-name = Firefox -firefox-android-brand-name = Firefox за Android -profiler-brand-name = Firefox Profiler --profiler-brand-short-name = Профајлер +-profiler-brand-short-name = Profiler -firefox-nightly-brand-name = Firefox Nightly +## AppHeader +## This is used at the top of the homepage and other content pages. + +AppHeader--app-header =
{ -profiler-brand-name }
- Веб-програм за анализу перформанси { -firefox-brand-name }-а +AppHeader--github-icon = + .title = Идите на нашу Git ризницу (ово се отвара у новом прозору) + ## ThemeToggle ## They are used at the top right side of the home page to switch between themes. +ThemeToggle--system = + .title = Прати подешавање теме система ThemeToggle--light = .title = Користи светлу тему ThemeToggle--dark = - .title = Користите тамну тему + .title = Користи тамну тему + +## AppViewRouter +## This is used for displaying errors when loading the application. + +AppViewRouter--error-from-post-message = Није било могуће увести профил. +AppViewRouter--error-unpublished = Није било могуће преузети профил из { -firefox-brand-name }-а. +AppViewRouter--error-from-file = Није било могуће прочитати датотеку или рашчланити профил у њој. +AppViewRouter--error-local = Још увек није израђено. +AppViewRouter--error-public = Није било могуће преузети профил. +AppViewRouter--error-from-url = Није било могуће преузети профил. +AppViewRouter--error-compare = Није било могуће преузети профиле. +# This error message is displayed when a Safari-specific error state is encountered. +# Importing profiles from URLs such as http://127.0.0.1:someport/ is not possible in Safari. +# https://profiler.firefox.com/from-url/http%3A%2F%2F127.0.0.1%3A3000%2Fprofile.json/ +AppViewRouter--error-from-localhost-url-safari = + Због одређеног ограничења у Safari-ју, { -profiler-brand-name } не може + да увезе профиле са локалне машине у овом прегледачу. Уместо тога, отворите + ову страницу у { -firefox-brand-name }-у или Chrome-у. + .title = Safari не може да увезе локалне профиле +AppViewRouter--route-not-found--home = + .specialMessage = URL адреса коју сте покушали да посетите није препозната. + +## Backtrace +## This is used to display a backtrace (call stack) for a marker or sample. + +# Variables: +# $function (String) - Name of the function that was inlined. +Backtrace--inlining-badge = (уграђено) + .title = { $function } је уграђена у позивача од стране компилера. + +## CallNodeContextMenu +## This is used as a context menu for the Call Tree, Flame Graph and Stack Chart +## panels. + +# Variables: +# $fileName (String) - Name of the file to open. +CallNodeContextMenu--show-file = Прикажи { $fileName } +CallNodeContextMenu--transform-merge-function = Споји функцију + .title = + Спајањем функције она се уклања из профила, а њено време се додељује функцији + која је позивала. Ово се дешава свуда где је функција била позивана у + стаблу. +CallNodeContextMenu--transform-merge-call-node = Споји само чвор + .title = + Спајањем чвора он се уклања из профила, а њено време се додељује чвору функције + која је позивала. Он само уклања функцију из тог специфичног дела + стабла. Сва остала места са којих је функција била позивана + остаће у профилу. +# This is used as the context menu item title for "Focus on function" and "Focus +# on function (inverted)" transforms. +CallNodeContextMenu--transform-focus-function-title = + Фокусирање на функцију уклониће сваки узорак који не укључује ту + функцију. Поред тога, поново поставља корен стабла позива тако да та функција + постане једини корен стабла. Ово може комбиновати вишеструка места позива функције + у целом профилу у један чвор позива. +CallNodeContextMenu--transform-focus-function = Фокусирајте се на функцију + .title = { CallNodeContextMenu--transform-focus-function-title } +CallNodeContextMenu--transform-focus-function-inverted = Фокусирајте се на функцију (обрнуто) + .title = { CallNodeContextMenu--transform-focus-function-title } + +## The translation for "self" in these strings should match the translation used +## in CallTree--samples-self and CallTree--bytes-self. Alternatively it can be +## translated as "self values" or "self time" (though "self time" is less desirable +## because this menu item is also shown in "bytes" mode). + +CallNodeContextMenu--transform-focus-self-title = + Фокусирање на себе слично је фокусирању на функцију, али задржава само узорке + који доприносе сопственом времену функције. Узорци у позиваним функцијама + се одбацују, а стабло позива се поново укорењује на фокусирану функцију. +CallNodeContextMenu--transform-focus-self = Фокусирајте се само на себе + .title = { CallNodeContextMenu--transform-focus-self-title } + +## + +CallNodeContextMenu--transform-focus-subtree = Фокусирајте се само на подстабло + .title = + Фокусирање на подстабло уклониће сваки узорак који не укључује тај + специфични део стабла позива. Издваја грану стабла позива, + међутим, чини то само за тај једини чвор позива. Сви остали позиви + функције се занемарују. +# This is used as the context menu item to apply the "Focus on category" transform. +# Variables: +# $categoryName (String) - Name of the category to focus on. +CallNodeContextMenu--transform-focus-category = Фокусирајте се на категорију { $categoryName } + .title = + Фокусирање на чворове који припадају истој категорији као и означени чвор, + чиме се спајају сви чворови који припадају другој категорији. +CallNodeContextMenu--transform-collapse-function-subtree = Скупи функцију + .title = + Скупљањем функције уклониће се све што је она позивала, а све време ће + се доделити тој функцији. Ово може помоћи у поједностављивању профила + који позива код који не мора да се анализира. +# This is used as the context menu item to apply the "Collapse resource" transform. +# Variables: +# $nameForResource (String) - Name of the resource to collapse. +CallNodeContextMenu--transform-collapse-resource = Скупи { $nameForResource } + .title = + Скупљањем ресурса сви позиви тог ресурса ће се изравнати + у један скупљени чвор позива. +CallNodeContextMenu--transform-collapse-recursion = Скупи рекурзију + .title = + Скупљањем рекурзије уклањају се позиви који се понављају рекурзивно у + исту функцију, чак и са посредничким функцијама на стеку. +CallNodeContextMenu--transform-collapse-direct-recursion-only = Скупи само директну рекурзију + .title = Скупљање директне рекурзије уклања позиве који се понављано рекурсивно позивају у исту функцију без посредничких функција на стеку. +CallNodeContextMenu--transform-drop-function = Одбаци узорке са овом функцијом + .title = Одбацивање узорака уклања њихово време из профила. Ово је корисно како би се елиминисали подаци о времену који нису релевантни за анализу. +CallNodeContextMenu--expand-all = Рашири све +# Searchfox is a source code indexing tool for Mozilla Firefox. +# See: https://searchfox.org/ +CallNodeContextMenu--searchfox = Потражите назив функције на Searchfox-у +CallNodeContextMenu--copy-function-name = Копирај назив функције +CallNodeContextMenu--copy-script-url = Копирај URL скрипте +CallNodeContextMenu--copy-stack = Копирај стек +CallNodeContextMenu--show-the-function-in-devtools = Прикажи функцију у DevTools-у + +## CallTree +## This is the component for Call Tree panel. + +CallTree--tracing-ms-total = Време извршавања (мс) + .title = „Укупно“ време извршавања укључује сажетак свог времена током којег је ова функција забележена на стеку. То укључује време током које је функција заиста радила, као и време потрошено у позивачима ове функције. +CallTree--tracing-ms-self = Своје (мс) + .title = „Своје“ време укључује само време током којег је функција била на крају стека. Ако је ова функција позивала друге функције, онда се време тих „других“ функција не укључује. „Своје“ време је корисно за разумевање где је време заиста потрошено у програму. +CallTree--samples-total = Укупно (узорци) + .title = „Укупно“ број узорака укључује сажетак сваког узорка током којег је ова функција забележена на стеку. То укључује време током које је функција заиста радила, као и време потрошено у позивачима ове функције. +CallTree--samples-self = Своје + .title = „Свој“ број узорака укључује само узорке током којих је функција била на крају стека. Ако је ова функција позивала друге функције, онда се број узорака тих „других“ функција не укључује. „Свој“ број узорака је користан за разумевање где је време заиста потрошено у програму. +CallTree--bytes-total = Укупна величина (бајтови) + .title = „Укупна величина“ укључује сажетак свих бајтова који су додељени или ослобођени док је ова функција забележена на стеку. То укључује и бајтове током које је функција заиста радила, као и бајтове позивача ове функције. +CallTree--bytes-self = Своје (бајтови) + .title = „Своји“ бајтови укључују бајтове који су додељени или ослобођени док је ова функција била на крају стека. Ако је ова функција позивала друге функције, онда се бајтови тих „других“ функција не укључују. „Своји“ бајтови су корисни за разумевање где је меморија заиста додељена или ослобођена у програму. + +## Call tree "badges" (icons) with tooltips +## +## These inlining badges are displayed in the call tree in front of some +## functions for native code (C / C++ / Rust). They're a small "inl" icon with +## a tooltip. + +# Variables: +# $calledFunction (String) - Name of the function whose call was sometimes inlined. +CallTree--divergent-inlining-badge = + .title = Неки позиви функције { $calledFunction } су уграђени од стране компилера. +# Variables: +# $calledFunction (String) - Name of the function whose call was inlined. +# $outerFunction (String) - Name of the outer function into which the called function was inlined. +CallTree--inlining-badge = (уграђено) + .title = Позиви функције { $calledFunction } су уграђени у { $outerFunction } од стране компилера. + +## CallTreeSidebar +## This is the sidebar component that is used in Call Tree and Flame Graph panels. + +CallTreeSidebar--select-a-node = Изаберите чвор да бисте приказали податке о њему. +CallTreeSidebar--call-node-details = Детаљи чвора позива + +## CallTreeSidebar timing information +## +## Firefox Profiler stops the execution of the program every 1ms to record the +## stack. Only thing we know for sure is the stack at that point of time when +## the stack is taken. We try to estimate the time spent in each function and +## translate it to a duration. That's why we use the "traced" word here. +## There is actually no difference between "Traced running time" and "Running +## time" in the context of the profiler. We use "Traced" to emphasize that this +## is an estimation where we have more space in the UI. +## +## "Self time" is the time spent in the function itself, excluding the time spent +## in the functions it called. "Running time" is the time spent in the function +## itself, including the time spent in the functions it called. + +CallTreeSidebar--traced-running-time = + .label = Забележено време извршавања +CallTreeSidebar--traced-self-time = + .label = Забележено своје време +CallTreeSidebar--running-time = + .label = Време извршавања +CallTreeSidebar--self-time = + .label = Своје време +CallTreeSidebar--running-samples = + .label = Узорци извршавања +CallTreeSidebar--self-samples = + .label = Своји узорци +CallTreeSidebar--running-size = + .label = Величина извршавања +CallTreeSidebar--self-size = + .label = Своја величина +CallTreeSidebar--categories = Категорије +CallTreeSidebar--implementation = Израда +CallTreeSidebar--running-milliseconds = Милисекунде извршавања +CallTreeSidebar--running-sample-count = Број узорака извршавања +CallTreeSidebar--running-bytes = Бајтови извршавања +CallTreeSidebar--self-milliseconds = Своје милисекунде +CallTreeSidebar--self-sample-count = Свој број узорака +CallTreeSidebar--self-bytes = Своји бајтови + +## CompareHome +## This is used in the page to compare two profiles. +## See: https://profiler.firefox.com/compare/ + +CompareHome--instruction-title = Унесите URL-ове профила које желите да упоредите +CompareHome--instruction-content = Алат ће извући податке из изабраног трака и опсега за сваки профил и поставити их обоје у исти преглед како би их било лако упоредити. +CompareHome--form-label-profile1 = Профил 1: +CompareHome--form-label-profile2 = Профил 2: +CompareHome--submit-button = + .value = Преузми профиле + +## DebugWarning +## This is displayed at the top of the analysis page when the loaded profile is +## a debug build of Firefox. + +DebugWarning--warning-message = + .message = + Овај профил је снимљен у изградњи без оптимизација за издање. + Наблюдања перформанси се можда не односе на популацију издања. + +## Details +## This is the bottom panel in the analysis UI. They are generic strings to be +## used at the bottom part of the UI. + +Details--open-sidebar-button = + .title = Отвори страничник +Details--close-sidebar-button = + .title = Затвори страничник +Details--error-boundary-message = + .message = Ух, нека непозната грешка се догодила у овој површи. + +## ErrorBoundary +## This component is shown when an unexpected error is encountered in the application. +## Note that the localization won't be always applied in this component. -## Footer Links +# This message will always be displayed after another context-specific message. +ErrorBoundary--report-error-to-developers-description = Пријавите овај проблем програмерима, укључујући и пуну грешку као што је приказано у веб-конзоли алата за програмере. +# This is used in a call to action button, displayed inside the error box. +ErrorBoundary--report-error-on-github = Пријавите грешку на GitHub-у -FooterLinks--legal = Правно -FooterLinks--Privacy = Приватност -FooterLinks--Cookies = Колачићи -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Подешавања +SettingsMenu--docs = Документација +SettingsMenu--legal = Права +SettingsMenu--privacy = Приватност +SettingsMenu--cookies = Колачићи +SettingsMenu--language-switcher = .title = Промени језик +## FullTimeline +## The timeline component of the full view in the analysis UI at the top of the +## page. + +# This string is used as the text of the track selection button. +# Displays the ratio of visible tracks count to total tracks count in the timeline. +# We have spans here to make the numbers bold. +# Variables: +# $visibleTrackCount (Number) - Visible track count in the timeline +# $totalTrackCount (Number) - Total track count in the timeline +FullTimeline--tracks-button = { $visibleTrackCount } / { $totalTrackCount } стазе + ## Home page +Home--upload-from-file-input-button = Учитај профил из датотеке +Home--upload-from-url-button = Учитај профил са URL-а Home--load-from-url-submit-button = .value = Учитај Home--documentation-button = Документација +Home--menu-button = Омогући дугме менија { -profiler-brand-name } +Home--menu-button-instructions = + Омогућите дугме менија за профајлер да бисте покренули снимање профила перформанси + у { -firefox-brand-name }, затим га анализирајте и поделите га на profiler.firefox.com. +Home--profile-firefox-android-instructions = + Такође можете профилисати { -firefox-android-brand-name }. За више + информација, погледајте ову документацију: + Профилисање { -firefox-android-brand-name } директно на уређају. +# The word WebChannel should not be translated. +# This message can be seen on https://main--perf-html.netlify.app/ in the tooltip +# of the "Enable Firefox Profiler menu button" button. +Home--enable-button-unavailable = + .title = Овај примерак профајлера није успео да се повеже са WebChannel-ом, па не може да омогући дугме менија за профајлер. +# The word WebChannel, the pref name, and the string "about:config" should not be translated. +# This message can be seen on https://main--perf-html.netlify.app/ . +Home--web-channel-unavailable = + Овај примерак профајлера није успео да се повеже са WebChannel-ом. То обично значи да се он извршава на другом хосту од онога који је наведен у подешавању + devtools.performance.recording.ui-base-url. Ако желите да ухватите нове + профиле помоћу овог примерка и да му омогућИТЕ програмско управљање дугметом менија за профајлер, + можете да одете на about:config и промените подешавање. +Home--record-instructions = + Да бисте покренули профилисање, кликните на дугме за профилисање или употребите + тастатурне пречице. Иконица је плава када је снимање профила у току. + Притисните Ухвати да бисте учитали податке на profiler.firefox.com. +Home--instructions-content2 = + Снимање профила перформанси захтева { -firefox-brand-name } за стони рачунар. + Међутим, постојећи профили се могу видети у било ком савременом прегледачу. +Home--fenix-instructions-directly = + { -firefox-android-brand-name } се може профилисати директно на овом уређају. За више + информација, прочитајте Профилисање { -firefox-android-brand-name } директно на уређају. +Home--fenix-instructions-remotely = + Такође можете профилисати { -firefox-android-brand-name } на удаљењу помоћу { -firefox-brand-name } + за стони рачунар. За више информација, погледајте ову документацију: + Профилисање { -firefox-android-brand-name } на удаљењу. +Home--record-instructions-start-stop = Заустави и покрени профилисање +Home--record-instructions-capture-load = Ухвати и учитај профил +Home--profiler-motto = Ухвати профил перформанси. Анализирај га. Подели га. Убрзај веб. +Home--additional-content-title = Учитај постојеће профиле +Home--additional-content-content = Можете превући и испустити датотеку профила овде да бисте је учитали, или: +Home--compare-recordings-info = Такође можете да упоредите снимке. Отворите прочеље за поређење. +Home--your-recent-uploaded-recordings-title = Ваши недавно послати снимци Home--dark-mode-title = Тамни режим +# We replace the elements such as and with links to the +# documentation to use these tools. +Home--load-files-from-other-tools2 = + { -profiler-brand-name } такође може да увезе профиле из других профајлера, као што су + Linux perf, Android SimplePerf, Chrome-ова површ за перформансе, + Android Studio, или било која датотека која користи dhat формат + или Google-ов Trace Event формат. Сазнајте како да напишете сопствени увозник. +Home--install-chrome-extension = Инсталирај Chrome-ов додатак +Home--chrome-extension-instructions = + Употребите { -profiler-brand-name } додатак за Chrome + да бисте ухватили профиле перформанси у Chrome-у и анализирали их у + { -profiler-brand-name }. Инсталирајте додатак са Chrome Web Store-а. +Home--chrome-extension-recording-instructions = Када га инсталирате, употребите иконицу додатка на алатној траци или пречице да бисте покренули и зауставили профилисање. Такође можете да извезете профиле и учитате их овде за детаљну анализу. + +## IdleSearchField +## The component that is used for all the search inputs in the application. + +IdleSearchField--search-input = + .placeholder = Унесите појмове за филтрирање + +## JsTracerSettings +## JSTracer is an experimental feature and it's currently disabled. See Bug 1565788. + +JsTracerSettings--show-only-self-time = Прикажи само сопствено време + .title = Прикажи само време потрошено у чвору позива, занемарујући његове потомке. + +## ListOfPublishedProfiles +## This is the component that displays all the profiles the user has uploaded. +## It's displayed both in the homepage and in the uploaded recordings page. + +# This string is used on the tooltip of the published profile links. +# Variables: +# $smallProfileName (String) - Shortened name for the published Profile. +ListOfPublishedProfiles--published-profiles-link = + .title = Кликните овде да бисте учитали профил { $smallProfileName } +ListOfPublishedProfiles--published-profiles-delete-button-disabled = Обриши + .title = Овај профил не може бити обрисан јер нам недостају подаци о овлашћењу. +ListOfPublishedProfiles--uploaded-profile-information-list-empty = Још увек није послат ниједан профил! +# This string is used below the 'Your recent uploaded recordings' list section. +# Variables: +# $profilesRestCount (Number) - Remaining numbers of the uploaded profiles which are not listed under 'Your recent uploaded recordings'. +ListOfPublishedProfiles--uploaded-profile-information-label = Погледајте и управљајте свим својим снимцима ({ $profilesRestCount } више) +# Depending on the number of uploaded profiles, the message is different. +# Variables: +# $uploadedProfileCount (Number) - Total numbers of the uploaded profiles. +ListOfPublishedProfiles--uploaded-profile-information-list = + { $uploadedProfileCount -> + [one] Управљај овим снимком + [few] Управљај овим снимцима + *[other] Управљај овим снимцима + } + +## MarkerContextMenu +## This is used as a context menu for the Marker Chart, Marker Table and Network +## panels. + +MarkerContextMenu--set-selection-from-duration = Постави избор на основу трајања обележивача +MarkerContextMenu--start-selection-here = Почни избор овде +MarkerContextMenu--end-selection-here = Заврши избор овде +MarkerContextMenu--start-selection-at-marker-start = Почни избор на почетку обележивача +MarkerContextMenu--start-selection-at-marker-end = Почни избор на крају обележивача +MarkerContextMenu--end-selection-at-marker-start = Заврши избор на почетку обележивача +MarkerContextMenu--end-selection-at-marker-end = Заврши избор на крају обележивача +MarkerContextMenu--copy-description = Копирај опис +MarkerContextMenu--copy-call-stack = Копирај стек позива +MarkerContextMenu--copy-url = Копирај URL +MarkerContextMenu--copy-page-url = Копирај URL стране +MarkerContextMenu--copy-as-json = Копирај као JSON +# This string is used on the marker context menu item when right clicked on an +# IPC marker. +# Variables: +# $threadName (String) - Name of the thread that will be selected. +MarkerContextMenu--select-the-receiver-thread = Изабери примајућу нит „{ $threadName }“ +# This string is used on the marker context menu item when right clicked on an +# IPC marker. +# Variables: +# $threadName (String) - Name of the thread that will be selected. +MarkerContextMenu--select-the-sender-thread = Изабери пошаљиљућу нит „{ $threadName }“ + +## MarkerFiltersContextMenu +## This is the menu when filter icon is clicked in Marker Chart and Marker Table +## panels. + +# This string is used on the marker filters menu item when clicked on the filter icon. +# Variables: +# $filter (String) - Search string that will be used to filter the markers. +MarkerFiltersContextMenu--drop-samples-outside-of-markers-matching = Испусти узорке изван обележивача који одговарају тексту „{ $filter }“ + +## MarkerCopyTableContextMenu +## This is the menu when the copy icon is clicked in Marker Chart and Marker +## Table panels. + +MarkerCopyTableContextMenu--copy-table-as-plain = Копирај табелу обележивача као обичан текст +MarkerCopyTableContextMenu--copy-table-as-markdown = Копирај табелу обележивача као Markdown + +## MarkerSettings +## This is used in all panels related to markers. + +MarkerSettings--panel-search = + .label = Филтруј обележиваче: + .title = Приказујте само обележиваче који одговарају одређеном називу +MarkerSettings--marker-filters = + .title = Филтери обележивача +MarkerSettings--copy-table = + .title = Копирај табелу као текст +# This string is used when the user tries to copy a marker table with +# more than 10000 rows. +# Variable: +# $rows (Number) - Number of rows the marker table has +# $maxRows (Number) - Number of maximum rows that can be copied +MarkerSettings--copy-table-exceeed-max-rows = Број редова прелази ограничење: { $rows } > { $maxRows }. Копираће се само првих { $maxRows } редова. + +## MarkerSidebar +## This is the sidebar component that is used in Marker Table panel. + +MarkerSidebar--select-a-marker = Изаберите обележивач да бисте приказали податке о њему. ## MarkerTable ## This is the component for Marker Table panel. @@ -45,10 +461,30 @@ MarkerTable--duration = Трајање MarkerTable--name = Назив MarkerTable--details = Детаљи +## MarkerTooltip +## This is the component for Marker Tooltip panel. + +# This is used as the tooltip for the filter button in marker tooltips. +# Variables: +# $filter (String) - Search string that will be used to filter the markers. +MarkerTooltip--filter-button-tooltip = + .title = Прикажи само обележиваче који одговарају тексту: „{ $filter }“ + .aria-label = Прикажи само обележиваче који одговарају тексту: „{ $filter }“ + ## MenuButtons ## These strings are used for the buttons at the top of the profile viewer. -MenuButtons--index--docs = Документи +MenuButtons--index--metaInfo-button = + .label = Подаци о профилу +MenuButtons--index--full-view = Пун преглед +MenuButtons--index--cancel-upload = Откажи отпремање +MenuButtons--index--share-upload = + .label = Отпреми локални профил +MenuButtons--index--share-re-upload = + .label = Поново отпреми +MenuButtons--index--share-error-uploading = + .label = Грешка при отпремању +MenuButtons--index--revert = Врати на почетни профил MenuButtons--permalink--button = .label = Трајна веза @@ -60,3 +496,749 @@ MenuButtons--index--profile-info-uploaded-label = Отпремљено: MenuButtons--index--profile-info-uploaded-actions = Обриши MenuButtons--index--metaInfo-subtitle = Информације о профилу MenuButtons--metaInfo--symbols = Симболи: +MenuButtons--metaInfo--profile-symbolicated = Профил је симболизован +MenuButtons--metaInfo--profile-not-symbolicated = Профил није симболизован +MenuButtons--metaInfo--resymbolicate-profile = Поново симболизујте профил +MenuButtons--metaInfo--symbolicate-profile = Симболизујте профил +MenuButtons--metaInfo--attempting-resymbolicate = Покушавање поновног симболизовања профила +MenuButtons--metaInfo--currently-symbolicating = У току је симболизовање профила +MenuButtons--metaInfo--cpu-model = Модел процесора: +MenuButtons--metaInfo--cpu-cores = Језгра процесора: +MenuButtons--metaInfo--main-memory = Главна меморија: +MenuButtons--index--show-moreInfo-button = Прикажи више +MenuButtons--index--hide-moreInfo-button = Прикажи мање +# This string is used when we have the information about both physical and +# logical CPU cores. +# Variable: +# $physicalCPUs (Number), $logicalCPUs (Number) - Number of Physical and Logical CPU Cores +MenuButtons--metaInfo--physical-and-logical-cpu = + { $physicalCPUs -> + [one] + { $logicalCPUs -> + [one] { $physicalCPUs } физичко језгро, { $logicalCPUs } логичко језгро + [few] { $physicalCPUs } физичко језгро, { $logicalCPUs } логичка језгра + *[other] { $physicalCPUs } физичко језгро, { $logicalCPUs } логичка језгра + } + [few] + { $logicalCPUs -> + [one] { $physicalCPUs } физичка језгра, { $logicalCPUs } логичко језгро + [few] { $physicalCPUs } физичка језгра, { $logicalCPUs } логичка језгра + *[other] { $physicalCPUs } физичка језгра, { $logicalCPUs } логичка језгра + } + *[other] + { $logicalCPUs -> + [one] { $physicalCPUs } физичка језгра, { $logicalCPUs } логичко језгро + [few] { $physicalCPUs } физичка језгра, { $logicalCPUs } логичка језгра + *[other] { $physicalCPUs } физичка језгра, { $logicalCPUs } логичка језгра + } + } +# This string is used when we only have the information about the number of +# physical CPU cores. +# Variable: +# $physicalCPUs (Number) - Number of Physical CPU Cores +MenuButtons--metaInfo--physical-cpu = + { $physicalCPUs -> + [one] { $physicalCPUs } физичко језгро + [few] { $physicalCPUs } физичка језгра + *[other] { $physicalCPUs } физичка језгра + } +# This string is used when we only have the information only the number of +# logical CPU cores. +# Variable: +# $logicalCPUs (Number) - Number of logical CPU Cores +MenuButtons--metaInfo--logical-cpu = + { $logicalCPUs -> + [one] { $logicalCPUs } логичко језгро + [few] { $logicalCPUs } логичка језгра + *[other] { $logicalCPUs } логичка језгра + } +MenuButtons--metaInfo--profiling-started = Снимање је започето: +MenuButtons--metaInfo--profiling-session = Дужина снимања: +MenuButtons--metaInfo--main-process-started = Главни процес је започео: +MenuButtons--metaInfo--main-process-ended = Главни процес је завршен: +MenuButtons--metaInfo--file-name = Назив датотеке: +MenuButtons--metaInfo--file-size = Величина датотеке: +MenuButtons--metaInfo--interval = Период: +MenuButtons--metaInfo--buffer-capacity = Капацитет спремишта: +MenuButtons--metaInfo--buffer-duration = Трајање спремишта: +# Buffer Duration in Seconds in Meta Info Panel +# Variable: +# $configurationDuration (Number) - Configuration Duration in Seconds +MenuButtons--metaInfo--buffer-duration-seconds = + { $configurationDuration -> + [one] { $configurationDuration } секунда + [few] { $configurationDuration } секунде + *[other] { $configurationDuration } секунда + } +# Adjective refers to the buffer duration +MenuButtons--metaInfo--buffer-duration-unlimited = Неограничено +MenuButtons--metaInfo--application = Програм +MenuButtons--metaInfo--name-and-version = Назив и издање: +# The time between application startup and when the profiler was started +MenuButtons--metaInfo--application-uptime2 = Време рада: +MenuButtons--metaInfo--update-channel = Канал надоградње: +MenuButtons--metaInfo--build-id = ИД издања: +MenuButtons--metaInfo--build-type = Врста издања: +MenuButtons--metaInfo--arguments = Аргументи: + +## Strings refer to specific types of builds, and should be kept in English. + +MenuButtons--metaInfo--build-type-debug = Отклањање грешака +MenuButtons--metaInfo--build-type-opt = Оптимизовано + +## + +MenuButtons--metaInfo--platform = Платформа +MenuButtons--metaInfo--device = Уређај: +# OS means Operating System. This describes the platform a profile was captured on. +MenuButtons--metaInfo--os = ОС: +# ABI means Application Binary Interface. This describes the platform a profile was captured on. +MenuButtons--metaInfo--abi = АБИ: +MenuButtons--metaInfo--visual-metrics = Визуелне метрике +MenuButtons--metaInfo--speed-index = Индекс брзине: +# “Perceptual” is the name of an index provided by sitespeed.io, and should be kept in English. +MenuButtons--metaInfo--perceptual-speed-index = Perceptual индекс брзине: +# “Contentful” is the name of an index provided by sitespeed.io, and should be kept in English. +MenuButtons--metaInfo--contentful-speed-Index = Contentful индекс брзине: +MenuButtons--metaInfo-renderRowOfList-label-features = Могућности: +MenuButtons--metaInfo-renderRowOfList-label-threads-filter = Филтер нити: +MenuButtons--metaInfo-renderRowOfList-label-extensions = Додаци: + +## Overhead refers to the additional resources used to run the profiler. +## These strings are displayed at the bottom of the "Profile Info" panel. + +MenuButtons--metaOverheadStatistics-subtitle = Оптерећење { -profiler-brand-short-name } +MenuButtons--metaOverheadStatistics-mean = Средња вредност +MenuButtons--metaOverheadStatistics-max = Највише +MenuButtons--metaOverheadStatistics-min = Најмање +MenuButtons--metaOverheadStatistics-statkeys-overhead = Оптерећење + .title = Време за узорковање свих нити. +MenuButtons--metaOverheadStatistics-statkeys-cleaning = Чишћење + .title = Време за одбацивање истеклих подака. +MenuButtons--metaOverheadStatistics-statkeys-counter = Бројач + .title = Време за прикупљање свих бројача. +MenuButtons--metaOverheadStatistics-statkeys-interval = Период + .title = Примећени период између два узорка. +MenuButtons--metaOverheadStatistics-statkeys-lockings = Закључавања + .title = Време за добијање закључавања пре узорковања. +MenuButtons--metaOverheadStatistics-overhead-duration = Трајања оптерећења: +MenuButtons--metaOverheadStatistics-overhead-percentage = Проценат оптерећења: +MenuButtons--metaOverheadStatistics-profiled-duration = Трајање профилисања: + +## Publish panel +## These strings are used in the publishing panel. + +MenuButtons--publish--renderCheckbox-label-hidden-threads = Укључи сакривене нити +MenuButtons--publish--renderCheckbox-label-include-other-tabs = Укључи податке из других језикаца +MenuButtons--publish--renderCheckbox-label-hidden-time = Укључи сакривен временски опсег +MenuButtons--publish--renderCheckbox-label-include-screenshots = Укључи снимке екрана +MenuButtons--publish--renderCheckbox-label-resource = Укључи URL-ове и путање ресурса +MenuButtons--publish--renderCheckbox-label-extension = Укључи податке о додацима +MenuButtons--publish--renderCheckbox-label-preference = Укључи вредности подешавања +MenuButtons--publish--renderCheckbox-label-private-browsing = Укључи податке из прозора за приватно прегледање +MenuButtons--publish--renderCheckbox-label-private-browsing-warning-image = + .title = Овај профил садржи податке за приватно прегледање +MenuButtons--publish--reupload-performance-profile = Поново отпреми профил перформанси +MenuButtons--publish--share-performance-profile = Подели профил перформанси +MenuButtons--publish--info-description = Отпремите ваш профил и учините га приступачним свима који имају везу. +MenuButtons--publish--info-description-default = Подразумевано, ваши лични подаци се уклањају. +MenuButtons--publish--info-description-firefox-nightly2 = Овај профил је из { -firefox-nightly-brand-name }, па је подразумевано већина података укључена. +MenuButtons--publish--include-additional-data = Укључи додатне податке који могу бити идентификовани +MenuButtons--publish--button-upload = Отпреми +MenuButtons--publish--upload-title = Отпремање профила… +MenuButtons--publish--cancel-upload = Откажи отпремање +MenuButtons--publish--message-something-went-wrong = Ух, нешто је пошло по злу при отпремању профила. +MenuButtons--publish--message-try-again = Покушајте поново +MenuButtons--publish--download = Преузми +MenuButtons--publish--compressing = Сажимање… +MenuButtons--publish--error-while-compressing = Грешка при сажимању, покушајте да одзначите неке од поља како бисте смањили величину профила. + +## NetworkSettings +## This is used in the network chart. + +NetworkSettings--panel-search = + .label = Филтрирај мреже: + .title = Прикажи само мрежне захтеве који одговарају одређеном називу + +## Timestamp formatting primitive + +# This displays a date in a shorter rendering, depending on the proximity of the +# date from the current date. You can look in src/utils/l10n-ftl-functions.js +# for more information. +# This is especially used in the list of published profiles panel. +# There shouldn't need to change this in translations, but having it makes the +# date pass through Fluent to be properly localized. +# The function SHORTDATE is specific to the profiler. It changes the rendering +# depending on the proximity of the date from the current date. +# Variables: +# $date (Date) - The date to display in a shorter way +NumberFormat--short-date = { SHORTDATE($date) } + +## PanelSearch +## The component that is used for all the search input hints in the application. + +PanelSearch--search-field-hint = Да ли сте знали да можете да користите зарез (,) за претрагу помоћу више појмова? + +## Profile Name Button + +ProfileName--edit-profile-name-button = + .title = Уреди назив профила +ProfileName--edit-profile-name-input = + .title = Уреди назив профила + .aria-label = Назив профила + +## Profile Delete Button + +# This string is used on the tooltip of the published profile links delete button in uploaded recordings page. +# Variables: +# $smallProfileName (String) - Shortened name for the published Profile. +ProfileDeleteButton--delete-button = + .label = Обриши + .title = Кликните овде да обришете профил { $smallProfileName } + +## Profile Delete Panel +## This panel is displayed when the user clicks on the Profile Delete Button, +## it's a confirmation dialog. + +# This string is used when there's an error while deleting a profile. The link +# will show the error message when hovering. +ProfileDeletePanel--delete-error = Дошло је до грешке при брисању овог профила. Померите мишем за више података. +# This is the title of the dialog +# Variables: +# $profileName (string) - Some string that identifies the profile +ProfileDeletePanel--dialog-title = Обриши { $profileName } +ProfileDeletePanel--dialog-confirmation-question = + Да ли сте сигурни да желите да обришете отпремљене податке за овај профил? Везе + које су претходно делене више неће радити. +ProfileDeletePanel--dialog-cancel-button = + .value = Откажи +ProfileDeletePanel--dialog-delete-button = + .value = Обриши +# This is used inside the Delete button after the user has clicked it, as a cheap +# progress indicator. +ProfileDeletePanel--dialog-deleting-button = + .value = Брисање… +# This message is displayed when a profile has been successfully deleted. +ProfileDeletePanel--message-success = Послати подаци су успешно обрисани. + +## ProfileFilterNavigator +## This is used at the top of the profile analysis UI. + +# This string is used on the top left side of the profile analysis UI as the +# "Full Range" button. In the profiler UI, it's possible to zoom in to a time +# range. This button reverts it back to the full range. It also includes the +# duration of the full range. +# Variables: +# $fullRangeDuration (String) - The duration of the full profile data. +ProfileFilterNavigator--full-range-with-duration = Цео опсег ({ $fullRangeDuration }) + +## Profile Loader Animation + +ProfileLoaderAnimation--loading-from-post-message = Увозим и обрађујем профил… +ProfileLoaderAnimation--loading-unpublished = Увозим профил директно из { -firefox-brand-name }… +ProfileLoaderAnimation--loading-from-file = Читам датотеку и обрађујем профил… +ProfileLoaderAnimation--loading-local = Још увек није израђено. +ProfileLoaderAnimation--loading-public = Преузимам и обрађујем профил… +ProfileLoaderAnimation--loading-from-url = Преузимам и обрађујем профил… +ProfileLoaderAnimation--loading-compare = Читам и обрађујем профиле… +ProfileLoaderAnimation--loading-view-not-found = Преглед није пронађен + +## ProfileRootMessage + +ProfileRootMessage--title = { -profiler-brand-name } +ProfileRootMessage--additional = Назад на почетну + +## Root + +Root--error-boundary-message = + .message = Ух! Дошло је до неке непознате грешке на profiler.firefox.com. + +## ServiceWorkerManager +## This is the component responsible for handling the service worker installation +## and update. It appears at the top of the UI. + +ServiceWorkerManager--applying-button = Примењујем… +ServiceWorkerManager--pending-button = Примени и поново учитај +ServiceWorkerManager--installed-button = Поново учитај програм +ServiceWorkerManager--updated-while-not-ready = + Ново издање програма је примењено пре него што је ова страница + у потпуности учитана. Можда ћете приметити проблеме у раду. +ServiceWorkerManager--new-version-is-ready = Ново издање програма је преузето и спремно за употребу. +ServiceWorkerManager--hide-notice-button = + .title = Сакриј обавештење о поновном учитавању + .aria-label = Сакриј обавештење о поновном учитавању + +## StackSettings +## This is the settings component that is used in Call Tree, Flame Graph and Stack +## Chart panels. It's used to switch between different views of the stack. + +StackSettings--implementation-all-frames = Сви кадрови + .title = Не филтрирајте кадрове стека +StackSettings--implementation-script = Скрипта + .title = Прикажите само кадрове стека повезане са извршавањем скрипте +StackSettings--implementation-native2 = Изворни + .title = Прикажите само кадрове стека за изворни код +# This label is displayed in the marker chart and marker table panels only. +StackSettings--stack-implementation-label = Филтрирајте стекове: +StackSettings--use-data-source-label = Извор података: +StackSettings--call-tree-strategy-timing = Времена + .title = Сумирајте помоћу узоркованих стекова извршеног кода током времена +StackSettings--call-tree-strategy-js-allocations = JavaScript алокације + .title = Сумирајте помоћу бајтова алоцираног JavaScript-а (без деалокација) +StackSettings--call-tree-strategy-native-retained-allocations = Задржана меморија + .title = Сумирајте помоћу бајтова меморије који су алоцирани и никада ослобођени у тренутном избору претпрегледа +StackSettings--call-tree-native-allocations = Алоцирана меморија + .title = Сумирајте помоћу бајтова алоциране меморије +StackSettings--call-tree-strategy-native-deallocations-memory = Ослобођена меморија + .title = Сумирајте помоћу бајтова ослобођене меморије, према месту где је меморија алоцирана +StackSettings--call-tree-strategy-native-deallocations-sites = Места ослобађања + .title = Сумирајте помоћу бајтова ослобођене меморије, према месту где је меморија ослобођена +StackSettings--invert-call-stack = Обрни стек позива + .title = Поређајте по времену потрошеном у чвору позива, игноришући његове потомке. +StackSettings--include-idle-samples = Укључите узорке мировања + .title = Понистите ознаку да бисте сакрили узорке чији је крајњи кадар у категорији мировања. +StackSettings--show-user-timing = Прикажите корисничка времена +StackSettings--use-stack-chart-same-widths = Користите исту ширину за сваки стек +StackSettings--panel-search = + .label = Филтрирајте стекове: + .title = Прикажите само стекове који садрже функцију чији се назив подудара са овом подниском + +## Tab Bar for the bottom half of the analysis UI. + +TabBar--calltree-tab = Стабло позива +TabBar--flame-graph-tab = Пламени график +TabBar--stack-chart-tab = График стека +TabBar--marker-chart-tab = График обележивача +TabBar--marker-table-tab = Табела обележивача +TabBar--network-tab = Мрежа +TabBar--js-tracer-tab = JS трагач + +## TabSelectorMenu +## This component is a context menu that's opened when you click on the root +## range at the top left corner for profiler analysis view. It's used to switch +## between tabs that were captured in the profile. + +TabSelectorMenu--all-tabs-and-windows = Сви језичци и прозори + +## TrackContextMenu +## This is used as a context menu for timeline to organize the tracks in the +## analysis UI. + +TrackContextMenu--only-show-this-process = Прикажите само овај процес +# This is used as the context menu item to show only the given track. +# Variables: +# $trackName (String) - Name of the selected track to isolate. +TrackContextMenu--only-show-track = Прикажите само „{ $trackName }“ +TrackContextMenu--hide-other-screenshots-tracks = Сакриј остале стазе снимака екрана +# This is used as the context menu item to hide the given track. +# Variables: +# $trackName (String) - Name of the selected track to hide. +TrackContextMenu--hide-track = Сакриј „{ $trackName }“ +TrackContextMenu--show-all-tracks = Прикажи све стазе +TrackContextMenu--show-local-tracks-in-process = Прикажи све стазе у овом процесу +# This is used as the context menu item to hide all tracks of the selected track's type. +# Variables: +# $type (String) - Name of the type of selected track to hide. +TrackContextMenu--hide-all-tracks-by-selected-track-type = Сакриј све стазе врсте „{ $type }“ +# This is used in the tracks context menu as a button to show all the tracks +# that match the search filter. +TrackContextMenu--show-all-matching-tracks = Прикажи све стазе које одговарају +# This is used in the tracks context menu as a button to hide all the tracks +# that match the search filter. +TrackContextMenu--hide-all-matching-tracks = Сакриј све стазе које одговарају +# This is used in the tracks context menu when the search filter doesn't match +# any track. +# Variables: +# $searchFilter (String) - The search filter string that user enters. +TrackContextMenu--no-results-found = Није пронађен ниједан резултат за „{ $searchFilter }“ +# This button appears when hovering a track name and is displayed as an X icon. +TrackNameButton--hide-track = + .title = Сакриј стазу +# This button appears when hovering a global track name and is displayed as an X icon. +TrackNameButton--hide-process = + .title = Сакриј процес + +## TrackMemoryGraph +## This is used to show the memory graph of that process in the timeline part of +## the UI. To learn more about it, visit: +## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track + +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = релативна меморија у овом тренутку +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = опсег меморије на графику +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = алокације и деалокације од претходног узорка + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU + +## TrackPower +## This is used to show the power used by the CPU and other chips in a computer, +## graphed over time. +## It's not always displayed in the UI, but an example can be found at +## https://share.firefox.dev/3a1fiT7. +## For the strings in this group, the carbon dioxide equivalent is computed from +## the used energy, using the carbon dioxide equivalent for electricity +## consumption. The carbon dioxide equivalent represents the equivalent amount +## of CO₂ to achieve the same level of global warming potential. + +# This is used in the tooltip when the power value uses the kilowatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-power-kilowatt = { $value } kW + .label = Снага +# This is used in the tooltip when the power value uses the watt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-power-watt = { $value } W + .label = Снага +# This is used in the tooltip when the instant power value uses the milliwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-power-milliwatt = { $value } mW + .label = Снага +# This is used in the tooltip when the instant power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-power-microwatt = { $value } μW + .label = Снага +# This is used in the tooltip when the power value uses the kilowatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-kilowatt = { $value } kW + .label = Просечна снага у тренутном избору +# This is used in the tooltip when the power value uses the watt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-watt = { $value } W + .label = Просечна снага у тренутном избору +# This is used in the tooltip when the instant power value uses the milliwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-milliwatt = { $value } mW + .label = Просечна снага у тренутном избору +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } μW + .label = Просечна снага у тренутном избору +# This is used in the tooltip when the energy used in the current range uses the +# kilowatt-hour unit. +# Variables: +# $value (String) - the energy value for this range +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value (kilograms) +TrackPower--tooltip-energy-carbon-used-in-range-kilowatthour = { $value } kWh ({ $carbonValue } kg CO₂e) + .label = Енергија потрошена у видљивом опсегу +# This is used in the tooltip when the energy used in the current range uses the +# watt-hour unit. +# Variables: +# $value (String) - the energy value for this range +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value (grams) +TrackPower--tooltip-energy-carbon-used-in-range-watthour = { $value } Wh ({ $carbonValue } g CO₂e) + .label = Енергија потрошена у видљивом опсегу +# This is used in the tooltip when the energy used in the current range uses the +# milliwatt-hour unit. +# Variables: +# $value (String) - the energy value for this range +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value (milligrams) +TrackPower--tooltip-energy-carbon-used-in-range-milliwatthour = { $value } mWh ({ $carbonValue } mg CO₂e) + .label = Енергија потрошена у видљивом опсегу +# This is used in the tooltip when the energy used in the current range uses the +# microwatt-hour unit. +# Variables: +# $value (String) - the energy value for this range +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value (milligrams) +TrackPower--tooltip-energy-carbon-used-in-range-microwatthour = { $value } µWh ({ $carbonValue } mg CO₂e) + .label = Енергија потрошена у видљивом опсегу +# This is used in the tooltip when the energy used in the current preview +# selection uses the kilowatt-hour unit. +# Variables: +# $value (String) - the energy value for this range +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value (kilograms) +TrackPower--tooltip-energy-carbon-used-in-preview-kilowatthour = { $value } kWh ({ $carbonValue } kg CO₂e) + .label = Енергија потрошена у тренутном избору +# This is used in the tooltip when the energy used in the current preview +# selection uses the watt-hour unit. +# Variables: +# $value (String) - the energy value for this range +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value (grams) +TrackPower--tooltip-energy-carbon-used-in-preview-watthour = { $value } Wh ({ $carbonValue } g CO₂e) + .label = Енергија потрошена у тренутном избору +# This is used in the tooltip when the energy used in the current preview +# selection uses the milliwatt-hour unit. +# Variables: +# $value (String) - the energy value for this range +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value (milligrams) +TrackPower--tooltip-energy-carbon-used-in-preview-milliwatthour = { $value } mWh ({ $carbonValue } mg CO₂e) + .label = Енергија потрошена у тренутном избору +# This is used in the tooltip when the energy used in the current preview +# selection uses the microwatt-hour unit. +# Variables: +# $value (String) - the energy value for this range +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value (milligrams) +TrackPower--tooltip-energy-carbon-used-in-preview-microwatthour = { $value } µWh ({ $carbonValue } mg CO₂e) + .label = Енергија потрошена у тренутном избору + +## TrackBandwidth +## This is used to show how much data was transfered over time. +## For the strings in this group, the carbon dioxide equivalent is estimated +## from the amount of data transfered. +## The carbon dioxide equivalent represents the equivalent amount +## of CO₂ to achieve the same level of global warming potential. + +# This is used in the tooltip of the bandwidth track. +# Variables: +# $value (String) - the value for the data transfer speed. +# Will contain the unit (eg. B, KB, MB) +TrackBandwidthGraph--speed = { $value } по секунди + .label = Брзина преноса за овај узорак +# This is used in the tooltip of the bandwidth track. +# Variables: +# $value (String) - how many read or write operations were performed since the previous sample +TrackBandwidthGraph--read-write-operations-since-the-previous-sample = { $value } + .label = операције читања/писања од претходног узорка +# This is used in the tooltip of the bandwidth track. +# Variables: +# $value (String) - the total of transfered data until the hovered time. +# Will contain the unit (eg. B, KB, MB) +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value in grams +TrackBandwidthGraph--cumulative-bandwidth-at-this-time = { $value } ({ $carbonValue } g CO₂e) + .label = Подаци пренешени до овог тренутка +# This is used in the tooltip of the bandwidth track. +# Variables: +# $value (String) - the total of transfered data during the visible time range. +# Will contain the unit (eg. B, KB, MB) +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value in grams +TrackBandwidthGraph--total-bandwidth-in-graph = { $value } ({ $carbonValue } g CO₂e) + .label = Подаци пренешени у видљивом опсегу +# This is used in the tooltip of the bandwidth track when a range is selected. +# Variables: +# $value (String) - the total of transfered data during the selected time range. +# Will contain the unit (eg. B, KB, MB) +# $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value in grams +TrackBandwidthGraph--total-bandwidth-in-range = { $value } ({ $carbonValue } g CO₂e) + .label = Подаци пренешени у тренутном избору + +## TrackSearchField +## The component that is used for the search input in the track context menu. + +TrackSearchField--search-input = + .placeholder = Унесите појмове за филтрирање + .title = Прикажите само стазе које одговарају одређеном тексту + +## TransformNavigator +## Navigator for the applied transforms in the Call Tree, Flame Graph, and Stack +## Chart components. +## These messages are displayed above the table / graph once the user selects to +## apply a specific transformation function to a node in the call tree. It's the +## name of the function, followed by the node's name. +## To learn more about them, visit: +## https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=transforms + +# Root item in the transform navigator. +# "Complete" is an adjective here, not a verb. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=collapse +# Variables: +# $item (String) - Name of the current thread. E.g.: Web Content. +TransformNavigator--complete = Потпун „{ $item }“ +# "Collapse resource" transform. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=collapse +# Variables: +# $item (String) - Name of the resource that collapsed. E.g.: libxul.so. +TransformNavigator--collapse-resource = Скупљање: { $item } +# "Focus subtree" transform. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=focus +# Variables: +# $item (String) - Name of the function that transform applied to. +TransformNavigator--focus-subtree = Фокусирање чвора: { $item } +# "Focus function" transform. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=focus +# Variables: +# $item (String) - Name of the function that transform applied to. +TransformNavigator--focus-function = Фокусирање: { $item } +# "Focus self" transform. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=focus-on-function-self +# Also see the translation note above CallNodeContextMenu--transform-focus-self. +# Variables: +# $item (String) - Name of the function that transform applied to. +TransformNavigator--focus-self = Фокусирање на себе: { $item } +# "Focus category" transform. The word "Focus" has the meaning of an adjective here. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=focus-category +# Variables: +# $item (String) - Name of the category that transform applied to. +TransformNavigator--focus-category = Фокусирана категорија: { $item } +# "Merge call node" transform. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=merge +# Variables: +# $item (String) - Name of the function that transform applied to. +TransformNavigator--merge-call-node = Спајање чвора: { $item } +# "Merge function" transform. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=merge +# Variables: +# $item (String) - Name of the function that transform applied to. +TransformNavigator--merge-function = Спајање: { $item } +# "Drop function" transform. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=drop +# Variables: +# $item (String) - Name of the function that transform applied to. +TransformNavigator--drop-function = Уклањање: { $item } +# "Collapse recursion" transform. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=collapse +# Variables: +# $item (String) - Name of the function that transform applied to. +TransformNavigator--collapse-recursion = Скупљање рекурзије: { $item } +# "Collapse direct recursion" transform. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=collapse +# Variables: +# $item (String) - Name of the function that transform applied to. +TransformNavigator--collapse-direct-recursion-only = Скупљање само директне рекурзије: { $item } +# "Collapse function subtree" transform. +# See: https://profiler.firefox.com/docs/#/./guide-filtering-call-trees?id=collapse +# Variables: +# $item (String) - Name of the function that transform applied to. +TransformNavigator--collapse-function-subtree = Скупљање подстабла: { $item } +# "Drop samples outside of markers matching ..." transform. +# Variables: +# $item (String) - Search filter of the markers that transform will apply to. +TransformNavigator--drop-samples-outside-of-markers-matching = Уклањање узорака ван обележивача који одговарају: „{ $item }“ + +## "Bottom box" - a view which contains the source view and the assembly view, +## at the bottom of the profiler UI +## +## Some of these string IDs still start with SourceView, even though the strings +## are used for both the source view and the assembly view. + +# Displayed while a view in the bottom box is waiting for code to load from +# the network. +# Variables: +# $host (String) - The "host" part of the URL, e.g. hg.mozilla.org +SourceView--loading-url = Чека се { $host }… +# Displayed while a view in the bottom box is waiting for code to load from +# the browser. +SourceView--loading-browser-connection = Чека се { -firefox-brand-name }… +# Displayed whenever the source view was not able to get the source code for +# a file. +BottomBox--source-code-not-available-title = Изворни код није доступан +# Displayed whenever the source view was not able to get the source code for +# a file. +# Elements: +# link text - A link to the github issue about supported scenarios. +SourceView--source-not-available-text = Погледајте проблем #3741 за подржане сценарије и планирана побољшања. +# Displayed whenever the assembly view was not able to get the assembly code for +# a file. +# Assembly refers to the low-level programming language. +BottomBox--assembly-code-not-available-title = Асемблерски код није доступан +# Displayed whenever the assembly view was not able to get the assembly code for +# a file. +# Elements: +# link text - A link to the github issue about supported scenarios. +BottomBox--assembly-code-not-available-text = Погледајте проблем #4520 за подржане сценарије и планирана побољшања. +# The toggle button for making the bottom box fullscreen. +BottomBox--hide-fullscreen = + .title = Изађи из целог екрана +# The toggle button for making the bottom box fullscreen. +BottomBox--show-fullscreen = + .title = Цео екран +SourceView--close-button = + .title = Затвори преглед изворног кода + +## Code loading errors +## These are displayed both in the source view and in the assembly view. +## The string IDs here currently all start with SourceView for historical reasons. + +# Displayed below SourceView--cannot-obtain-source, if the profiler does not +# know which URL to request source code from. +SourceView--no-known-cors-url = Не постоји позната URL адреса приступачна путем cross-origin-а за ову датотеку. +# Displayed below SourceView--cannot-obtain-source, if there was a network error +# when fetching the source code for a file. +# Variables: +# $url (String) - The URL which we tried to get the source code from +# $networkErrorMessage (String) - The raw internal error message that was encountered by the network request, not localized +SourceView--network-error-when-obtaining-source = Дошло је до мрежне грешке при преузимању URL адресе { $url }: { $networkErrorMessage } +# Displayed below SourceView--cannot-obtain-source, if the browser could not +# be queried for source code using the symbolication API. +# Variables: +# $browserConnectionErrorMessage (String) - The raw internal error message, not localized +SourceView--browser-connection-error-when-obtaining-source = Није било могуће упити API за симболизацију прегледача: { $browserConnectionErrorMessage } +# Displayed below SourceView--cannot-obtain-source, if the browser was queried +# for source code using the symbolication API, and this query returned an error. +# Variables: +# $apiErrorMessage (String) - The raw internal error message from the API, not localized +SourceView--browser-api-error-when-obtaining-source = API за симболизацију прегледача је вратио грешку: { $apiErrorMessage } +# Displayed below SourceView--cannot-obtain-source, if a symbol server which is +# running locally was queried for source code using the symbolication API, and +# this query returned an error. +# Variables: +# $apiErrorMessage (String) - The raw internal error message from the API, not localized +SourceView--local-symbol-server-api-error-when-obtaining-source = API за симболизацију локалног сервера симбола је вратио грешку: { $apiErrorMessage } +# Displayed below SourceView--cannot-obtain-source, if the browser was queried +# for source code using the symbolication API, and this query returned a malformed response. +# Variables: +# $apiErrorMessage (String) - The raw internal error message from the API, not localized +SourceView--browser-api-malformed-response-when-obtaining-source = API за симболизацију прегледача је вратио неисправан одговор: { $apiErrorMessage } +# Displayed below SourceView--cannot-obtain-source, if a symbol server which is +# running locally was queried for source code using the symbolication API, and +# this query returned a malformed response. +# Variables: +# $apiErrorMessage (String) - The raw internal error message from the API, not localized +SourceView--local-symbol-server-api-malformed-response-when-obtaining-source = API за симболизацију локалног сервера симбола је вратио неисправан одговор: { $apiErrorMessage } +# Displayed below SourceView--cannot-obtain-source, if a file could not be found in +# an archive file (.tar.gz) which was downloaded from crates.io. +# Variables: +# $url (String) - The URL from which the "archive" file was downloaded. +# $pathInArchive (String) - The raw path of the member file which was not found in the archive. +SourceView--not-in-archive-error-when-obtaining-source = Датотека { $pathInArchive } није пронађена у архиви са адресе { $url }. +# Displayed below SourceView--cannot-obtain-source, if the file format of an +# "archive" file was not recognized. The only supported archive formats at the +# moment are .tar and .tar.gz, because that's what crates.io uses for .crates files. +# Variables: +# $url (String) - The URL from which the "archive" file was downloaded. +# $parsingErrorMessage (String) - The raw internal error message during parsing, not localized +SourceView--archive-parsing-error-when-obtaining-source = Није било могуће анализирати архиву на адреси { $url }: { $parsingErrorMessage } +# Displayed below SourceView--cannot-obtain-source, if a JS file could not be found in +# the browser. +# Variables: +# $url (String) - The URL of the JS source file. +# $sourceUuid (number) - The UUID of the JS source file. +# $errorMessage (String) - The raw internal error message, not localized +SourceView--not-in-browser-error-when-obtaining-js-source = Прегледач није успео да преузме изворну датотеку за { $url } са sourceUuid { $sourceUuid }: { $errorMessage }. + +## Toggle buttons in the top right corner of the bottom box + +# The toggle button for the assembly view, while the assembly view is hidden. +# Assembly refers to the low-level programming language. +AssemblyView--show-button = + .title = Прикажи преглед асемблера +# The toggle button for the assembly view, while the assembly view is shown. +# Assembly refers to the low-level programming language. +AssemblyView--hide-button = + .title = Сакриј преглед асемблера +# The "◀" button above the assembly view. +AssemblyView--prev-button = + .title = Претходно +# The "▶" button above the assembly view. +AssemblyView--next-button = + .title = Следеће +# The label showing the current position and total count above the assembly view. +# Variables: +# $current (Number) - The current position (1-indexed). +# $total (Number) - The total count. +AssemblyView--position-label = { $current } од { $total } + +## UploadedRecordingsHome +## This is the page that displays all the profiles that user has uploaded. +## See: https://profiler.firefox.com/uploaded-recordings/ + +UploadedRecordingsHome--title = Послати снимци diff --git a/locales/sv-SE/app.ftl b/locales/sv-SE/app.ftl index d893a69489..79e9a8fd44 100644 --- a/locales/sv-SE/app.ftl +++ b/locales/sv-SE/app.ftl @@ -292,16 +292,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Rapportera felet på GitHub -## Footer Links - -FooterLinks--legal = Juridisk information -FooterLinks--Privacy = Sekretesspolicy -FooterLinks--Cookies = Kakor -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = Inställningar +SettingsMenu--docs = Dokumentation +SettingsMenu--legal = Juridisk information +SettingsMenu--privacy = Sekretess +SettingsMenu--cookies = Kakor +SettingsMenu--language-switcher = .title = Ändra språk -FooterLinks--hide-button = - .title = Dölj sidfotslänkar - .aria-label = Dölj sidfotslänkar ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -518,7 +519,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Fel vid uppladdning MenuButtons--index--revert = Återgå till originalprofil -MenuButtons--index--docs = Dokument MenuButtons--permalink--button = .label = Permalänk @@ -886,9 +886,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = relativa minnet vid denna tidpunkt -TrackMemoryGraph--memory-range-in-graph = minnesintervall i grafen -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = allokeringar och deallokeringar sedan föregående prov +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = relativt minne vid denna tidpunkt +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = minnesområde i grafen +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = allokeringar och avallokeringar sedan föregående urval + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -935,6 +952,11 @@ TrackPower--tooltip-average-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = Genomsnittlig effekt i det aktuella valet +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } μW + .label = Genomsnittlig effekt i det aktuella valet # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/locales/tr/app.ftl b/locales/tr/app.ftl index 2a9f89684d..091d0a11e5 100644 --- a/locales/tr/app.ftl +++ b/locales/tr/app.ftl @@ -138,6 +138,11 @@ CallTree--tracing-ms-total = Çalışma süresi (ms) .title = “Toplam” çalışma süresi, bu fonksiyonun yığında gözlemlendiği tüm sürenin özetini içerir. Bu süre, fonksiyonun kendisinin çalıştığı süreyi ve bu fonksiyondan çağırılanların sürelerini içerir. CallTree--tracing-ms-self = Öz (ms) .title = “Öz” süre yalnızca fonksiyonun yığının sonunda olduğu süreyi içerir. Eğer fonksiyon başka fonksiyonları çağırmışsa diğer fonksiyonların süresi dahil değildir. Öz süre, programda asıl nerede zaman harcandığını anlamak için faydalıdır. +CallTree--samples-total = Toplam (örnekler) + .title = + “Toplam” örnek sayısı, bu fonksiyonun yığın üzerinde görüldüğü her örneğin + bir özetini içerir. Fonksiyonun gerçekten çalıştığı süre ile bu fonksiyondan + çağrılan fonksiyonlarda geçirilen süre de buna dahildir. ## Call tree "badges" (icons) with tooltips ## @@ -238,16 +243,17 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Hatayı GitHub’da rapor et -## Footer Links +## Settings Menu +## The settings popup opened from the cog icon in the top bar. -FooterLinks--legal = Hukuki bilgiler -FooterLinks--Privacy = Gizlilik -FooterLinks--Cookies = Çerezler -FooterLinks--languageSwitcher--select = - .title = Dili değiştir -FooterLinks--hide-button = - .title = Alt bilgi bağlantılarını gizle - .aria-label = Alt bilgi bağlantılarını gizle +SettingsMenu--button = + .title = Ayarlar +SettingsMenu--docs = Belgelendirme +SettingsMenu--legal = Hukuki Bilgiler +SettingsMenu--privacy = Gizlilik +SettingsMenu--cookies = Çerezler +SettingsMenu--language-switcher = + .title = Dil değiştir ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -288,6 +294,9 @@ Home--record-instructions = Home--instructions-content2 = Performans profilleri yalnızca { -firefox-brand-name }’un masaüstü sürümü ile kaydedilebilir. Ancak mevcut profiller herhangi bir modern tarayıcıda görüntülenebilir. +Home--fenix-instructions-directly = + { -firefox-android-brand-name } bu cihazda doğrudan profillenebilir. + Daha fazla bilgi için { -firefox-android-brand-name } uygulamasını cihazda doğrudan profilleme sayfasını okuyabilirsiniz. Home--record-instructions-start-stop = Profillemeyi durdur ve başlat Home--record-instructions-capture-load = Profili yakala ve yükle Home--profiler-motto = Performans profili kaydedin. Analiz edin. Paylaşın. Web’i daha hızlı hale getirin. @@ -439,7 +448,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Yükleme başarısız MenuButtons--index--revert = Orijinal profile geri dön -MenuButtons--index--docs = Dokümanlar MenuButtons--permalink--button = .label = Kalıcı bağlantı @@ -786,15 +794,6 @@ TrackNameButton--hide-track = TrackNameButton--hide-process = .title = İşlemi gizle -## TrackMemoryGraph -## This is used to show the memory graph of that process in the timeline part of -## the UI. To learn more about it, visit: -## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track - -TrackMemoryGraph--relative-memory-at-this-time = bu süredeki göreli bellek -TrackMemoryGraph--memory-range-in-graph = grafikteki bellek aralığı -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = önceki örnekten beri yapılan atamalar ve serbest bırakmalar - ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, ## graphed over time. diff --git a/locales/uk/app.ftl b/locales/uk/app.ftl index 63f1eee8c4..09a4c07f48 100644 --- a/locales/uk/app.ftl +++ b/locales/uk/app.ftl @@ -263,17 +263,6 @@ ErrorBoundary--report-error-to-developers-description = # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = Повідомити про помилку на GitHub -## Footer Links - -FooterLinks--legal = Правові положення -FooterLinks--Privacy = Приватність -FooterLinks--Cookies = Файли cookie -FooterLinks--languageSwitcher--select = - .title = Змінити мову -FooterLinks--hide-button = - .title = Сховати посилання нижнього колонтитула - .aria-label = Сховати посилання нижнього колонтитула - ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the ## page. @@ -453,7 +442,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = Помилка вивантаження MenuButtons--index--revert = Повернутися до початкового профілю -MenuButtons--index--docs = Документи MenuButtons--permalink--button = .label = Стороннє посилання @@ -821,15 +809,6 @@ TrackNameButton--hide-track = TrackNameButton--hide-process = .title = Сховати процес -## TrackMemoryGraph -## This is used to show the memory graph of that process in the timeline part of -## the UI. To learn more about it, visit: -## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track - -TrackMemoryGraph--relative-memory-at-this-time = відносна пам'ять на цю мить -TrackMemoryGraph--memory-range-in-graph = діапазон пам'яті в графіку -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = розподіл і вивільнення після попереднього зразка - ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, ## graphed over time. diff --git a/locales/zh-CN/app.ftl b/locales/zh-CN/app.ftl index 3cf05d372d..1906673324 100644 --- a/locales/zh-CN/app.ftl +++ b/locales/zh-CN/app.ftl @@ -231,16 +231,17 @@ ErrorBoundary--report-error-to-developers-description = 请将此问题报告给 # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = 到 GitHub 报告错误 -## Footer Links - -FooterLinks--legal = 法律 -FooterLinks--Privacy = 隐私 -FooterLinks--Cookies = Cookie -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = 设置 +SettingsMenu--docs = 文档 +SettingsMenu--legal = 法律信息 +SettingsMenu--privacy = 隐私 +SettingsMenu--cookies = Cookie +SettingsMenu--language-switcher = .title = 更改语言 -FooterLinks--hide-button = - .title = 隐藏页脚链接 - .aria-label = 隐藏页脚链接 ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -430,7 +431,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = 上传时出错 MenuButtons--index--revert = 恢复到原始分析记录 -MenuButtons--index--docs = 文档 MenuButtons--permalink--button = .label = 永久链接 @@ -720,6 +720,8 @@ StackSettings--call-tree-strategy-native-deallocations-sites = 释放的位置 .title = 按照取释放内存的位置,根据释放的内存字节数进行汇总 StackSettings--invert-call-stack = 反转调用栈 .title = 按照调用节点中所用时间排序,并忽略其 children。 +StackSettings--include-idle-samples = 包含空闲样本 + .title = 取消勾选可隐藏叶帧属于“空闲”类别的样本。 StackSettings--show-user-timing = 显示用户计时 StackSettings--use-stack-chart-same-widths = 所有栈使用相同宽度显示 StackSettings--panel-search = @@ -781,15 +783,6 @@ TrackNameButton--hide-track = TrackNameButton--hide-process = .title = 隐藏进程 -## TrackMemoryGraph -## This is used to show the memory graph of that process in the timeline part of -## the UI. To learn more about it, visit: -## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track - -TrackMemoryGraph--relative-memory-at-this-time = 此时的相对内存用量 -TrackMemoryGraph--memory-range-in-graph = 图表里的内存范围 -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = 自上次采样以来的分配和释放情况 - ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, ## graphed over time. diff --git a/locales/zh-TW/app.ftl b/locales/zh-TW/app.ftl index 9dcb93831c..bc16bcecaf 100644 --- a/locales/zh-TW/app.ftl +++ b/locales/zh-TW/app.ftl @@ -231,16 +231,17 @@ ErrorBoundary--report-error-to-developers-description = 請將此問題報告給 # This is used in a call to action button, displayed inside the error box. ErrorBoundary--report-error-on-github = 到 GitHub 回報錯誤 -## Footer Links - -FooterLinks--legal = 法律資訊 -FooterLinks--Privacy = 隱私權 -FooterLinks--Cookies = Cookie -FooterLinks--languageSwitcher--select = +## Settings Menu +## The settings popup opened from the cog icon in the top bar. + +SettingsMenu--button = + .title = 設定 +SettingsMenu--docs = 文件 +SettingsMenu--legal = 法律資訊 +SettingsMenu--privacy = 隱私權 +SettingsMenu--cookies = Cookie +SettingsMenu--language-switcher = .title = 變更語言 -FooterLinks--hide-button = - .title = 隱藏頁尾鏈結 - .aria-label = 隱藏頁尾鏈結 ## FullTimeline ## The timeline component of the full view in the analysis UI at the top of the @@ -427,7 +428,6 @@ MenuButtons--index--share-re-upload = MenuButtons--index--share-error-uploading = .label = 上傳時發生錯誤 MenuButtons--index--revert = 回復到原始檢測檔 -MenuButtons--index--docs = 文件 MenuButtons--permalink--button = .label = 永久鏈結 @@ -785,9 +785,26 @@ TrackNameButton--hide-process = ## the UI. To learn more about it, visit: ## https://profiler.firefox.com/docs/#/./memory-allocations?id=memory-track -TrackMemoryGraph--relative-memory-at-this-time = 此時的相對記憶體用量 -TrackMemoryGraph--memory-range-in-graph = 圖表中的記憶體範圍 -TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = 上次取樣以來的分配與取消分配 +# Variables: +# $value (String) - the relative memory at this time (e.g. "5MB") +TrackMemoryGraph--relative-memory-at-this-time2 = { $value } + .label = 此時間點的相對記憶體 +# Variables: +# $value (String) - the memory range across the graph (e.g. "5MB") +TrackMemoryGraph--memory-range-in-graph2 = { $value } + .label = 圖表中的記憶體範圍 +# Variables: +# $value (String) - count of allocations and deallocations since the previous sample +TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample2 = { $value } + .label = 自上一次取樣的分配與取消分配 + +## TrackProcessCPUGraph +## This is used to show the CPU usage of a process over time in the timeline. + +# Variables: +# $value (String) - the CPU usage at this sample (e.g. "50%") +TrackProcessCPUGraph--cpu = { $value } + .label = CPU ## TrackPower ## This is used to show the power used by the CPU and other chips in a computer, @@ -834,6 +851,11 @@ TrackPower--tooltip-average-power-watt = { $value } W # $value (String) - the power value at this location TrackPower--tooltip-average-power-milliwatt = { $value } mW .label = 目前選擇範圍的平均功率 +# This is used in the tooltip when the power value uses the microwatt unit. +# Variables: +# $value (String) - the power value at this location +TrackPower--tooltip-average-power-microwatt = { $value } μW + .label = 目前選擇範圍中的平均電力 # This is used in the tooltip when the energy used in the current range uses the # kilowatt-hour unit. # Variables: diff --git a/package.json b/package.json index 42c936abfa..b0f2b85b7d 100644 --- a/package.json +++ b/package.json @@ -70,19 +70,20 @@ "@codemirror/lang-rust": "^6.0.2", "@codemirror/language": "^6.12.3", "@codemirror/state": "^6.6.0", - "@codemirror/view": "^6.41.1", - "@firefox-devtools/react-contextmenu": "^5.2.3", + "@codemirror/view": "^6.43.0", + "@firefox-devtools/react-contextmenu": "^5.2.4", "@fluent/bundle": "^0.19.1", "@fluent/langneg": "^0.7.0", "@fluent/react": "^0.15.2", "@lezer/highlight": "^1.2.3", + "@lezer/javascript": "^1.5.4", "@streamparser/json": "^0.0.22", "@tgwf/co2": "^0.18.0", "array-move": "^3.0.1", "array-range": "^1.0.1", "clamp": "^1.0.1", "classnames": "^2.5.1", - "commander": "^14.0.3", + "commander": "^15.0.0", "common-tags": "^1.8.2", "copy-to-clipboard": "^4.0.2", "core-js": "^3.49.0", @@ -91,34 +92,37 @@ "gecko-profiler-demangle": "^0.4.0", "idb": "^8.0.3", "iongraph-web": "0.2.1", + "json-slabs": "^0.3.0", "jszip": "^3.10.1", "long": "^5.3.2", "memoize-immutable": "^3.0.0", "memoize-one": "^6.0.0", - "minimist": "^1.2.8", "mixedtuplemap": "^1.0.0", "namedtuplemap": "^1.0.0", "photon-colors": "^3.3.2", - "protobufjs": "^8.4.0", - "query-string": "^9.3.1", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "protobufjs": "^8.6.3", + "query-string": "^9.4.0", + "react": "~19.1.8", + "react-dom": "~19.1.8", "react-intersection-observer": "^10.0.3", - "react-redux": "^9.2.0", + "react-redux": "^9.3.0", "redux": "^5.0.1", "redux-logger": "^3.0.6", "redux-thunk": "^3.1.0", "reselect": "^4.1.8", - "valibot": "^1.4.0", + "smol-toml": "^1.6.1", + "source-map": "^0.7.6", + "url": "^0.11.4", + "valibot": "^1.4.1", "workbox-window": "^7.4.1" }, "devDependencies": { - "@babel/core": "^7.29.0", - "@babel/eslint-parser": "^7.28.6", - "@babel/eslint-plugin": "^7.27.1", - "@babel/preset-env": "^7.29.5", - "@babel/preset-react": "^7.28.5", - "@babel/preset-typescript": "^7.28.5", + "@babel/core": "^7.29.7", + "@babel/eslint-parser": "^7.29.7", + "@babel/eslint-plugin": "^7.29.7", + "@babel/preset-env": "^7.29.7", + "@babel/preset-react": "^7.29.7", + "@babel/preset-typescript": "^7.29.7", "@eslint/js": "^9.39.4", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", @@ -126,25 +130,24 @@ "@types/clamp": "^1.0.3", "@types/common-tags": "^1.8.4", "@types/jest": "^30.0.0", - "@types/minimist": "^1.2.5", - "@types/node": "^22.19.19", + "@types/node": "^24.13.2", "@types/query-string": "^6.3.0", - "@types/react": "^18.3.29", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.2.15", + "@types/react-dom": "^19.2.3", "@types/redux-logger": "^3.0.6", "@types/tgwf__co2": "^0.14.2", - "@typescript-eslint/eslint-plugin": "^8.59.1", - "@typescript-eslint/parser": "^8.59.1", + "@typescript-eslint/eslint-plugin": "^8.60.0", + "@typescript-eslint/parser": "^8.60.0", "alex": "^11.0.1", "babel-jest": "^30.4.1", "babel-plugin-module-resolver": "^5.0.3", "browserslist": "^4.28.2", "browserslist-to-esbuild": "^2.1.1", - "caniuse-lite": "^1.0.30001792", + "caniuse-lite": "^1.0.30001793", "cross-env": "^10.1.0", "cross-spawn": "^7.0.6", "devtools-license-check": "^0.9.0", - "esbuild": "^0.28.0", + "esbuild": "^0.28.1", "esbuild-plugin-copy": "^2.1.1", "esbuild-plugin-wasm": "^1.1.0", "eslint": "^9.39.4", @@ -168,14 +171,14 @@ "open": "^11.0.0", "oxfmt": "^0.51.0", "patch-package": "^8.0.1", - "postcss": "^8.5.14", + "postcss": "^8.5.15", "postinstall-postinstall": "^2.1.0", "rimraf": "^6.1.3", - "stylelint": "^17.9.1", + "stylelint": "^17.12.0", "stylelint-config-idiomatic-order": "^10.0.0", "stylelint-config-standard": "^40.0.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.59.1", + "typescript-eslint": "^8.60.0", "workbox-cli": "^7.4.1", "yargs": "^18.0.0" }, diff --git a/profiler-cli/package.json b/profiler-cli/package.json index c24e70766b..5d528a63d7 100644 --- a/profiler-cli/package.json +++ b/profiler-cli/package.json @@ -1,6 +1,6 @@ { "name": "@firefox-devtools/profiler-cli", - "version": "0.2.0", + "version": "0.2.1", "description": "Command-line interface for querying Firefox Profiler profiles with persistent daemon sessions", "scripts": { "prepublishOnly": "node ../scripts/verify-profiler-cli-build.mjs" diff --git a/profiler-cli/src/client.ts b/profiler-cli/src/client.ts index b343797b50..4704c2a063 100644 --- a/profiler-cli/src/client.ts +++ b/profiler-cli/src/client.ts @@ -213,6 +213,26 @@ export async function sendCommand( return sendMessage(sessionDir, { type: 'command', command }, sessionId); } +function hasProxyEnvVar(): boolean { + return Boolean( + process.env.HTTP_PROXY || + process.env.HTTPS_PROXY || + process.env.http_proxy || + process.env.https_proxy + ); +} + +function formatEarlyExitError(earlyExit: { + code: number | null; + signal: NodeJS.Signals | null; +}): string { + const reason = + earlyExit.signal !== null + ? `signal ${earlyExit.signal}` + : `exit code ${earlyExit.code}`; + return `Daemon process exited unexpectedly during startup (${reason}). Run with PROFILER_CLI_SESSION_DIR set and check the session directory for a log file, or re-run after upgrading Node.js.`; +} + /** * Start a new daemon for the given profile. * Uses a two-phase approach: @@ -257,10 +277,21 @@ export async function startNewDaemon( // Get the path to the current script (profiler-cli.js) const scriptPath = process.argv[1]; + // --use-env-proxy was added in Node.js 24. On older runtimes node would + // exit immediately with "bad option", taking the daemon down with it. + const nodeMajor = parseInt(process.versions.node.split('.')[0], 10); + const supportsUseEnvProxy = nodeMajor >= 24; + + if (!supportsUseEnvProxy && hasProxyEnvVar()) { + console.warn( + `Warning: Node.js ${process.versions.node} detected. HTTP_PROXY/HTTPS_PROXY env vars will not be honored when fetching profiles or symbols. Upgrade to Node.js >= 24 for proxy support.` + ); + } + const daemonArgs = [ // Make fetch respect HTTP_PROXY/HTTPS_PROXY/NO_PROXY. This is the default - // in a lot of tools like, curl, python, go etc. - '--use-env-proxy', + // in a lot of tools like curl, python, go etc. + ...(supportsUseEnvProxy ? ['--use-env-proxy'] : []), scriptPath, '--daemon', absolutePath, @@ -285,6 +316,19 @@ export async function startNewDaemon( // Unref so parent can exit child.unref(); + // Observe early daemon death so spawn-time failures surface immediately + // instead of as a generic 500ms validation timeout. + const daemonStartupState: { + earlyExit: { code: number | null; signal: NodeJS.Signals | null } | null; + spawnError: Error | null; + } = { earlyExit: null, spawnError: null }; + child.once('exit', (code, signal) => { + daemonStartupState.earlyExit = { code, signal }; + }); + child.once('error', (err) => { + daemonStartupState.spawnError = err; + }); + // Phase 1: Wait for daemon to be validated (short timeout) const daemonStartMaxAttempts = 10; // 10 * 50ms = 500ms let attempts = 0; @@ -293,6 +337,15 @@ export async function startNewDaemon( await new Promise((resolve) => setTimeout(resolve, 50)); attempts++; + if (daemonStartupState.spawnError) { + throw new Error( + `Failed to spawn daemon: ${daemonStartupState.spawnError.message}` + ); + } + if (daemonStartupState.earlyExit) { + throw new Error(formatEarlyExitError(daemonStartupState.earlyExit)); + } + // Validate the session (checks metadata exists, process running, socket exists) if (await validateSession(sessionDir, targetSessionId)) { // Daemon is validated and running @@ -302,6 +355,9 @@ export async function startNewDaemon( // Check if daemon started successfully after polling if (!(await validateSession(sessionDir, targetSessionId))) { + if (daemonStartupState.earlyExit) { + throw new Error(formatEarlyExitError(daemonStartupState.earlyExit)); + } throw new Error( `Failed to start daemon: session not validated after ${daemonStartMaxAttempts * 50}ms` ); diff --git a/res/css/global.css b/res/css/global.css index 1fcabb3a70..61ec860915 100644 --- a/res/css/global.css +++ b/res/css/global.css @@ -15,6 +15,7 @@ --z-copy-table-warning: 4; --z-tree-view: 0; --z-tree-view-inner: 2; + --z-tree-view-header-divider: 1; --z-overflow-edge-indicator: 3; --z-chart-viewport-expanded: 1; --z-timeline-selection: 1; diff --git a/res/img/svg/cog-12.svg b/res/img/svg/cog-12.svg new file mode 100644 index 0000000000..e0cb45dfe1 --- /dev/null +++ b/res/img/svg/cog-12.svg @@ -0,0 +1,6 @@ + + + + diff --git a/res/img/svg/cog-light-12.svg b/res/img/svg/cog-light-12.svg new file mode 100644 index 0000000000..8f02e82250 --- /dev/null +++ b/res/img/svg/cog-light-12.svg @@ -0,0 +1,6 @@ + + + + diff --git a/scripts/build-profiler-cli.mjs b/scripts/build-profiler-cli.mjs index 4cff0ef1d9..9e90b69c28 100644 --- a/scripts/build-profiler-cli.mjs +++ b/scripts/build-profiler-cli.mjs @@ -23,6 +23,9 @@ const profilerCliConfig = { define: { __BUILD_HASH__: JSON.stringify(BUILD_HASH), __VERSION__: JSON.stringify(version), + // SOURCE_MAP_WORKER_PATH is injected by the browser build. The CLI doesn't + // use source map workers but the shared code references this constant. + SOURCE_MAP_WORKER_PATH: JSON.stringify('/source-map.worker.js'), }, external: [...nodeBaseConfig.external, 'gecko-profiler-demangle'], }; diff --git a/scripts/build.mjs b/scripts/build.mjs index 13334a63cf..01ebca600d 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -3,14 +3,32 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ import esbuild from 'esbuild'; -import { mainBundleConfig } from './lib/esbuild-configs.mjs'; +import { + mainBundleConfig, + sourceMapWorkerConfig, + getSourceMapWorkerPath, +} from './lib/esbuild-configs.mjs'; import { cleanDist, saveMetafile } from './lib/build-utils.mjs'; async function build() { cleanDist(); - const buildResult = await esbuild.build(mainBundleConfig); + + // Build the worker first so we can read its output path from the metafile + // and inject it into the main bundle via SOURCE_MAP_WORKER_PATH. + const workerResult = await esbuild.build(sourceMapWorkerConfig); + + const buildResult = await esbuild.build({ + ...mainBundleConfig, + define: { + ...mainBundleConfig.define, + SOURCE_MAP_WORKER_PATH: JSON.stringify( + getSourceMapWorkerPath(workerResult.metafile) + ), + }, + }); + saveMetafile(buildResult); - console.log('✅ Main browser build completed'); + console.log('✅ Main browser build and source map worker completed'); } build().catch(console.error); diff --git a/scripts/lib/dev-server.mjs b/scripts/lib/dev-server.mjs index 471924d58e..aae460741e 100644 --- a/scripts/lib/dev-server.mjs +++ b/scripts/lib/dev-server.mjs @@ -56,6 +56,7 @@ export async function startDevServer(buildConfig, options = {}) { fallback = 'index.html', onServerStart, cleanDist = true, + extraWatchConfigs = [], } = options; // Clean dist directory first @@ -77,6 +78,12 @@ export async function startDevServer(buildConfig, options = {}) { // Start watching for changes await buildContext.watch(); + // Watch extra configs (no serving needed, just watch for rebuilds) + const extraContexts = await Promise.all( + extraWatchConfigs.map((config) => esbuild.context(config)) + ); + await Promise.all(extraContexts.map((ctx) => ctx.watch())); + // Create HTTP server const server = http.createServer((req, res) => { // Validate Host header @@ -135,7 +142,9 @@ export async function startDevServer(buildConfig, options = {}) { isShuttingDown = true; console.log('\nShutting down...'); - await buildContext.dispose(); + await Promise.all( + [buildContext, ...extraContexts].map((ctx) => ctx.dispose()) + ); server.close(); process.exit(0); }); diff --git a/scripts/lib/esbuild-configs.mjs b/scripts/lib/esbuild-configs.mjs index 42f97c868b..df7a2cf3b6 100644 --- a/scripts/lib/esbuild-configs.mjs +++ b/scripts/lib/esbuild-configs.mjs @@ -81,6 +81,9 @@ export const mainBundleConfig = { : 'undefined', // no need to define NODE_ENV: // esbuild automatically defines NODE_ENV based on the value for "minify" + // In dev, the worker is not hashed so the path is predictable. + // In production, build.mjs overrides this after building the worker first. + SOURCE_MAP_WORKER_PATH: JSON.stringify('/source-map.worker.js'), }, external: ['zlib'], plugins: [ @@ -98,6 +101,10 @@ export const mainBundleConfig = { { from: ['res/img/favicon.png'], to: ['dist/res/img'] }, { from: ['docs-user/**/*'], to: ['dist/docs'] }, { from: ['locales/**/*'], to: ['dist/locales'] }, + { + from: ['node_modules/source-map/lib/mappings.wasm'], + to: ['dist'], + }, ], }), generateHtmlPlugin({ @@ -108,6 +115,35 @@ export const mainBundleConfig = { ], }; +// Source map worker bundle configuration. +// Built as a standalone IIFE so that npm dependencies (lezer, source-map) are +// bundled into a single file that can be loaded as a Web Worker without needing +// ES module support. In production the output filename includes a content hash +// (e.g. source-map-ABCD1234.worker.js). The path is then injected into the main +// bundle via the SOURCE_MAP_WORKER_PATH define. In dev there is no hash since the +// dev server always serves fresh content and the define can't be updated mid-watch. +export const sourceMapWorkerConfig = { + ...baseConfig, + entryPoints: ['src/profile-logic/source-map.worker.ts'], + outdir: 'dist', + format: 'iife', + platform: 'browser', + target: browserslistToEsbuild(), + sourcemap: true, + splitting: false, + entryNames: isProduction ? '[name]-[hash]' : '[name]', + metafile: true, + plugins: [wasmLoader()], +}; + +export function getSourceMapWorkerPath(metafile) { + const [entryPoint] = sourceMapWorkerConfig.entryPoints; + const [outputPath] = Object.entries(metafile.outputs).find( + ([, output]) => output.entryPoint === entryPoint + ); + return '/' + path.basename(outputPath); +} + // Photon styling build configuration const photonTemplateHTML = fs.readFileSync( path.join(projectRoot, 'res', 'photon', 'index.html'), diff --git a/scripts/run-dev-server.mjs b/scripts/run-dev-server.mjs index 0edc44612a..71d87fef02 100644 --- a/scripts/run-dev-server.mjs +++ b/scripts/run-dev-server.mjs @@ -2,7 +2,10 @@ * 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/. */ import path from 'path'; -import { mainBundleConfig } from './lib/esbuild-configs.mjs'; +import { + mainBundleConfig, + sourceMapWorkerConfig, +} from './lib/esbuild-configs.mjs'; import { startDevServer } from './lib/dev-server.mjs'; import { serveAndOpenProfile } from './lib/profile-server.mjs'; import yargs from 'yargs'; @@ -22,6 +25,7 @@ startDevServer(mainBundleConfig, { host, distDir: 'dist', cleanDist: true, + extraWatchConfigs: [sourceMapWorkerConfig], onServerStart: (profilerUrl) => { const barAscii = '------------------------------------------------------------------------------------------'; diff --git a/src/actions/publish.ts b/src/actions/publish.ts index 3cbef3751b..5b427b929f 100644 --- a/src/actions/publish.ts +++ b/src/actions/publish.ts @@ -60,7 +60,7 @@ import type { ProfileIndexTranslationMaps, } from 'firefox-profiler/types'; import { compress } from 'firefox-profiler/utils/gz'; -import { serializeProfile } from 'firefox-profiler/profile-logic/process-profile'; +import { serializeProfileToJsonString } from 'firefox-profiler/profile-logic/process-profile'; export function updateSharingOption( slug: keyof CheckedSharingOptions, @@ -322,7 +322,9 @@ export function encodeSanitizedProfile( const encodingPromise: Promise = (async function () { try { dispatch(sanitizedProfileEncodingStarted(sanitizedProfile)); - const gzipData = await compress(serializeProfile(sanitizedProfile)); + const gzipData = await compress( + serializeProfileToJsonString(sanitizedProfile) + ); const blob = new Blob([gzipData], { type: 'application/octet-binary' }); dispatch(sanitizedProfileEncodingCompleted(sanitizedProfile, blob)); return { type: 'SUCCESS', profileData: blob }; diff --git a/src/actions/receive-profile.ts b/src/actions/receive-profile.ts index 7eb4182cdd..e197bee440 100644 --- a/src/actions/receive-profile.ts +++ b/src/actions/receive-profile.ts @@ -76,7 +76,9 @@ import { determineTimelineType, hasUsefulSamples, } from 'firefox-profiler/profile-logic/profile-data'; +import { doSourceMapSymbolication } from './source-map-symbolication'; +import type { RawSourceMap } from 'source-map'; import type { RequestedLib, ImplementationFilter, @@ -89,6 +91,7 @@ import type { TabID, PageList, MixedObject, + IndexIntoSourceTable, } from 'firefox-profiler/types'; import type { SymbolicationStepInfo } from '../profile-logic/symbolication'; @@ -245,7 +248,28 @@ export function finalizeProfileView( } } - await Promise.all([faviconsPromise, symbolicationPromise]); + // Fetch source maps for all JS sources with a sourceMapURL, then run the + // source-map worker. Runs fully in parallel with native symbolication: + // native only touches funcs/frames belonging to library resources (JS + // funcs aren't in those sets), and the JS apply step reads current + // shared state at dispatch time so it composes with whatever native + // has committed by then. Requires WebChannel version 7+. + let sourceMapSymbolicationPromise: Promise | null = null; + if (browserConnection !== null && browserConnection.supportsGetSourceMap) { + sourceMapSymbolicationPromise = doResolveSourceMaps( + profile, + browserConnection, + dispatch + ).then(({ resolvedSourceMaps, compiledSources }) => + dispatch(doSourceMapSymbolication(resolvedSourceMaps, compiledSources)) + ); + } + + await Promise.all([ + faviconsPromise, + symbolicationPromise, + sourceMapSymbolicationPromise, + ]); }; } @@ -811,6 +835,85 @@ export async function doSymbolicateProfile( dispatch(doneSymbolicating()); } +/** + * Resolve JS source maps for every source in the profile that has both a + * sourceMapURL and a UUID. Fetches source maps via the browser WebChannel. + * + * Also fetches the compiled source text which is required by the scope-tree + * name resolution in symbolicateWithSourceMaps. + */ +async function doResolveSourceMaps( + profile: Profile, + browserConnection: BrowserConnection, + dispatch: Dispatch +): Promise<{ + resolvedSourceMaps: Map; + compiledSources: Map; +}> { + const { sources, stringArray } = profile.shared; + + // Collect every source with a sourceMapURL and a UUID. Only UUID-bearing + // sources can be fetched via the browser WebChannel. + const sourceIndexesWithSourceMaps = new Set(); + for (let sourceIndex = 0; sourceIndex < sources.length; sourceIndex++) { + if ( + sources.sourceMapURL[sourceIndex] !== null && + sources.sourceMapURL[sourceIndex] !== undefined && + typeof sources.id[sourceIndex] === 'string' + ) { + sourceIndexesWithSourceMaps.add(sourceIndex); + } + } + + if (sourceIndexesWithSourceMaps.size === 0) { + return { resolvedSourceMaps: new Map(), compiledSources: new Map() }; + } + + // Fetch source maps and compiled sources in parallel, ignoring individual failures. + const resolvedSourceMaps: Map = new Map(); + const compiledSources: Map = new Map(); + + dispatch({ type: 'START_SOURCE_MAP_FETCHING' }); + try { + await Promise.all( + Array.from(sourceIndexesWithSourceMaps).map(async (sourceIndex) => { + const filename = stringArray[sources.filename[sourceIndex]]; + // sourceId is guaranteed non-null by the filter above. + const sourceId = sources.id[sourceIndex] as string; + + await Promise.all([ + browserConnection + .getSourceMap(sourceId) + .then((result) => { + resolvedSourceMaps.set(sourceIndex, result); + }) + .catch((e) => { + console.warn( + `Failed to fetch source map for "${filename}" (id=${sourceId}):`, + e + ); + }), + browserConnection + .getJSSource(sourceId) + .then((text) => { + compiledSources.set(sourceIndex, text); + }) + .catch((e) => { + console.warn( + `Failed to fetch compiled source for "${filename}" (id=${sourceId}):`, + e + ); + }), + ]); + }) + ); + } finally { + dispatch({ type: 'DONE_SOURCE_MAP_FETCHING' }); + } + + return { resolvedSourceMaps, compiledSources }; +} + export async function retrievePageFaviconsFromBrowser( dispatch: Dispatch, pages: PageList, @@ -1015,11 +1118,10 @@ export function retrieveProfileOrZipFromUrl( }); switch (response.responseType) { - case 'PROFILE': { - const serializedProfile = response.profile; + case 'BYTES': { const profileUpgradeInfo = {}; const profile = await unserializeProfileOfArbitraryFormat( - serializedProfile, + response.bytes, profileUrl, profileUpgradeInfo ); @@ -1197,13 +1299,15 @@ export function retrieveProfilesToCompare( dispatch(temporaryError(e)); }, }); - if (response.responseType !== 'PROFILE') { - throw new Error('Expected to receive a profile from fetchProfile'); + if (response.responseType !== 'BYTES') { + throw new Error( + 'Expected to receive a single profile (not a zip) from fetchProfile' + ); } const upgradeInfo: ProfileUpgradeInfo = {}; const profile = await unserializeProfileOfArbitraryFormat( - response.profile, + response.bytes, profileUrl, upgradeInfo ); diff --git a/src/actions/source-map-symbolication.ts b/src/actions/source-map-symbolication.ts new file mode 100644 index 0000000000..1ce7bdb9a6 --- /dev/null +++ b/src/actions/source-map-symbolication.ts @@ -0,0 +1,141 @@ +/* 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/. */ + +import { getRawProfileSharedData } from 'firefox-profiler/selectors'; +import { applySourceMapSymbolicationResponse } from 'firefox-profiler/profile-logic/source-map-symbolication'; + +import type { + WorkerInput, + WorkerOutput, +} from 'firefox-profiler/profile-logic/source-map-worker-types'; +import type { IndexIntoSourceTable, ThunkAction } from 'firefox-profiler/types'; +import type { RawSourceMap } from 'source-map'; +import { assertExhaustiveCheck } from 'firefox-profiler/utils/types'; + +/** + * Run source map symbolication using previously-fetched source maps from Redux + * state. Offloads source parsing and source-map lookups to a dedicated Web + * Worker so the main thread stays responsive. + * + * Reads the current profile from Redux state at dispatch time. Callers must + * ensure native symbolication has already committed its changes before + * dispatching this action, so that JS symbolication builds on the final state. + * + * `compiledSources` maps bundle IndexIntoSourceTable values to compiled source + * text (fetched alongside the source maps). Used for scope-tree-based function + * name resolution. + */ +export function doSourceMapSymbolication( + resolvedSourceMaps: Map, + compiledSources: Map +): ThunkAction> { + return async (dispatch, getState) => { + if (resolvedSourceMaps.size === 0) { + return; + } + + const shared = getRawProfileSharedData(getState()); + + const input: WorkerInput = { + resolvedSourceMaps, + compiledSources, + funcTable: shared.funcTable, + frameTable: shared.frameTable, + sourceLocationTable: shared.sourceLocationTable, + sources: shared.sources, + stringArray: shared.stringArray, + }; + + dispatch({ type: 'START_SOURCE_MAP_SYMBOLICATION' }); + const result = await _runSourceMapWorker(input); + switch (result.type) { + case 'success': { + // Apply against the current shared state (not the snapshot the worker + // received), so concurrent worker runs compose instead of stomping + // each other's results. + const currentShared = getRawProfileSharedData(getState()); + const applied = applySourceMapSymbolicationResponse( + currentShared, + result.response + ); + if (applied === null) { + dispatch({ type: 'SOURCE_MAP_SYMBOLICATION_FAILED' }); + break; + } + dispatch({ + type: 'BULK_SOURCE_MAP_SYMBOLICATION', + newFuncTable: applied.newFuncTable, + newFrameTable: applied.newFrameTable, + newSourceLocationTable: applied.newSourceLocationTable, + newSources: applied.newSources, + newStringArray: applied.newStringArray, + }); + break; + } + case 'error': + console.warn('Source map worker error:', result.message); + dispatch({ type: 'SOURCE_MAP_SYMBOLICATION_FAILED' }); + break; + case 'no-op': + dispatch({ type: 'SOURCE_MAP_SYMBOLICATION_FAILED' }); + break; + default: + throw assertExhaustiveCheck(result); + } + }; +} + +/** + * Spawn a one-shot source map worker, send it the input, and return the + * output. The worker is terminated once a response is received or an error + * occurs. Uses the same on-demand spawn pattern as gz.browser.ts. + * + * Debugging tip: to step through symbolication from the page DevTools, paste + * the snippet below over this function body. It runs the same core on the + * main thread (blocking, debug only). The worker no longer mutates its + * input, so no defensive cloning is needed here. + * + * const { runSourceMapSymbolicationCore } = await import( + * 'firefox-profiler/profile-logic/source-map-symbolication' + * ); + * const wasmUrl = new URL('/mappings.wasm', window.location.href).href; + * return runSourceMapSymbolicationCore(input, wasmUrl); + */ +function _runSourceMapWorker(input: WorkerInput): Promise { + return new Promise((resolve) => { + const reportError = (err: unknown): void => { + resolve({ + type: 'error', + message: err instanceof Error ? err.message : String(err), + }); + }; + + let worker: Worker; + try { + worker = new Worker(SOURCE_MAP_WORKER_PATH); + } catch (err) { + reportError(err); + return; + } + + worker.onmessage = (e: MessageEvent) => { + resolve(e.data); + worker.terminate(); + }; + worker.onerror = (e: ErrorEvent) => { + resolve({ + type: 'error', + message: e.error?.message ?? e.message ?? 'Source map worker failed', + }); + worker.terminate(); + }; + + try { + worker.postMessage(input); + } catch (err) { + reportError(err); + worker.terminate(); + } + }); +} diff --git a/src/app-logic/browser-connection.ts b/src/app-logic/browser-connection.ts index 8a40db9c14..1ef37bede9 100644 --- a/src/app-logic/browser-connection.ts +++ b/src/app-logic/browser-connection.ts @@ -12,8 +12,11 @@ import { querySymbolicationApiViaWebChannel, getPageFaviconsViaWebChannel, showFunctionInDevtoolsViaWebChannel, - getJSSourcesViaWebChannel, + getJSSourcesViaWebChannelV6, + getJSSourcesViaWebChannelV7, + getSourceMapViaWebChannel, } from './web-channel'; +import type { RawSourceMap } from 'source-map'; import type { Milliseconds, FaviconData, @@ -86,6 +89,14 @@ export interface BrowserConnection { ): Promise; getJSSource(sourceUuid: string): Promise; + + // Get source map of the given source directly from the browser. + // Requires WebChannel version 7+. + getSourceMap(sourceId: string): Promise; + + // True when the browser exposes GET_SOURCE_MAP (WebChannel version 7+). + // Callers use this to gate source-map-based features. + readonly supportsGetSourceMap: boolean; } /** @@ -96,21 +107,25 @@ export interface BrowserConnection { * the profile or symbols. So this class also supports the frame script. */ class BrowserConnectionImpl implements BrowserConnection { + _webChannelVersion: number; _webChannelSupportsGetProfileAndSymbolication: boolean; _webChannelSupportsGetExternalPowerTracks: boolean; _webChannelSupportsGetExternalMarkers: boolean; _webChannelSupportsGetPageFavicons: boolean; _webChannelSupportsOpenDebuggerInTab: boolean; _webChannelSupportsGetJSSource: boolean; + readonly supportsGetSourceMap: boolean; _geckoProfiler: $GeckoProfiler | undefined; constructor(webChannelVersion: number) { + this._webChannelVersion = webChannelVersion; this._webChannelSupportsGetProfileAndSymbolication = webChannelVersion >= 1; this._webChannelSupportsGetExternalPowerTracks = webChannelVersion >= 2; this._webChannelSupportsGetExternalMarkers = webChannelVersion >= 3; this._webChannelSupportsGetPageFavicons = webChannelVersion >= 4; this._webChannelSupportsOpenDebuggerInTab = webChannelVersion >= 5; this._webChannelSupportsGetJSSource = webChannelVersion >= 6; + this.supportsGetSourceMap = webChannelVersion >= 7; } // Only called when we must obtain the profile from the browser, i.e. if we @@ -232,6 +247,15 @@ class BrowserConnectionImpl implements BrowserConnection { return []; } + async getSourceMap(sourceId: string): Promise { + if (!this.supportsGetSourceMap) { + throw new Error( + "Can't use getSourceMap in Firefox versions with the old WebChannel." + ); + } + return getSourceMapViaWebChannel(sourceId); + } + /** * Fetches JavaScript source code from the browser using the source UUID. * This method requires WebChannel version 6 or higher (Firefox 145+). @@ -247,7 +271,11 @@ class BrowserConnectionImpl implements BrowserConnection { // fetching multiple sources, we only fetch one at a time currently. // TODO: Change this to fetch multiple JS sources at the load time or while // we share the profile. - return getJSSourcesViaWebChannel([sourceUuid]).then((sources) => { + const sourcesPromise = + this._webChannelVersion >= 7 + ? getJSSourcesViaWebChannelV7([sourceUuid]) + : getJSSourcesViaWebChannelV6([sourceUuid]); + return sourcesPromise.then((sources) => { const source = sources[0]; if ('error' in source) { throw new Error(source.error); diff --git a/src/app-logic/constants.ts b/src/app-logic/constants.ts index a8bdb0e23c..6cba739b59 100644 --- a/src/app-logic/constants.ts +++ b/src/app-logic/constants.ts @@ -12,7 +12,7 @@ export const GECKO_PROFILE_VERSION = 34; // The current version of the "processed" profile format. // Please don't forget to update the processed profile format changelog in // `docs-developer/CHANGELOG-formats.md`. -export const PROCESSED_PROFILE_VERSION = 62; +export const PROCESSED_PROFILE_VERSION = 64; // The following are the margin sizes for the left and right of the timeline. Independent // components need to share these values. diff --git a/src/app-logic/web-channel.ts b/src/app-logic/web-channel.ts index 4db2cf6825..3316c6e822 100644 --- a/src/app-logic/web-channel.ts +++ b/src/app-logic/web-channel.ts @@ -8,6 +8,7 @@ import type { ExternalMarkersData, FaviconData, } from 'firefox-profiler/types'; +import type { RawSourceMap } from 'source-map'; /** * This file is in charge of handling the message managing between profiler.firefox.com @@ -29,7 +30,8 @@ export type Request = | QuerySymbolicationApiRequest | GetPageFaviconsRequest | OpenScriptInTabDebuggerRequest - | GetJSSourcesRequest; + | GetJSSourcesRequest + | GetSourceMapRequest; type StatusQueryRequest = { type: 'STATUS_QUERY' }; type EnableMenuButtonRequest = { type: 'ENABLE_MENU_BUTTON' }; @@ -65,9 +67,14 @@ type OpenScriptInTabDebuggerRequest = { line: number | null; column: number | null; }; -type GetJSSourcesRequest = { - type: 'GET_JS_SOURCES'; - sourceUuids: Array; +type GetJSSourcesRequest = + // Version 7+ uses sourceIds + | { type: 'GET_JS_SOURCES'; sourceIds: Array } + // Version 6 uses sourceUuids + | { type: 'GET_JS_SOURCES'; sourceUuids: Array }; +type GetSourceMapRequest = { + type: 'GET_SOURCE_MAP'; + sourceId: string; }; export type MessageFromBrowser = @@ -138,6 +145,11 @@ type StatusQueryResponse = { // Shipped in Firefox 145. // Adds support for fetching JS sources. // - GET_JS_SOURCES + // Version 7: + // Adds support for fetching source maps via the browser, which can access + // URLs that the frontend cannot. + // - GET_SOURCE_MAP + // Also renames the GET_JS_SOURCES request field from `sourceUuids` to `sourceIds`. version?: number; }; type EnableMenuButtonResponse = void; @@ -150,6 +162,7 @@ type GetPageFaviconsResponse = Array; type OpenScriptInTabDebuggerResponse = void; type GetJSSourceReponseItem = { sourceText: string } | { error: string }; type GetJSSourcesResponse = Array; +type GetSourceMapResponse = RawSourceMap; // TypeScript function overloads for request/response pairs. function _sendMessageWithResponse( @@ -182,6 +195,9 @@ function _sendMessageWithResponse( function _sendMessageWithResponse( request: GetJSSourcesRequest ): Promise; +function _sendMessageWithResponse( + request: GetSourceMapRequest +): Promise; function _sendMessageWithResponse(request: Request): Promise { const requestId = _requestId++; @@ -387,7 +403,7 @@ export async function showFunctionInDevtoolsViaWebChannel( }); } -export async function getJSSourcesViaWebChannel( +export async function getJSSourcesViaWebChannelV6( sourceUuids: Array ): Promise> { return _sendMessageWithResponse({ @@ -396,6 +412,24 @@ export async function getJSSourcesViaWebChannel( }); } +export async function getJSSourcesViaWebChannelV7( + sourceIds: Array +): Promise> { + return _sendMessageWithResponse({ + type: 'GET_JS_SOURCES', + sourceIds, + }); +} + +export async function getSourceMapViaWebChannel( + sourceId: string +): Promise { + return _sendMessageWithResponse({ + type: 'GET_SOURCE_MAP', + sourceId, + }); +} + /** * ----------------------------------------------------------------------------- * diff --git a/src/components/app/AppHeader.tsx b/src/components/app/AppHeader.tsx index 6dc0eb9649..e4d9a4f37a 100644 --- a/src/components/app/AppHeader.tsx +++ b/src/components/app/AppHeader.tsx @@ -9,7 +9,7 @@ import * as React from 'react'; import { InnerNavigationLink } from 'firefox-profiler/components/shared/InnerNavigationLink'; -import { ThemeToggle } from './ThemeToggle'; +import { SettingsMenu } from './SettingsMenu'; import './AppHeader.css'; import { Localized } from '@fluent/react'; @@ -44,7 +44,7 @@ export class AppHeader extends React.PureComponent<{}> {
- + { - _onClick = () => { - this.setState({ hide: true }); - }; - - override state = { - hide: false, - }; - - override render() { - if (this.state.hide) { - return null; - } - return ( - - ); - } -} diff --git a/src/components/app/LanguageSwitcher.tsx b/src/components/app/LanguageSwitcher.tsx index b2d0250121..913df025fe 100644 --- a/src/components/app/LanguageSwitcher.tsx +++ b/src/components/app/LanguageSwitcher.tsx @@ -30,12 +30,9 @@ export function LanguageSwitcher(): React.ReactNode { } return ( - + - - - - - - - - - - - - - - - - - - - - - -
- - -`; diff --git a/src/test/components/__snapshots__/Home.test.tsx.snap b/src/test/components/__snapshots__/Home.test.tsx.snap index 11f8ccb4c8..2ad55f130d 100644 --- a/src/test/components/__snapshots__/Home.test.tsx.snap +++ b/src/test/components/__snapshots__/Home.test.tsx.snap @@ -31,38 +31,14 @@ exports[`app/Home renders a button to enable the popup in Firefox 1`] = ` class="appHeaderRightControls" >
- - + />
@@ -317,38 +292,14 @@ exports[`app/Home renders the Chrome extension instructions for Chromium based b class="appHeaderRightControls" >
- - + />
@@ -622,38 +572,14 @@ exports[`app/Home renders the information screen for fenix 1`] = ` class="appHeaderRightControls" >
- - + />
@@ -885,38 +810,14 @@ exports[`app/Home renders the information screen for other browsers 1`] = ` class="appHeaderRightControls" >
- - + />
diff --git a/src/test/components/__snapshots__/MarkerTable.test.tsx.snap b/src/test/components/__snapshots__/MarkerTable.test.tsx.snap index 9e9856f6e5..df20a0b201 100644 --- a/src/test/components/__snapshots__/MarkerTable.test.tsx.snap +++ b/src/test/components/__snapshots__/MarkerTable.test.tsx.snap @@ -207,32 +207,32 @@ exports[`MarkerTable renders some basic markers and updates when needed 1`] = ` > Start Duration Name 0s 0s UserTiming
0.002s NotifyDidPaint
0.108s unknown IPCOut
0.153s 584.00ns setTimeout
0.153s 584.00ns Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget magna sed magna vehicula congue id id nulla. Ut convallis, neque consequat aliquam egestas, dui urna interdum quam, id semper magna erat et nisi. Vivamus molestie quis ligula eget aliquam. Sed facilisis, turpis sed facilisis posuere, risus odio convallis velit, vitae vehicula justo risus at ipsum. Proin non porttitor neque. Vivamus fringilla ex nec iaculis cursus. Vestibulum suscipit mauris sem, vitae gravida ipsum fermentum id. Quisque pulvinar blandit ullamcorper. Donec id justo at metus scelerisque pulvinar. Proin suscipit suscipit nisi, quis tempus ipsum vulputate quis. Pellentesque sodales rutrum eros, eget pulvinar ante condimentum a. Donec accumsan, ante ut facilisis cursus, nibh quam congue eros, vitae placerat tortor magna vel lacus. Etiam odio diam, venenatis eu sollicitudin non, ultrices ut urna. Aliquam vehicula diam eu eros eleifend, ac vulputate purus faucibus.
0.158s LogMessages
0.162s 1ms FileIO
@@ -534,7 +534,7 @@ exports[`MarkerTable renders some basic markers and updates when needed 1`] = ` class="treeRowToggleButton collapsed leaf" /> foobar @@ -555,7 +555,7 @@ exports[`MarkerTable renders some basic markers and updates when needed 1`] = ` class="treeRowToggleButton collapsed leaf" /> -
- Docs - + - - Docs -