Profiler: Add help documentation

This commit is contained in:
Brendan Coles 2021-02-24 15:40:36 +00:00 committed by Andreas Kling
parent 8f867df31a
commit 0ffc06b795
Notes: sideshowbarker 2024-07-18 21:57:14 +09:00
3 changed files with 61 additions and 1 deletions

View file

@ -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)

View file

@ -7,4 +7,4 @@ set(SOURCES
) )
serenity_app(Profiler ICON app-profiler) serenity_app(Profiler ICON app-profiler)
target_link_libraries(Profiler LibGUI LibX86 LibCoreDump) target_link_libraries(Profiler LibGUI LibDesktop LibX86 LibCoreDump)

View file

@ -31,6 +31,7 @@
#include <LibCore/EventLoop.h> #include <LibCore/EventLoop.h>
#include <LibCore/ProcessStatisticsReader.h> #include <LibCore/ProcessStatisticsReader.h>
#include <LibCore/Timer.h> #include <LibCore/Timer.h>
#include <LibDesktop/Launcher.h>
#include <LibGUI/Action.h> #include <LibGUI/Action.h>
#include <LibGUI/Application.h> #include <LibGUI/Application.h>
#include <LibGUI/BoxLayout.h> #include <LibGUI/BoxLayout.h>
@ -80,6 +81,15 @@ int main(int argc, char** argv)
auto& profile = profile_or_error.value(); auto& profile = profile_or_error.value();
auto window = GUI::Window::construct(); 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_title("Profiler");
window->set_icon(app_icon.bitmap_for_size(16)); window->set_icon(app_icon.bitmap_for_size(16));
window->resize(800, 600); window->resize(800, 600);
@ -144,6 +154,9 @@ int main(int argc, char** argv)
view_menu.add_action(percent_action); view_menu.add_action(percent_action);
auto& help_menu = menubar->add_menu("Help"); 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)); help_menu.add_action(GUI::CommonActions::make_about_action("Profiler", app_icon, window));
app->set_menubar(move(menubar)); app->set_menubar(move(menubar));