diff --git a/locales/de/app.ftl b/locales/de/app.ftl index 1816c66682..46725b0cba 100644 --- a/locales/de/app.ftl +++ b/locales/de/app.ftl @@ -305,6 +305,16 @@ MarkerContextMenu--copy-description = Beschreibung kopieren MarkerContextMenu--copy-call-stack = Aufrufstack kopieren MarkerContextMenu--copy-url = URL kopieren MarkerContextMenu--copy-as-json = Als JSON kopieren +# 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 = Empfänger-Thread „{ $threadName }“ auswählen +# 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 = Absender-Thread „{ $threadName }“ auswählen ## MarkerSettings ## This is used in all panels related to markers. @@ -518,7 +528,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Vollständiger Bereich +# 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 = Vollständiger Zeitraum ({ $fullRangeDuration }) ## Profile Loader Animation diff --git a/locales/el/app.ftl b/locales/el/app.ftl index 28d663db15..cd01786145 100644 --- a/locales/el/app.ftl +++ b/locales/el/app.ftl @@ -316,6 +316,16 @@ MarkerContextMenu--copy-description = Αντιγραφή περιγραφής MarkerContextMenu--copy-call-stack = Αντιγραφή στοίβας κλήσεων MarkerContextMenu--copy-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 }» ## MarkerSettings ## This is used in all panels related to markers. @@ -529,7 +539,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Πλήρες εύρος +# 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 diff --git a/locales/en-GB/app.ftl b/locales/en-GB/app.ftl index 561e0b4fe5..361211521f 100644 --- a/locales/en-GB/app.ftl +++ b/locales/en-GB/app.ftl @@ -320,6 +320,16 @@ MarkerContextMenu--copy-description = Copy description MarkerContextMenu--copy-call-stack = Copy call stack MarkerContextMenu--copy-url = Copy URL MarkerContextMenu--copy-as-json = Copy as 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 = 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 = Select the sender thread “{ $threadName }” ## MarkerSettings ## This is used in all panels related to markers. @@ -533,7 +543,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Full Range +# 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 = Full Range ({ $fullRangeDuration }) ## Profile Loader Animation diff --git a/locales/en-US/app.ftl b/locales/en-US/app.ftl index 2de213d675..692736f1d2 100644 --- a/locales/en-US/app.ftl +++ b/locales/en-US/app.ftl @@ -584,7 +584,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Full Range +# 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 = Full Range ({ $fullRangeDuration }) ## Profile Loader Animation diff --git a/locales/es-CL/app.ftl b/locales/es-CL/app.ftl index 5700ccbcf8..39f11b8621 100644 --- a/locales/es-CL/app.ftl +++ b/locales/es-CL/app.ftl @@ -107,7 +107,7 @@ CallTree--bytes-self = Propio (bytes) # Variables: # $calledFunction (String) - Name of the function whose call was sometimes inlined. CallTree--divergent-inlining-badge = - .title = Algunas llamadas a { $callFunction } fueron incorporadas por el compilador. + .title = Algunas llamadas a { $calledFunction } fueron incorporadas por el compilador. # 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. @@ -472,7 +472,6 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Rango completo ## Profile Loader Animation diff --git a/locales/fr/app.ftl b/locales/fr/app.ftl index aae207ad0d..3ca802f266 100644 --- a/locales/fr/app.ftl +++ b/locales/fr/app.ftl @@ -103,7 +103,7 @@ CallTree--bytes-self = Individuel (octets) # Variables: # $calledFunction (String) - Name of the function whose call was sometimes inlined. CallTree--divergent-inlining-badge = - .title = Certains appels à { $callFunction } ont été regroupés par le compilateur. + .title = Certains appels à { $calledFunction } ont été regroupés par le compilateur. # 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. @@ -468,7 +468,6 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Intervalle complet ## Profile Loader Animation diff --git a/locales/ia/app.ftl b/locales/ia/app.ftl index 74e30c6e5c..534017e6ce 100644 --- a/locales/ia/app.ftl +++ b/locales/ia/app.ftl @@ -313,6 +313,16 @@ MarkerContextMenu--copy-description = Copiar le description MarkerContextMenu--copy-call-stack = Copiar pila de appellos MarkerContextMenu--copy-url = Copiar URL MarkerContextMenu--copy-as-json = Copiar como 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 = Selige le argumento destinatario “{ $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 = Selige le argumento mittente “{ $threadName }” ## MarkerSettings ## This is used in all panels related to markers. @@ -526,7 +536,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Plen gamma +# 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 = Intervallo complete ({ $fullRangeDuration }) ## Profile Loader Animation diff --git a/locales/it/app.ftl b/locales/it/app.ftl index 6d8e9100f2..f8ddc53144 100644 --- a/locales/it/app.ftl +++ b/locales/it/app.ftl @@ -255,6 +255,16 @@ MarkerContextMenu--copy-description = Copia descrizione MarkerContextMenu--copy-call-stack = Copia stack di chiamata MarkerContextMenu--copy-url = Copia URL MarkerContextMenu--copy-as-json = Copia come 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 = Seleziona il thread di destinazione “{ $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 = Seleziona il thread di origine “{ $threadName }” ## MarkerSettings ## This is used in all panels related to markers. @@ -467,7 +477,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Intervallo completo +# 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 = Intervallo completo ({ $fullRangeDuration }) ## Profile Loader Animation diff --git a/locales/kab/app.ftl b/locales/kab/app.ftl index 0ca24b84d4..74edf4b491 100644 --- a/locales/kab/app.ftl +++ b/locales/kab/app.ftl @@ -29,16 +29,11 @@ AppHeader--github-icon = ## AppViewRouter ## This is used for displaying errors when loading the application. -AppViewRouter--error-message-unpublished = - .message = Ur yezmir ara ad d-yerr amaɣnu seg { -firefox-brand-name }. -AppViewRouter--error-message-from-file = - .message = Taɣuri n faylu neɣ tasleḍt n ufylu yellan deg-s d awezɣi. -AppViewRouter--error-message-local = - .message = Ur yettwasebded ara yakan. -AppViewRouter--error-message-public = - .message = Ur yezmir ara ad d-yader umaɣnu. -AppViewRouter--error-message-from-url = - .message = Ur yezmir ara ad d-yader umaɣnu. +AppViewRouter--error-unpublished = Ur yezmir ara ad d-yaf amaɣnu seg { -firefox-brand-name }. +AppViewRouter--error-from-file = Ur izmir ara ad d-iɣer afaylu neɣ ad yesleḍ amaɣnu yellan deg-s. +AppViewRouter--error-local = Ur yebdid ara yakan. +AppViewRouter--error-public = Ur yezmir ara ad d-yader amaɣnu. +AppViewRouter--error-from-url = Ur yezmir ara ad d-yessader amaɣnu. AppViewRouter--route-not-found--home = .specialMessage = URL wuɣur tettaɛraḍeḍ ad tawḍeḍ ur tettwassen ara. @@ -55,6 +50,8 @@ CallNodeContextMenu--transform-focus-function = Siḍes ef twuri .title = { CallNodeContextMenu--transform-focus-function-title } CallNodeContextMenu--transform-focus-function-inverted = Siḍeṣ ɣef twuri (imitti) .title = { CallNodeContextMenu--transform-focus-function-title } +CallNodeContextMenu--transform-collapse-function-subtree = Ṭebbeq tawuri + .title = Aṭebbeq n twuri ad yekkes meṛṛa ayen iwumi tessawaldaɣen ad tefk akk akud n uselkem i twuri. Aya ad yefk tallelt i usifses n umaɣnu ara yessiwlen i tengalt ur yattwaslaḍen ara. CallNodeContextMenu--expand-all = Snefli akk # Searchfox is a source code indexing tool for Mozilla Firefox. # See: https://searchfox.org/ @@ -67,6 +64,13 @@ CallNodeContextMenu--copy-stack = Nqel tanebdant ## This is the component for Call Tree panel. +## 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. + + ## CallTreeSidebar ## This is the sidebar component that is used in Call Tree and Flame Graph panels. @@ -170,7 +174,6 @@ MarkerContextMenu--end-selection-here = Taggara n ufran da MarkerContextMenu--copy-description = Nɣel aglam MarkerContextMenu--copy-call-stack = Nɣel tanebdant n usiwel MarkerContextMenu--copy-url = Nɣel URL -MarkerContextMenu--copy-full-payload = Nɣel tuttra tummidt ## MarkerSettings ## This is used in all panels related to markers. @@ -217,7 +220,6 @@ MenuButtons--metaInfo--symbols = Izamulen: MenuButtons--metaInfo--cpu = CPU: MenuButtons--metaInfo--recording-started = Asekles yebda: MenuButtons--metaInfo--interval = Azilal: -MenuButtons--metaInfo--profile-version = Lqem n umaɣnu: MenuButtons--metaInfo--buffer-capacity = Tazmert n uḥraz: MenuButtons--metaInfo--buffer-duration = Tanzgat n uḥraz: # Buffer Duration in Seconds in Meta Info Panel @@ -313,10 +315,6 @@ ProfileFilterNavigator--full-range = Azilal ummid ## Profile Loader Animation -ProfileLoaderAnimation--loading-message-local = - .message = Ur yettwasebded ara yakan. -ProfileLoaderAnimation--loading-message-view-not-found = - .message = Ur tettwaf ara teskant ## ProfileRootMessage @@ -353,7 +351,6 @@ TabBar--network-tab = Aẓeṭṭa ## This is used as a context menu for timeline to organize the tracks in the ## analysis UI. -TrackContextMenu--only-show-this-process-group = Sken kan agraw-a n ukala # This is used as the context menu item to show only the given track. # Variables: # $trackName (String) - Name of the selected track to isolate. @@ -363,6 +360,16 @@ TrackContextMenu--only-show-track = Sken kan “{ $trackName }” # $trackName (String) - Name of the selected track to hide. TrackContextMenu--hide-track = Ffer “{ $trackName }” +## 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 + + +## TrackSearchField +## The component that is used for the search input in the track context menu. + + ## TransformNavigator ## Navigator for the applied transforms in the Call Tree, Flame Graph, and Stack ## Chart components. @@ -409,6 +416,28 @@ TransformNavigator--drop-function = Sers: { $item } # $item (String) - Name of the function that transform applied to. TransformNavigator--collapse-direct-recursion = Fneẓ asniles: { $item } +## Source code view in a box at the bottom of the UI. + +# 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 = Ur yezmir ara ad yessuter i API n uzamul n yiminig: { $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 n uzamul n yiminig yerra-d tuccḍa: { $apiErrorMessage } +# 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 = Aḥraz deg { $url } ur yezmir ara ad yettwasleḍ: { $parsingErrorMessage } +SourceView--close-button = + .title = Mdel timeẓri taneṣlit + ## UploadedRecordingsHome ## This is the page that displays all the profiles that user has uploaded. ## See: https://profiler.firefox.com/uploaded-recordings/ diff --git a/locales/nl/app.ftl b/locales/nl/app.ftl index c2efdc0b83..e30f114904 100644 --- a/locales/nl/app.ftl +++ b/locales/nl/app.ftl @@ -155,7 +155,7 @@ CallTree--bytes-self = Zelf (bytes) # Variables: # $calledFunction (String) - Name of the function whose call was sometimes inlined. CallTree--divergent-inlining-badge = - .title = Sommige aanroepen naar { $callFunction } zijn inline door de compiler geplaatst. + .title = Sommige aanroepen naar { $calledFunction } zijn inline door de compiler geplaatst. # 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. @@ -255,7 +255,7 @@ Home--web-channel-unavailable = Home--record-instructions = Klik om te starten met het maken van een profiel op de profielknop of gebruik de sneltoetsen. Het pictogram is blauw als er een profiel wordt opgenomen. - Klik op SHIFT om de gegevens in profiler.firefox.com te laden. + Klik op Vastleggen om de gegevens in profiler.firefox.com te laden. Home--instructions-title = Profielen bekijken en opnemen Home--instructions-content = Het opnemen van prestatieprofielen vereist { -firefox-brand-name }. @@ -320,6 +320,16 @@ MarkerContextMenu--copy-description = Beschrijving kopiëren MarkerContextMenu--copy-call-stack = Aanroepstack kopiëren MarkerContextMenu--copy-url = URL kopiëren MarkerContextMenu--copy-as-json = Kopiëren als 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 = Selecteer de ontvangerthread ‘{ $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 = Selecteer de afzenderthread ‘{ $threadName }’ ## MarkerSettings ## This is used in all panels related to markers. @@ -533,7 +543,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Volledig bereik +# 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 = Volledig bereik ({ $fullRangeDuration }) ## Profile Loader Animation diff --git a/locales/pt-BR/app.ftl b/locales/pt-BR/app.ftl index 98074a70ac..1e079ec060 100644 --- a/locales/pt-BR/app.ftl +++ b/locales/pt-BR/app.ftl @@ -257,6 +257,16 @@ MarkerContextMenu--copy-description = Copiar descrição MarkerContextMenu--copy-call-stack = Copiar pilha de chamadas MarkerContextMenu--copy-url = Copiar URL MarkerContextMenu--copy-as-json = Copiar como 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 = Selecionar o thread receptor “{ $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 = Selecionar o thread remetente “{ $threadName }” ## MarkerSettings ## This is used in all panels related to markers. @@ -470,7 +480,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Intervalo completo +# 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 = Intervalo completo ({ $fullRangeDuration }) ## Profile Loader Animation diff --git a/locales/sv-SE/app.ftl b/locales/sv-SE/app.ftl index f840926b2d..1c0b058980 100644 --- a/locales/sv-SE/app.ftl +++ b/locales/sv-SE/app.ftl @@ -313,6 +313,16 @@ MarkerContextMenu--copy-description = Kopiera beskrivning MarkerContextMenu--copy-call-stack = Kopiera anropsstack MarkerContextMenu--copy-url = Kopiera URL MarkerContextMenu--copy-as-json = Kopiera som 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 = Välj mottagartråden "{ $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 = Välj avsändartråden "{ $threadName }" ## MarkerSettings ## This is used in all panels related to markers. @@ -526,7 +536,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Hela intervallet +# 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 = Fullt intervall ({ $fullRangeDuration }) ## Profile Loader Animation diff --git a/locales/uk/app.ftl b/locales/uk/app.ftl index 382836d41b..73362a5a34 100644 --- a/locales/uk/app.ftl +++ b/locales/uk/app.ftl @@ -317,6 +317,16 @@ MarkerContextMenu--copy-description = Скопіювати опис MarkerContextMenu--copy-call-stack = Скопіювати стек викликів MarkerContextMenu--copy-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 }” ## MarkerSettings ## This is used in all panels related to markers. @@ -535,7 +545,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = Повний спектр +# 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 diff --git a/locales/zh-CN/app.ftl b/locales/zh-CN/app.ftl index 432b0a5885..50770d0b93 100644 --- a/locales/zh-CN/app.ftl +++ b/locales/zh-CN/app.ftl @@ -251,6 +251,16 @@ MarkerContextMenu--copy-description = 复制描述 MarkerContextMenu--copy-call-stack = 复制调用栈 MarkerContextMenu--copy-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 = 选择 Receiver 线程“{ $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 = 选择 Sender 线程“{ $threadName }” ## MarkerSettings ## This is used in all panels related to markers. @@ -459,7 +469,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = 完整范围 +# 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 diff --git a/locales/zh-TW/app.ftl b/locales/zh-TW/app.ftl index e734b3160d..c9cc893e85 100644 --- a/locales/zh-TW/app.ftl +++ b/locales/zh-TW/app.ftl @@ -251,6 +251,16 @@ MarkerContextMenu--copy-description = 複製描述 MarkerContextMenu--copy-call-stack = 複製呼叫堆疊 MarkerContextMenu--copy-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 }」 ## MarkerSettings ## This is used in all panels related to markers. @@ -459,7 +469,13 @@ ProfileDeleteButton--delete-button = ## ProfileFilterNavigator ## This is used at the top of the profile analysis UI. -ProfileFilterNavigator--full-range = 完整範圍 +# 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 diff --git a/package.json b/package.json index 7194bf04b1..fd1bebdacb 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ }, "dependencies": { "@codemirror/gutter": "^0.19.9", - "@codemirror/highlight": "^0.19.7", + "@codemirror/highlight": "^0.19.8", "@codemirror/lang-cpp": "^0.19.1", "@codemirror/lang-javascript": "^0.19.6", "@codemirror/lang-rust": "^0.19.2", @@ -102,13 +102,13 @@ "@babel/preset-env": "^7.16.11", "@babel/preset-flow": "^7.16.7", "@babel/preset-react": "^7.16.7", - "@testing-library/dom": "^8.11.3", - "@testing-library/jest-dom": "^5.16.2", + "@testing-library/dom": "^8.12.0", + "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "alex": "^10.0.0", "autoprefixer": "^10.4.4", "babel-jest": "^27.5.1", - "babel-loader": "^8.2.3", + "babel-loader": "^8.2.4", "babel-plugin-module-resolver": "^4.1.0", "browserslist": "^4.20.2", "caniuse-lite": "^1.0.30001320", @@ -129,7 +129,7 @@ "eslint-plugin-jest-dom": "^4.0.1", "eslint-plugin-jest-formatting": "^3.1.0", "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-react": "^7.29.3", + "eslint-plugin-react": "^7.29.4", "eslint-plugin-testing-library": "^5.0.6", "fake-indexeddb": "^3.1.7", "file-loader": "^6.2.0", diff --git a/src/components/app/Home.css b/src/components/app/Home.css index 2183a0b96c..89056df043 100644 --- a/src/components/app/Home.css +++ b/src/components/app/Home.css @@ -165,15 +165,18 @@ position: relative; } -.homeTransition-enter { - opacity: 0.1; - transform: translateX(100px); -} +/* Only show the home transition when reduced motion is not preferred */ +@media (prefers-reduced-motion: no-preference) { + .homeTransition-enter { + opacity: 0.1; + transform: translateX(100px); + } -.homeTransition-enter.homeTransition-enter-active { - opacity: 1; - transform: translateX(0); - transition: opacity 300ms ease-out, transform 300ms ease-out; + .homeTransition-enter.homeTransition-enter-active { + opacity: 1; + transform: translateX(0); + transition: opacity 300ms ease-out, transform 300ms ease-out; + } } .homeSectionUploadFromFileInput { diff --git a/src/components/app/MenuButtons/Publish.css b/src/components/app/MenuButtons/Publish.css index de3e3d2a7a..ddfa09113c 100644 --- a/src/components/app/MenuButtons/Publish.css +++ b/src/components/app/MenuButtons/Publish.css @@ -175,3 +175,10 @@ .menuButtonsPublishError { margin: 10px 0; } + +/* Do not animate the publish animation for stripes at the top loading bar. */ +@media (prefers-reduced-motion) { + .menuButtonsPublishUploadBarInner { + animation: none; + } +} diff --git a/src/components/app/ProfileFilterNavigator.js b/src/components/app/ProfileFilterNavigator.js index a604c2547a..4db89237b9 100644 --- a/src/components/app/ProfileFilterNavigator.js +++ b/src/components/app/ProfileFilterNavigator.js @@ -70,7 +70,14 @@ class ProfileFilterNavigatorBarImpl extends React.PureComponent { ); } else { firstItem = ( - + Full Range ); diff --git a/src/components/app/ProfileRootMessage.css b/src/components/app/ProfileRootMessage.css index 87201c0626..fde52de4e9 100644 --- a/src/components/app/ProfileRootMessage.css +++ b/src/components/app/ProfileRootMessage.css @@ -1,3 +1,7 @@ +/* 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/. */ + .rootMessageContainer { position: absolute; top: 0; @@ -165,3 +169,12 @@ transform: translateX(-100px); } } + +/* Do not animate the loading animation when user prefers reduced motion. The + * other alternative was to remove these boxes completely, but it's still nice + * to keep the boxes as a nice visualization. */ +@media (prefers-reduced-motion) { + .loading-div { + animation: none; + } +} diff --git a/src/components/app/ProfileViewer.css b/src/components/app/ProfileViewer.css index decc21a247..8e650a18b5 100644 --- a/src/components/app/ProfileViewer.css +++ b/src/components/app/ProfileViewer.css @@ -1,3 +1,7 @@ +/* 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/. */ + @keyframes profileViewerFadeIn { 0% { opacity: 0; @@ -114,3 +118,13 @@ .profileViewerSpacer { flex: 1; } + +/* Do no animate the whole profile viewer during loading and publishing if user + * prefers reduced motion. */ +@media (prefers-reduced-motion) { + .profileViewer, + .profileViewerFadeOut, + .profileViewerFadeInSanitized { + animation: none; + } +} diff --git a/src/components/shared/FilterNavigatorBar.css b/src/components/shared/FilterNavigatorBar.css index b60bdac8c8..06b7090f59 100644 --- a/src/components/shared/FilterNavigatorBar.css +++ b/src/components/shared/FilterNavigatorBar.css @@ -160,3 +160,11 @@ opacity: 0; transform: translateX(50%); } + +/* Do not animate the filter navigator bar items when user prefers reduced motion */ +@media (prefers-reduced-motion) { + .filterNavigatorBarItem { + animation: none; + transition: none; + } +} diff --git a/src/components/shared/FilterNavigatorBar.js b/src/components/shared/FilterNavigatorBar.js index 0fe2bb0257..d9f1682fd3 100644 --- a/src/components/shared/FilterNavigatorBar.js +++ b/src/components/shared/FilterNavigatorBar.js @@ -9,27 +9,53 @@ import classNames from 'classnames'; import { CSSTransition, TransitionGroup } from 'react-transition-group'; import './FilterNavigatorBar.css'; -type FilterNavigatorBarButtonProps = {| - onClick: (number) => mixed, - index: number, - children: React.Node, +type FilterNavigatorBarListItemProps = {| + +onClick?: null | ((number) => mixed), + +index: number, + +isFirstItem: boolean, + +isLastItem: boolean, + +isSelectedItem: boolean, + +title?: string, + +additionalClassName?: string, + +children: React.Node, |}; -class FilterNavigatorBarButton extends React.PureComponent { +class FilterNavigatorBarListItem extends React.PureComponent { _onClick = () => { const { index, onClick } = this.props; - onClick(index); + if (onClick) { + onClick(index); + } }; render() { + const { + isFirstItem, + isLastItem, + isSelectedItem, + children, + additionalClassName, + onClick, + title, + } = this.props; return ( - + {onClick ? ( + + ) : ( + {children} + )} + ); } } @@ -57,22 +83,17 @@ export class FilterNavigatorBar extends React.PureComponent { classNames="filterNavigatorBarTransition" timeout={250} > -
  • - {i === items.length - 1 && !uncommittedItem ? ( - {item} - ) : ( - - {item} - - )} -
  • + {item} + ))} {uncommittedItem ? ( @@ -81,18 +102,16 @@ export class FilterNavigatorBar extends React.PureComponent { classNames="filterNavigatorBarUncommittedTransition" timeout={0} > -
  • - - {uncommittedItem} - -
  • + {uncommittedItem} + ) : null} diff --git a/src/profile-logic/tracks.js b/src/profile-logic/tracks.js index c6d16011ef..9eaa1d2fe1 100644 --- a/src/profile-logic/tracks.js +++ b/src/profile-logic/tracks.js @@ -61,8 +61,12 @@ const LOCAL_TRACK_INDEX_ORDER = { const LOCAL_TRACK_DISPLAY_ORDER = { network: 0, memory: 1, - thread: 2, - ipc: 3, + // IPC tracks that belong to the global track will appear right after network + // and memory tracks. But we want to show the IPC tracks that belong to the + // local threads right after their track. This special handling happens inside + // the sort function. + ipc: 2, + thread: 3, 'event-delay': 4, 'process-cpu': 5, }; @@ -85,11 +89,33 @@ const GLOBAL_TRACK_DISPLAY_ORDER = { function _getDefaultLocalTrackOrder(tracks: LocalTrack[]) { const trackOrder = tracks.map((_, index) => index); // In place sort! - trackOrder.sort( - (a, b) => + trackOrder.sort((a, b) => { + if ( + tracks[a].type === 'thread' && + tracks[b].type === 'ipc' && + tracks[a].threadIndex === tracks[b].threadIndex + ) { + // If the IPC track belongs to that local thread, put the IPC tracks right + // after it. + return -1; + } + + if ( + tracks[a].type === 'ipc' && + tracks[b].type === 'thread' && + tracks[a].threadIndex === tracks[b].threadIndex + ) { + // If the IPC track belongs to that local thread, put the IPC tracks right + // after it. + return 1; + } + + return ( LOCAL_TRACK_DISPLAY_ORDER[tracks[a].type] - LOCAL_TRACK_DISPLAY_ORDER[tracks[b].type] - ); + ); + }); + return trackOrder; } diff --git a/src/test/components/FilterNavigatorBar.test.js b/src/test/components/FilterNavigatorBar.test.js index 1f9c399f15..726c19094f 100644 --- a/src/test/components/FilterNavigatorBar.test.js +++ b/src/test/components/FilterNavigatorBar.test.js @@ -125,7 +125,7 @@ describe('app/ProfileFilterNavigator', () => { it('displays the "Full Range" text as its first element', () => { const { getByText } = setup(); - expect(getByText('Full Range')).toBeInTheDocument(); + expect(getByText(/Full Range/)).toBeInTheDocument(); }); it('renders the site hostname as its first element in the single tab view', () => { @@ -147,7 +147,7 @@ describe('app/ProfileFilterNavigator', () => { tabID, }) ); - expect(queryByText('Full Range')).not.toBeInTheDocument(); + expect(queryByText(/Full Range/)).not.toBeInTheDocument(); // Using regexp because searching for a partial text. expect(getByText(/developer\.mozilla\.org/)).toBeInTheDocument(); }); diff --git a/src/test/components/MarkerTable.test.js b/src/test/components/MarkerTable.test.js index bbb86ca73f..58fc1952ba 100644 --- a/src/test/components/MarkerTable.test.js +++ b/src/test/components/MarkerTable.test.js @@ -295,10 +295,10 @@ describe('MarkerTable', function () { 'hide [thread GeckoMain process]', ' - show [ipc GeckoMain]', 'show [thread GeckoMain tab] SELECTED', - ' - show [thread DOM Worker]', - ' - show [thread Style]', ' - show [ipc GeckoMain] SELECTED', + ' - show [thread DOM Worker]', ' - show [ipc DOM Worker]', + ' - show [thread Style]', ' - show [ipc Style]', ]); @@ -313,10 +313,10 @@ describe('MarkerTable', function () { 'show [thread GeckoMain process] SELECTED', ' - show [ipc GeckoMain] SELECTED', 'show [thread GeckoMain tab]', - ' - show [thread DOM Worker]', - ' - show [thread Style]', ' - show [ipc GeckoMain]', + ' - show [thread DOM Worker]', ' - show [ipc DOM Worker]', + ' - show [thread Style]', ' - show [ipc Style]', ]); }); @@ -353,10 +353,10 @@ describe('MarkerTable', function () { 'show [thread GeckoMain process] SELECTED', ' - show [ipc GeckoMain] SELECTED', 'hide [thread GeckoMain tab]', - ' - hide [thread DOM Worker]', - ' - show [thread Style]', ' - show [ipc GeckoMain]', + ' - hide [thread DOM Worker]', ' - show [ipc DOM Worker]', + ' - show [thread Style]', ' - show [ipc Style]', ]); @@ -371,10 +371,10 @@ describe('MarkerTable', function () { 'show [thread GeckoMain process]', ' - show [ipc GeckoMain]', 'show [thread GeckoMain tab]', - ' - show [thread DOM Worker] SELECTED', - ' - show [thread Style]', ' - show [ipc GeckoMain]', + ' - show [thread DOM Worker] SELECTED', ' - show [ipc DOM Worker] SELECTED', + ' - show [thread Style]', ' - show [ipc Style]', ]); }); diff --git a/src/test/components/__snapshots__/FilterNavigatorBar.test.js.snap b/src/test/components/__snapshots__/FilterNavigatorBar.test.js.snap index 13cc7bbd05..4b996c5b3f 100644 --- a/src/test/components/__snapshots__/FilterNavigatorBar.test.js.snap +++ b/src/test/components/__snapshots__/FilterNavigatorBar.test.js.snap @@ -10,7 +10,7 @@ exports[`app/ProfileFilterNavigator renders ProfileFilterNavigator properly 1`] - Full Range + Full Range (⁨51ms⁩) @@ -21,13 +21,13 @@ exports[`app/ProfileFilterNavigator renders ProfileFilterNavigator properly 2`] class="filterNavigatorBar profileFilterNavigator" >