profile-viewer 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/dist/{f0599659345cf76717cd.svg → 118632062f4755918dac.svg} +1 -1
  3. data/dist/136.4ad3301b8aacf759ea70.bundle.js +2 -0
  4. data/dist/136.4ad3301b8aacf759ea70.bundle.js.map +1 -0
  5. data/dist/171.621b9df5978342be5662.bundle.js +2 -0
  6. data/dist/171.621b9df5978342be5662.bundle.js.map +1 -0
  7. data/dist/18a5d1d99f1c65c33b71.png +0 -0
  8. data/dist/1ddbc3ce40af8c7a648b.svg +6 -0
  9. data/dist/280.b4210a48e650408000c3.bundle.js +2 -0
  10. data/dist/280.b4210a48e650408000c3.bundle.js.map +1 -0
  11. data/dist/{79eaad4fc0c398100809.svg → 3a829bf1fcf02598aa4b.svg} +1 -1
  12. data/dist/556.2be67a37a0c61fdc2485.bundle.js +2 -0
  13. data/dist/{914.b9bc213d93173ce6b0cb.bundle.js.map → 556.2be67a37a0c61fdc2485.bundle.js.map} +1 -1
  14. data/dist/874.ca7a11f56438ad874b9d.bundle.js +2 -0
  15. data/dist/874.ca7a11f56438ad874b9d.bundle.js.map +1 -0
  16. data/dist/8846b19a497771fe0e9d.svg +4 -0
  17. data/dist/d6df0017c0241dfe86ff.svg +6 -0
  18. data/dist/docs/_sidebar.md +1 -0
  19. data/dist/docs/advanced-topics.md +1 -0
  20. data/dist/docs/async-posix-signal-control.md +102 -0
  21. data/dist/docs/guide-startup-shutdown.md +7 -7
  22. data/dist/docs/js/init.js +1 -1
  23. data/dist/docs/memory-allocations.md +28 -6
  24. data/dist/index.html +1 -1
  25. data/dist/locales/be/app.ftl +21 -3
  26. data/dist/locales/de/app.ftl +120 -3
  27. data/dist/locales/el/app.ftl +112 -4
  28. data/dist/locales/en-CA/app.ftl +1131 -0
  29. data/dist/locales/en-GB/app.ftl +121 -4
  30. data/dist/locales/en-US/app.ftl +133 -6
  31. data/dist/locales/es-CL/app.ftl +112 -4
  32. data/dist/locales/fr/app.ftl +112 -4
  33. data/dist/locales/fur/app.ftl +1093 -0
  34. data/dist/locales/fy-NL/app.ftl +120 -3
  35. data/dist/locales/ia/app.ftl +111 -3
  36. data/dist/locales/it/app.ftl +114 -3
  37. data/dist/locales/kab/app.ftl +39 -2
  38. data/dist/locales/nl/app.ftl +121 -4
  39. data/dist/locales/pt-BR/app.ftl +116 -5
  40. data/dist/locales/ru/app.ftl +120 -3
  41. data/dist/locales/sv-SE/app.ftl +111 -3
  42. data/dist/locales/tr/app.ftl +945 -0
  43. data/dist/locales/uk/app.ftl +112 -4
  44. data/dist/locales/zh-CN/app.ftl +117 -6
  45. data/dist/locales/zh-TW/app.ftl +160 -49
  46. data/dist/main.89ba95fadf0fbee4977a.bundle.js +201 -0
  47. data/dist/{main.fc4f388a376c68dab444.bundle.js.LICENSE.txt → main.89ba95fadf0fbee4977a.bundle.js.LICENSE.txt} +1 -30
  48. data/dist/main.89ba95fadf0fbee4977a.bundle.js.map +1 -0
  49. data/dist/photon/{f0599659345cf76717cd.svg → 118632062f4755918dac.svg} +1 -1
  50. data/dist/photon/index.html +1 -1
  51. data/dist/photon/main.fa2aec5d6b214ac1cdb3.bundle.js +2 -0
  52. data/dist/photon/main.fa2aec5d6b214ac1cdb3.bundle.js.map +1 -0
  53. data/dist/sw.js +1 -1
  54. data/dist/sw.js.map +1 -1
  55. data/dist/{workbox-27b29e6f.js → workbox-e3490c72.js} +2 -2
  56. data/dist/{workbox-27b29e6f.js.map → workbox-e3490c72.js.map} +1 -1
  57. data/dist/zee-worker.js +1 -1
  58. data/ruby-bin/profile-viewer +20 -12
  59. data/ruby-bin/profile-viewer-version.rb +1 -1
  60. metadata +32 -29
  61. data/dist/119.92ddbd8a86d8c3ca559e.bundle.js +0 -2
  62. data/dist/119.92ddbd8a86d8c3ca559e.bundle.js.map +0 -1
  63. data/dist/131.c21d348572deab4ece66.bundle.js +0 -2
  64. data/dist/131.c21d348572deab4ece66.bundle.js.map +0 -1
  65. data/dist/308.4d236ce7e6451807cb54.bundle.js +0 -2
  66. data/dist/308.4d236ce7e6451807cb54.bundle.js.map +0 -1
  67. data/dist/9.32828795506af73ed4a1.bundle.js +0 -2
  68. data/dist/9.32828795506af73ed4a1.bundle.js.map +0 -1
  69. data/dist/914.b9bc213d93173ce6b0cb.bundle.js +0 -2
  70. data/dist/b45b29da558efa211628.jpg +0 -0
  71. data/dist/b805360fcc91834556c9.svg +0 -4
  72. data/dist/main.fc4f388a376c68dab444.bundle.js +0 -199
  73. data/dist/main.fc4f388a376c68dab444.bundle.js.map +0 -1
  74. data/dist/photon/main.1dffe4a955d6a0630bc4.bundle.js +0 -2
  75. data/dist/photon/main.1dffe4a955d6a0630bc4.bundle.js.map +0 -1
  76. /data/dist/{ad13da76642d8099fe70.module.wasm → 2f37d1addc2d2f5b699e.module.wasm} +0 -0
@@ -0,0 +1,4 @@
1
+ <!-- This Source Code Form is subject to the terms of the Mozilla Public
2
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
4
+ <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 16 16"><path fill="#000" d="M14.354 2.353l-.708-.707a2.007 2.007 0 0 0-2.828 0l-.379.379a.5.5 0 0 0 0 .707l2.829 2.829a.5.5 0 0 0 .707 0l.379-.379a2.008 2.008 0 0 0 0-2.829zM9.732 3.439a.5.5 0 0 0-.707 0L3.246 9.218a1.986 1.986 0 0 0-.452.712l-1.756 4.39A.5.5 0 0 0 1.5 15a.5.5 0 0 0 .188-.037l4.382-1.752a1.966 1.966 0 0 0 .716-.454l5.779-5.778a.5.5 0 0 0 0-.707zM5.161 12.5l-2.549 1.02a.1.1 0 0 1-.13-.13L3.5 10.831a.1.1 0 0 1 .16-.031l1.54 1.535a.1.1 0 0 1-.039.165z"></path></svg>
@@ -0,0 +1,6 @@
1
+ <!-- This Source Code Form is subject to the terms of the Mozilla Public
2
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
4
+ <svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg">
5
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zM9.731 4.066a8.257 8.257 0 0 0-5.938 7.09h3.266a13.027 13.027 0 0 1 2.672-7.09zm-2.672 8.84h-3.26a8.258 8.258 0 0 0 5.873 7.01 13.025 13.025 0 0 1-2.613-7.01zm4.911 7.01a11.295 11.295 0 0 1-3.157-7.01h6.369a11.296 11.296 0 0 1-3.212 7.01zm-3.157-8.76a11.298 11.298 0 0 1 3.217-7.072 11.299 11.299 0 0 1 3.161 7.072H8.813zm8.132 0a13.027 13.027 0 0 0-2.616-7.073 8.257 8.257 0 0 1 5.878 7.073h-3.262zm-.008 1.75a13.026 13.026 0 0 1-2.669 7.028 8.257 8.257 0 0 0 5.933-7.028h-3.264z" fill="#000" />
6
+ </svg>
@@ -15,6 +15,7 @@
15
15
  * [Perf profiling on Linux](./guide-perf-profiling.md)
16
16
  * [Perf profiling on Android](./guide-android-profiling.md)
17
17
  * [IPC Messages](./ipc-messages.md)
18
+ * [Profiler control using POSIX signals](./async-posix-signal-control.md)
18
19
  * [Video Tutorials](./videos.md)
19
20
  * [Firefox Profiler intro](./videos-intro.md)
20
21
  * [Samples and markers](./videos-samples-markers.md)
@@ -7,3 +7,4 @@ developers of the Firefox browser.
7
7
  * [Perf profiling on Linux](./guide-perf-profiling.md)
8
8
  * [Perf profiling on Android](./guide-android-profiling.md)
9
9
  * [IPC Messages](./ipc-messages.md)
10
+ * [Profiler control using POSIX signals](./async-posix-signal-control.md)
@@ -0,0 +1,102 @@
1
+
2
+ # Profiler control using POSIX signals
3
+
4
+ The Firefox profiler supports the use of asynchronous POSIX signals for a
5
+ limited number of operations, specifically starting and stopping the profiler.
6
+ This can be useful in situations where the normal UI or keyboard shortcut
7
+ control of the profiler is not available.
8
+
9
+ In brief, a user can send the POSIX signal `SIGUSR1` to the main Firefox process
10
+ to start the profiler, and the signal `SIGUSR2` to stop the profiler. Upon
11
+ recieiving the "stop" signal, the profiler will collect the current profile data
12
+ and write it to a `.json` file in the user's downloads directory. For example,
13
+ on MacOS:
14
+
15
+ // Send signal USR1 to the first (main) process of Firefox.app to start the profiler
16
+ kill -s USR1 `pgrep -f Firefox.app | head -n 1`
17
+ // wait for firefox to gather some data
18
+ sleep 10
19
+ // Send signal USR2 to the same process to stop the profiler
20
+ kill -s USR2 `pgrep -f Firefox.app | head -n 1`
21
+ // Find the result in the download folder
22
+ ls ~/Downloads/ | grep "profile.*json"
23
+
24
+ From there, the user can open the written profile using the standard profiler
25
+ UI, by navigating to [profiler.firefox.com](https://profiler.firefox.com), and selecting
26
+ "Load a profile from file".
27
+
28
+ Typically, sending a signal to a program is done using the `kill`
29
+ [command](https://man7.org/linux/man-pages/man1/kill.1.html), as seen in the
30
+ above example. It is important to specify the correct signal, as the default is
31
+ `TERM`, which will terminate the program. For the profiler, only signals
32
+ `SIGUSR1` (for starting) and `SIGUSR2` (for stopping) should be used. Note that they
33
+ are written without the `SIG` prefix when used as an argument to `kill` i.e.:
34
+
35
+ kill -s USR1 <firefox pid> // start the profiler
36
+ kill -s USR2 <firefox pid> // stop the profiler
37
+
38
+ // Alternative syntax
39
+ kill -USR1 <firefox pid>
40
+ kill --signal USR1 <firefox pid>
41
+
42
+ !> Only the process ID of the "main" process should be used. Child processes are
43
+ controlled by the parent process via IPC, and are unable to write their
44
+ processes to disk (due to sandboxing restrictions), so are not useful to profile
45
+ using signals.
46
+
47
+ The process ID of a running instance of Firefox can be found in a number of
48
+ ways, for instance:
49
+
50
+ pgrep -f Firefox.app // On MacOS
51
+ pidof Firefox // on Linux
52
+
53
+ In case of confusion, the main process is typically the one with lowest ID, when
54
+ sorted numerically.
55
+
56
+ Signal support is intended as a last-ditch debugging tool for situations where
57
+ we want to be able to diagnose issues with Firefox, but may not be able to use
58
+ the existing UI controls or Keyboard shortcuts to start/stop the profiler. For
59
+ example, if we encounter a prolonged freeze while browsing, it may be useful to
60
+ capture a profile by using POSIX signals to start and stop the profiler.
61
+
62
+ In a "normal" profiling flow, the resulting profile is communicated to the
63
+ profiler front-end directly, and then displayed to the user at the end of a
64
+ profiling session. The signal-controlled profiler bypasses this flow, and
65
+ instead writes a profile to disk. This makes it possible for us to debug in
66
+ situations where we may not be able to access the profiler UI in the same
67
+ session of firefox as the one we are debugging, with the small added friction of
68
+ needing to directly load the profile.
69
+
70
+ ## Limitations
71
+
72
+ The current implementation of POSIX signal support has a number of important
73
+ limitations that potential users need to be aware of:
74
+
75
+ * The profiler currently uses a set of "default"
76
+ [values](https://searchfox.org/mozilla-central/rev/7a8904165618818f73ab7fc692ace4a57ecd38c9/tools/profiler/core/platform.cpp#633)
77
+ when started using signals. There are currently plans to support configuration
78
+ (see [Bug 1866007](https://bugzilla.mozilla.org/show_bug.cgi?id=1866007) for
79
+ further information).
80
+ * Async signal handling is currently only supported and tested on POSIX native
81
+ platforms, i.e. Linux and MacOS. Support for Windows is planned, but not yet
82
+ implemented (see [Bug
83
+ 1867328](https://bugzilla.mozilla.org/show_bug.cgi?id=1867328) for further
84
+ information).
85
+ * The "stop" signal must be sent to Firefox's "main" process. This is due to
86
+ Firefox's sandboxing rules, which disallow non-main processes (in general)
87
+ from opening file handles. Because of this, individual processes cannot dump
88
+ their own data to disk, so cannot individually handle the stop signal.
89
+ * Signal support in the Firefox profiler is incompatible with Firefox's [code
90
+ coverage](https://firefox-source-docs.mozilla.org/tools/code-coverage/index.html)
91
+ tooling, as both rely on the same POSIX signals (`SIGUSR1` and `SIGUSR2`). In
92
+ an ideal world we could use Linux's
93
+ [real-time](https://man7.org/linux/man-pages/man7/signal.7.html) signals
94
+ instead, as they offer a much larger set of user-defined signals that would
95
+ not clash with the signals used by the code coverage tool. Unfortunately,
96
+ MacOS does not support these signals, so we are limited to the smaller set of
97
+ signals in order to support a wider set of platforms.
98
+ * Although signals are used to start/stop the profiler, the aggregation of
99
+ content-process profiles is still done using "traditional" Firefox IPC calls.
100
+ If, therefore, you are using signals to diagnose issues with a "stuck" main
101
+ thread in the main process, Firefox may not be able to aggregate child content
102
+ process profiles.
@@ -40,7 +40,7 @@ If you have compiled GeckoView-example locally, you can launch it with `./mach r
40
40
  ```bash
41
41
  ./mach run --setenv MOZ_PROFILER_STARTUP=1 \
42
42
  --setenv MOZ_PROFILER_STARTUP_INTERVAL=5 \
43
- --setenv MOZ_PROFILER_STARTUP_FEATURES=threads,js,stackwalk,leaf,screenshots,ipcmessages,java \
43
+ --setenv MOZ_PROFILER_STARTUP_FEATURES=js,stackwalk,screenshots,ipcmessages,java,processcpu,cpu \
44
44
  --setenv MOZ_PROFILER_STARTUP_FILTERS="GeckoMain,Compositor,Renderer,IPDL Background"
45
45
  ```
46
46
 
@@ -50,7 +50,7 @@ Alternatively, if you have installed GeckoView-example from another source, you
50
50
  adb shell am start -n org.mozilla.geckoview_example/.App \
51
51
  --es env0 MOZ_PROFILER_STARTUP=1 \
52
52
  --es env1 MOZ_PROFILER_STARTUP_INTERVAL=5 \
53
- --es env2 MOZ_PROFILER_STARTUP_FEATURES=threads,js,stackwalk,leaf,screenshots,ipcmessages,java \
53
+ --es env2 MOZ_PROFILER_STARTUP_FEATURES=js,stackwalk,screenshots,ipcmessages,java,processcpu,cpu \
54
54
  --es env3 MOZ_PROFILER_STARTUP_FILTERS="GeckoMain,Compositor,Renderer,IPDL Background"
55
55
  ```
56
56
 
@@ -58,15 +58,15 @@ adb shell am start -n org.mozilla.geckoview_example/.App \
58
58
 
59
59
  Fenix has a [different way](https://firefox-source-docs.mozilla.org/mobile/android/geckoview/consumer/automation.html#reading-configuration-from-a-file) to specify environment variables: it uses a yaml file.
60
60
 
61
- The easiest way to set up startup profiling is to run the `<fenix-repo>/tools/setup-startup-profiling.py` script. For example:
61
+ The easiest way to set up startup profiling is to run the `<mozilla-central-repo>/mobile/android/fenix/tools/setup-startup-profiling.py` script. For example:
62
62
  ```bash
63
- ./tools/setup-startup-profiling.py activate nightly # To activate startup profiling on nightly.
64
- ./tools/setup-startup-profiling.py deactivate beta # To deactivate startup profiling on beta.
63
+ ./mobile/android/fenix/tools/setup-startup-profiling.py activate nightly # To activate startup profiling on nightly.
64
+ ./mobile/android/fenix/tools/setup-startup-profiling.py deactivate beta # To deactivate startup profiling on beta.
65
65
  ```
66
66
 
67
67
  If the app is uninstalled or the device is restarted, the `activate` command may need to be re-run. The script is hard-coded to use a default configuration file with default profiling arguments. If you wish to change these arguments or use a non-standard app ID, modify the script locally or read below.
68
68
 
69
- If you don't want to check out [the fenix repository](https://github.com/mozilla-mobile/fenix/), you should be able to download [the script standalone](https://raw.githubusercontent.com/mozilla-mobile/fenix/master/tools/setup-startup-profiling.py) and execute it.
69
+ If you don't want to check out [mozilla-central](https://hg.mozilla.org/mozilla-central/), you should be able to download [the script standalone](https://hg.mozilla.org/mozilla-central/raw-file/tip/mobile/android/fenix/tools/setup-startup-profiling.py) and execute it.
70
70
 
71
71
  #### Manual configuration
72
72
 
@@ -78,7 +78,7 @@ The filename of the YAML file mentioned above depends on the bundle ID of your F
78
78
  env:
79
79
  MOZ_PROFILER_STARTUP: 1
80
80
  MOZ_PROFILER_STARTUP_INTERVAL: 5
81
- MOZ_PROFILER_STARTUP_FEATURES: threads,js,stackwalk,leaf,screenshots,ipcmessages,java
81
+ MOZ_PROFILER_STARTUP_FEATURES: js,stackwalk,screenshots,ipcmessages,java,processcpu,cpu
82
82
  MOZ_PROFILER_STARTUP_FILTERS: GeckoMain,Compositor,Renderer,IPDL Background
83
83
  ```
84
84
  2. Push this file to the device with `adb push org.mozilla.fenix-geckoview-config.yaml /data/local/tmp/`.
data/dist/docs/js/init.js CHANGED
@@ -1 +1 @@
1
- window.$docsify={name:"Firefox Profiler",auto2top:!0,loadSidebar:!0,loadNavbar:!0,subMaxLevel:2,themeColor:"#0a84ff",noCompileLinks:[".*\\.svg"]};
1
+ window.$docsify={name:"Firefox Profiler",auto2top:!0,loadSidebar:!0,loadNavbar:!0,subMaxLevel:2,themeColor:"#0a84ff",noCompileLinks:[".*\\.svg",".*\\.png"]};
@@ -1,10 +1,11 @@
1
1
  # Memory Allocations
2
2
 
3
- The Firefox Profiler supports three different types of memory profiling
3
+ The Firefox Profiler supports different types of memory profiling
4
4
 
5
5
  1. Memory Track
6
- 2. Native Allocations (experimental)
7
- 3. JavaScript Allocations (experimental)
6
+ 2. Native Allocations
7
+ 3. JavaScript Allocations
8
+ 4. Valgrind DHAT Profiles
8
9
 
9
10
  ## Memory Track
10
11
 
@@ -14,9 +15,9 @@ The memory track graphs overall allocation and deallocation numbers over time fo
14
15
 
15
16
  The graph visualization tracks the relative memory usage over the committed range of time. It's important to note that this is not absolute memory usage. The graph and numbers will change when committing a range selection.
16
17
 
17
- ## Native Memory Allocations (experimental)
18
+ ## Native Memory Allocations
18
19
 
19
- The profiler has experimental support for analyzing allocations in native code (C++ and Rust) via stack sampling. These features require Nightly. To follow along you can open this [example showing DevTools opening and closing](https://perfht.ml/2LKZsfY)
20
+ The profiler has support for analyzing allocations in native code (C++ and Rust) via stack sampling. These features require Nightly. To follow along you can open this [example showing DevTools opening and closing](https://perfht.ml/2LKZsfY)
20
21
 
21
22
  The Native Allocations feature works by collecting the stack and size of memory allocations from native (C++ or Rust) code. It does not collect every allocation, but only samples a subset of them. The sampling is biased towards larger allocations and larger frees. Larger allocations are more likely show up in the profile, and will most likely be more representative of the actual memory usage. Keep in mind that since these allocations are only sampled, not all allocations will be recorded. This means that memory track (the orange graph at the top) will most likely report different numbers for memory usage.
22
23
 
@@ -63,8 +64,29 @@ This option shows all of the deallocations that were sampled. Keep in mind that
63
64
 
64
65
  Some components inside of Gecko may implement their own memory management systems, and bypass the usage of system-level functions like `malloc` that are instrumented with this feature. For instance, some code could create a large buffer, and manage its own memory inside of that buffer. This feature would know about the allocation of the larger chunk of memory, but not how smaller allocations could be created inside of that buffer of memory. If this happens, information could be missing or misleading.
65
66
 
66
- ## JavaScript Allocations (experimental)
67
+ ## JavaScript Allocations
67
68
 
68
69
  There is also a JavaScript-only allocation feature. This may be less useful as it only samples the creation of JS objects, and does not track garbage collection or frees. In fact, the Native Allocations feature is a superset of the JavaScript allocations feature, and includes the JavaScript stack information. Enable this through the `Features` section of the popup.
69
70
 
70
71
  ![A screenshot of the call tree showing JS.](images/allocation-js.png)
72
+
73
+ ## Valgrind's "Dynamic Heap Analysis Tool" DHAT
74
+
75
+ When working outside of Firefox, you can use [Valgrind's DHAT tool](https://valgrind.org/docs/manual/dh-manual.html). DHAT has its own viewer, but it lacks some of the visualization and filtering capabilities of the Firefox Profiler. The converted profile will lack some of the finer details like read, write, and access information, but it does contain the amount of bytes allocated. On a Linux system (or even a Linux docker image), you can install it via:
76
+
77
+ ```sh
78
+ sudo apt-get install valgrind
79
+ ```
80
+
81
+ Then run your command:
82
+
83
+ ```
84
+ valgrind --tool=dhat ./my-program
85
+ ```
86
+
87
+ A dhat profile will be output in the same directory as your program: `dhat.out.<pid>`. Drag that file into the profiler to view it. There will be 4 tracks containing the memory information. Only the call tree and flame graph are supported.
88
+
89
+ * **Bytes at End** - Allocations that were never freed when the program ended.
90
+ * **Bytes at Global Max** - Bytes allocated when the global heap size peaked.
91
+ * **Maximum Bytes** - The maximum bytes allocated at that call site at one time.
92
+ * **Total Bytes** - The total bytes allocated over the course of the program.
data/dist/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="initial-scale=1"/><title>Firefox Profiler</title><link rel="preload" href="locales/en-US/app.ftl" as="fetch"/><link rel="icon" href="/favicon.png"><script defer="defer" src="/main.fc4f388a376c68dab444.bundle.js"></script></head><body style="background-color: #363959; /* ink-70 */"><div id="root"></div><div id="root-overlay"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="initial-scale=1"/><title>Firefox Profiler</title><link rel="preload" href="locales/en-US/app.ftl" as="fetch"/><link rel="icon" href="/favicon.png"><script defer="defer" src="/main.89ba95fadf0fbee4977a.bundle.js"></script></head><body style="background-color: #363959; /* ink-70 */"><div id="root"></div><div id="root-overlay"></div></body></html>
@@ -373,8 +373,8 @@ MarkerSidebar--select-a-marker = Выберыце маркер, каб пагл
373
373
 
374
374
  MarkerTable--start = Пачатак
375
375
  MarkerTable--duration = Працягласць
376
- MarkerTable--type = Тып
377
- MarkerTable--description = Апісанне
376
+ MarkerTable--name = Назва
377
+ MarkerTable--details = Падрабязнасці
378
378
 
379
379
  ## MenuButtons
380
380
  ## These strings are used for the buttons at the top of the profile viewer.
@@ -754,7 +754,6 @@ TrackNameButton--hide-process =
754
754
 
755
755
  TrackMemoryGraph--relative-memory-at-this-time = адносная памяць на гэты момант
756
756
  TrackMemoryGraph--memory-range-in-graph = дыяпазон памяці ў графіку
757
- TrackMemoryGraph--operations-since-the-previous-sample = аперацый, пачынаючы з папярэдняга ўзору
758
757
 
759
758
  ## TrackPower
760
759
  ## This is used to show the power used by the CPU and other chips in a computer,
@@ -838,6 +837,25 @@ TrackPower--tooltip-energy-carbon-used-in-preview-milliwatthour = { $value } м
838
837
  TrackPower--tooltip-energy-carbon-used-in-preview-microwatthour = { $value } мкВт·гад ({ $carbonValue } мг CO₂e)
839
838
  .label = Энергія, якая спажываецца ў бягучай выбарцы
840
839
 
840
+ ## TrackBandwidth
841
+ ## This is used to show how much data was transfered over time.
842
+ ## For the strings in this group, the carbon dioxide equivalent is estimated
843
+ ## from the amount of data transfered.
844
+ ## The carbon dioxide equivalent represents the equivalent amount
845
+ ## of CO₂ to achieve the same level of global warming potential.
846
+
847
+ # This is used in the tooltip of the bandwidth track.
848
+ # Variables:
849
+ # $value (String) - the value for the data transfer speed.
850
+ # Will contain the unit (eg. B, KB, MB)
851
+ TrackBandwidthGraph--speed = { $value } у секунду
852
+ .label = Хуткасць перадачы для гэтай выбаркі
853
+ # This is used in the tooltip of the bandwidth track.
854
+ # Variables:
855
+ # $value (String) - how many read or write operations were performed since the previous sample
856
+ TrackBandwidthGraph--read-write-operations-since-the-previous-sample = { $value }
857
+ .label = аперацый уводу/вываду з часу папярэдняй выбаркі
858
+
841
859
  ## TrackSearchField
842
860
  ## The component that is used for the search input in the track context menu.
843
861
 
@@ -30,6 +30,7 @@ AppHeader--github-icon =
30
30
  ## AppViewRouter
31
31
  ## This is used for displaying errors when loading the application.
32
32
 
33
+ AppViewRouter--error-from-post-message = Das Profil konnte nicht importiert werden.
33
34
  AppViewRouter--error-unpublished = Das Profil von { -firefox-brand-name } konnte nicht abgerufen werden.
34
35
  AppViewRouter--error-from-file = Die Datei konnte nicht gelesen oder das darin enthaltene Profil nicht verarbeitet werden.
35
36
  AppViewRouter--error-local = Noch nicht implementiert.
@@ -169,6 +170,46 @@ CallTree--inlining-badge = (inlined)
169
170
  ## This is the sidebar component that is used in Call Tree and Flame Graph panels.
170
171
 
171
172
  CallTreeSidebar--select-a-node = Wählen Sie einen Knoten aus, um Informationen darüber anzuzeigen.
173
+ CallTreeSidebar--call-node-details = Details zum Aufrufknoten
174
+
175
+ ## CallTreeSidebar timing information
176
+ ##
177
+ ## Firefox Profiler stops the execution of the program every 1ms to record the
178
+ ## stack. Only thing we know for sure is the stack at that point of time when
179
+ ## the stack is taken. We try to estimate the time spent in each function and
180
+ ## translate it to a duration. That's why we use the "traced" word here.
181
+ ## There is actually no difference between "Traced running time" and "Running
182
+ ## time" in the context of the profiler. We use "Traced" to emphasize that this
183
+ ## is an estimation where we have more space in the UI.
184
+ ##
185
+ ## "Self time" is the time spent in the function itself, excluding the time spent
186
+ ## in the functions it called. "Running time" is the time spent in the function
187
+ ## itself, including the time spent in the functions it called.
188
+
189
+ CallTreeSidebar--traced-running-time =
190
+ .label = Nachverfolgte Laufzeit
191
+ CallTreeSidebar--traced-self-time =
192
+ .label = Nachverfolgte Eigenzeit
193
+ CallTreeSidebar--running-time =
194
+ .label = Laufzeit
195
+ CallTreeSidebar--self-time =
196
+ .label = Eigenzeit
197
+ CallTreeSidebar--running-samples =
198
+ .label = Laufende Stichproben
199
+ CallTreeSidebar--self-samples =
200
+ .label = Eigenstichproben
201
+ CallTreeSidebar--running-size =
202
+ .label = Laufgröße
203
+ CallTreeSidebar--self-size =
204
+ .label = Eigengröße
205
+ CallTreeSidebar--categories = Kategorien
206
+ CallTreeSidebar--implementation = Implementierung
207
+ CallTreeSidebar--running-milliseconds = Laufende Millisekunden
208
+ CallTreeSidebar--running-sample-count = Anzahl laufende Stichproben
209
+ CallTreeSidebar--running-bytes = Laufende Bytes
210
+ CallTreeSidebar--self-milliseconds = Eigene Millisekunden
211
+ CallTreeSidebar--self-sample-count = Anzahl Eigenstichproben
212
+ CallTreeSidebar--self-bytes = Eigene Bytes
172
213
 
173
214
  ## CompareHome
174
215
  ## This is used in the page to compare two profiles.
@@ -278,6 +319,15 @@ Home--load-files-from-other-tools2 =
278
319
  <perf>Linux perf</perf>, <simpleperf>Android SimplePerf</simpleperf>, die
279
320
  Chrome Performance Panel, <androidstudio>Android Studio</androidstudio> oder
280
321
  eine Datei im <dhat>dhat-Format</dhat> oder <traceevent>Googles Trace-Event-Format</traceevent>. <write>Erfahren Sie, wie Sie Ihren eigenen Importeur schreiben</write>.
322
+ Home--install-chrome-extension = Installieren Sie die Chrome-Erweiterung
323
+ Home--chrome-extension-instructions =
324
+ Verwenden Sie die <a>{ -profiler-brand-name }-Erweiterung für Chrome</a>,
325
+ um Leistungsprofile in Chrome zu erfassen und im { -profiler-brand-name }
326
+ zu analysieren. Installieren Sie die Erweiterung aus dem Chrome Web Store.
327
+ Home--chrome-extension-recording-instructions =
328
+ Verwenden Sie nach der Installation das Symbolleisten-Symbol der Erweiterung
329
+ oder die Tastenkombinationen zum Starten und Stoppen der Profilerstellung. Sie können auch
330
+ Profile exportieren und hier zur detaillierten Analyse laden.
281
331
 
282
332
  ## IdleSearchField
283
333
  ## The component that is used for all the search inputs in the application.
@@ -371,8 +421,8 @@ MarkerSidebar--select-a-marker = Wählen Sie eine Markierung aus, um Information
371
421
 
372
422
  MarkerTable--start = Beginn
373
423
  MarkerTable--duration = Dauer
374
- MarkerTable--type = Typ
375
- MarkerTable--description = Beschreibung
424
+ MarkerTable--name = Name
425
+ MarkerTable--details = Details
376
426
 
377
427
  ## MenuButtons
378
428
  ## These strings are used for the buttons at the top of the profile viewer.
@@ -611,6 +661,7 @@ ProfileFilterNavigator--full-range-with-duration = Vollständiger Zeitraum ({ $f
611
661
 
612
662
  ## Profile Loader Animation
613
663
 
664
+ ProfileLoaderAnimation--loading-from-post-message = Das Profil wird importiert und verarbeitet…
614
665
  ProfileLoaderAnimation--loading-unpublished = Das Profil wird direkt von { -firefox-brand-name } importiert…
615
666
  ProfileLoaderAnimation--loading-from-file = Datei lesen und Profil verarbeiten…
616
667
  ProfileLoaderAnimation--loading-local = Noch nicht implementiert.
@@ -686,6 +737,13 @@ TabBar--marker-table-tab = Markierungstabelle
686
737
  TabBar--network-tab = Netzwerk
687
738
  TabBar--js-tracer-tab = JS-Aufzeichnung
688
739
 
740
+ ## TabSelectorMenu
741
+ ## This component is a context menu that's opened when you click on the root
742
+ ## range at the top left corner for profiler analysis view. It's used to switch
743
+ ## between tabs that were captured in the profile.
744
+
745
+ TabSelectorMenu--all-tabs-and-windows = Alle Tabs und Fenster
746
+
689
747
  ## TrackContextMenu
690
748
  ## This is used as a context menu for timeline to organize the tracks in the
691
749
  ## analysis UI.
@@ -702,6 +760,10 @@ TrackContextMenu--hide-other-screenshots-tracks = Andere Screenshots-Tracks ausb
702
760
  TrackContextMenu--hide-track = „{ $trackName }“ verbergen
703
761
  TrackContextMenu--show-all-tracks = Alle Tracks anzeigen
704
762
  TrackContextMenu--show-local-tracks-in-process = Alle Tracks in diesem Prozess anzeigen
763
+ # This is used as the context menu item to hide all tracks of the selected track's type.
764
+ # Variables:
765
+ # $type (String) - Name of the type of selected track to hide.
766
+ TrackContextMenu--hide-all-tracks-by-selected-track-type = Alle Spuren vom Typ „{ $type }“ ausblenden
705
767
  # This is used in the tracks context menu as a button to show all the tracks
706
768
  # that match the search filter.
707
769
  TrackContextMenu--show-all-matching-tracks = Alle passenden Tracks anzeigen
@@ -727,7 +789,7 @@ TrackNameButton--hide-process =
727
789
 
728
790
  TrackMemoryGraph--relative-memory-at-this-time = Relativer Speicherverbrauch zu diesem Zeitpunkt
729
791
  TrackMemoryGraph--memory-range-in-graph = Speicherbereich im Diagramm
730
- TrackMemoryGraph--operations-since-the-previous-sample = Operationen seit der vorherigen Stichprobe
792
+ TrackMemoryGraph--allocations-and-deallocations-since-the-previous-sample = Allokationen und Aufhebungen von Allokationen seit der vorherigen Stichprobe
731
793
 
732
794
  ## TrackPower
733
795
  ## This is used to show the power used by the CPU and other chips in a computer,
@@ -754,6 +816,21 @@ TrackPower--tooltip-power-watt = { $value } W
754
816
  # $value (String) - the power value at this location
755
817
  TrackPower--tooltip-power-milliwatt = { $value } mW
756
818
  .label = Leistung
819
+ # This is used in the tooltip when the power value uses the kilowatt unit.
820
+ # Variables:
821
+ # $value (String) - the power value at this location
822
+ TrackPower--tooltip-average-power-kilowatt = { $value } kW
823
+ .label = Durchschnittliche Leistung in der aktuellen Auswahl
824
+ # This is used in the tooltip when the power value uses the watt unit.
825
+ # Variables:
826
+ # $value (String) - the power value at this location
827
+ TrackPower--tooltip-average-power-watt = { $value } W
828
+ .label = Durchschnittliche Leistung in der aktuellen Auswahl
829
+ # This is used in the tooltip when the instant power value uses the milliwatt unit.
830
+ # Variables:
831
+ # $value (String) - the power value at this location
832
+ TrackPower--tooltip-average-power-milliwatt = { $value } mW
833
+ .label = Durchschnittliche Leistung in der aktuellen Auswahl
757
834
  # This is used in the tooltip when the energy used in the current range uses the
758
835
  # kilowatt-hour unit.
759
836
  # Variables:
@@ -811,6 +888,46 @@ TrackPower--tooltip-energy-carbon-used-in-preview-milliwatthour = { $value } mWh
811
888
  TrackPower--tooltip-energy-carbon-used-in-preview-microwatthour = { $value } µWh ({ $carbonValue } mg CO₂e)
812
889
  .label = In der aktuellen Auswahl verwendete Energie
813
890
 
891
+ ## TrackBandwidth
892
+ ## This is used to show how much data was transfered over time.
893
+ ## For the strings in this group, the carbon dioxide equivalent is estimated
894
+ ## from the amount of data transfered.
895
+ ## The carbon dioxide equivalent represents the equivalent amount
896
+ ## of CO₂ to achieve the same level of global warming potential.
897
+
898
+ # This is used in the tooltip of the bandwidth track.
899
+ # Variables:
900
+ # $value (String) - the value for the data transfer speed.
901
+ # Will contain the unit (eg. B, KB, MB)
902
+ TrackBandwidthGraph--speed = { $value } pro Sekunde
903
+ .label = Übertragungsgeschwindigkeit für diese Teilmenge
904
+ # This is used in the tooltip of the bandwidth track.
905
+ # Variables:
906
+ # $value (String) - how many read or write operations were performed since the previous sample
907
+ TrackBandwidthGraph--read-write-operations-since-the-previous-sample = { $value }
908
+ .label = Lese-/Schreiboperationen seit der vorherigen Teilmenge
909
+ # This is used in the tooltip of the bandwidth track.
910
+ # Variables:
911
+ # $value (String) - the total of transfered data until the hovered time.
912
+ # Will contain the unit (eg. B, KB, MB)
913
+ # $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value in grams
914
+ TrackBandwidthGraph--cumulative-bandwidth-at-this-time = { $value } ({ $carbonValue } g CO₂e)
915
+ .label = Bislang übertragene Daten
916
+ # This is used in the tooltip of the bandwidth track.
917
+ # Variables:
918
+ # $value (String) - the total of transfered data during the visible time range.
919
+ # Will contain the unit (eg. B, KB, MB)
920
+ # $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value in grams
921
+ TrackBandwidthGraph--total-bandwidth-in-graph = { $value } ({ $carbonValue } g CO₂e)
922
+ .label = Im sichtbaren Bereich übertragene Daten
923
+ # This is used in the tooltip of the bandwidth track when a range is selected.
924
+ # Variables:
925
+ # $value (String) - the total of transfered data during the selected time range.
926
+ # Will contain the unit (eg. B, KB, MB)
927
+ # $carbonValue (string) - the carbon dioxide equivalent (CO₂e) value in grams
928
+ TrackBandwidthGraph--total-bandwidth-in-range = { $value } ({ $carbonValue } g CO₂e)
929
+ .label = In der aktuellen Auswahl übertragene Daten
930
+
814
931
  ## TrackSearchField
815
932
  ## The component that is used for the search input in the track context menu.
816
933