summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrendan Coles <bcoles@gmail.com>2021-02-24 15:40:36 +0000
committerAndreas Kling <kling@serenityos.org>2021-02-24 20:40:00 +0100
commit0ffc06b795865314009c29b6930cab3603e7bcec (patch)
treeac05afef52f746eb9f4ce2d443d13f30a4319107
parent8f867df31aaa249e100ade75d314a4037a8dfb96 (diff)
downloadserenity-0ffc06b795865314009c29b6930cab3603e7bcec.zip
Profiler: Add help documentation
-rw-r--r--Base/usr/share/man/man1/Profiler.md47
-rw-r--r--Userland/DevTools/Profiler/CMakeLists.txt2
-rw-r--r--Userland/DevTools/Profiler/main.cpp13
3 files changed, 61 insertions, 1 deletions
diff --git a/Base/usr/share/man/man1/Profiler.md b/Base/usr/share/man/man1/Profiler.md
new file mode 100644
index 0000000000..8cdfb1e4d1
--- /dev/null
+++ b/Base/usr/share/man/man1/Profiler.md
@@ -0,0 +1,47 @@
+## Name
+
+Profiler - Serenity process profiler
+
+## Synopsis
+
+```**sh
+$ Profiler [--pid PID] [perfcore file]
+```
+
+## Description
+
+Profiler facilitates process performance profiling and provides a GUI offering
+visual graph and tree representations to easily navigate generated profiling
+information.
+
+If no arguments are provided, a window containing a list of running processes
+is presented, allowing a process to be selected for profiling.
+
+Profiling information is written to `perfcore.<pid>` in the working directory
+and opened immediately for browsing following termination of profiling.
+
+Profiler can also load performance information from previously created
+`perfcore` files.
+
+## Options
+
+* `-p PID`, `--pid PID`: PID to profile
+
+## Examples
+
+Profile running Shell process:
+
+```sh
+$ Profiler -p $(pidof Shell)
+```
+
+Open a previously created perfcore file for browsing:
+
+```sh
+$ Profiler perfcore.123
+```
+
+## See also
+
+* [`perfcore`(5)](../man5/perfcore.md)
+
diff --git a/Userland/DevTools/Profiler/CMakeLists.txt b/Userland/DevTools/Profiler/CMakeLists.txt
index 1cb7b95140..ef0413de0a 100644
--- a/Userland/DevTools/Profiler/CMakeLists.txt
+++ b/Userland/DevTools/Profiler/CMakeLists.txt
@@ -7,4 +7,4 @@ set(SOURCES
)
serenity_app(Profiler ICON app-profiler)
-target_link_libraries(Profiler LibGUI LibX86 LibCoreDump)
+target_link_libraries(Profiler LibGUI LibDesktop LibX86 LibCoreDump)
diff --git a/Userland/DevTools/Profiler/main.cpp b/Userland/DevTools/Profiler/main.cpp
index 5f801936c0..4c5722200a 100644
--- a/Userland/DevTools/Profiler/main.cpp
+++ b/Userland/DevTools/Profiler/main.cpp
@@ -31,6 +31,7 @@
#include <LibCore/EventLoop.h>
#include <LibCore/ProcessStatisticsReader.h>
#include <LibCore/Timer.h>
+#include <LibDesktop/Launcher.h>
#include <LibGUI/Action.h>
#include <LibGUI/Application.h>
#include <LibGUI/BoxLayout.h>
@@ -80,6 +81,15 @@ int main(int argc, char** argv)
auto& profile = profile_or_error.value();
auto window = GUI::Window::construct();
+
+ if (!Desktop::Launcher::add_allowed_handler_with_only_specific_urls(
+ "/bin/Help",
+ { URL::create_with_file_protocol("/usr/share/man/man1/Profiler.md") })
+ || !Desktop::Launcher::seal_allowlist()) {
+ warnln("Failed to set up allowed launch URLs");
+ return 1;
+ }
+
window->set_title("Profiler");
window->set_icon(app_icon.bitmap_for_size(16));
window->resize(800, 600);
@@ -144,6 +154,9 @@ int main(int argc, char** argv)
view_menu.add_action(percent_action);
auto& help_menu = menubar->add_menu("Help");
+ help_menu.add_action(GUI::CommonActions::make_help_action([](auto&) {
+ Desktop::Launcher::open(URL::create_with_file_protocol("/usr/share/man/man1/Profiler.md"), "/bin/Help");
+ }));
help_menu.add_action(GUI::CommonActions::make_about_action("Profiler", app_icon, window));
app->set_menubar(move(menubar));