Skip to content

Commit 8bf4201

Browse files
bgianfoawesomekling
authored andcommitted
Kernel: Move process creation perf events to PerformanceManager
1 parent ccdcb6a commit 8bf4201

File tree

4 files changed

+23
-13
lines changed

4 files changed

+23
-13
lines changed

Kernel/PerformanceManager.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,22 @@
1313
namespace Kernel {
1414

1515
class PerformanceManager {
16-
1716
public:
17+
inline static void add_process_created_event(Process& process)
18+
{
19+
if (g_profiling_all_threads) {
20+
VERIFY(g_global_perf_events);
21+
g_global_perf_events->add_process(process, ProcessEventType::Create);
22+
}
23+
}
24+
25+
inline static void add_process_exec_event(Process& process)
26+
{
27+
if (auto* event_buffer = process.current_perf_events_buffer()) {
28+
event_buffer->add_process(process, ProcessEventType::Exec);
29+
}
30+
}
31+
1832
inline static void add_thread_created_event(Thread& thread)
1933
{
2034
if (auto* event_buffer = thread.process().current_perf_events_buffer()) {

Kernel/Syscalls/execve.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <Kernel/Debug.h>
1212
#include <Kernel/FileSystem/Custody.h>
1313
#include <Kernel/FileSystem/FileDescription.h>
14-
#include <Kernel/PerformanceEventBuffer.h>
14+
#include <Kernel/PerformanceManager.h>
1515
#include <Kernel/Process.h>
1616
#include <Kernel/Random.h>
1717
#include <Kernel/Time/TimeManagement.h>
@@ -636,9 +636,7 @@ KResult Process::do_exec(NonnullRefPtr<FileDescription> main_program_description
636636
tss.cr3 = space().page_directory().cr3();
637637
tss.ss2 = pid().value();
638638

639-
if (auto* event_buffer = current_perf_events_buffer()) {
640-
event_buffer->add_process(*this, ProcessEventType::Exec);
641-
}
639+
PerformanceManager::add_process_exec_event(*this);
642640

643641
{
644642
ScopedSpinLock lock(g_scheduler_lock);

Kernel/Syscalls/fork.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include <Kernel/Debug.h>
88
#include <Kernel/FileSystem/Custody.h>
99
#include <Kernel/FileSystem/FileDescription.h>
10-
#include <Kernel/PerformanceEventBuffer.h>
10+
#include <Kernel/PerformanceManager.h>
1111
#include <Kernel/Process.h>
1212
#include <Kernel/VM/Region.h>
1313

@@ -85,10 +85,7 @@ KResultOr<pid_t> Process::sys$fork(RegisterState& regs)
8585
g_processes->prepend(child);
8686
}
8787

88-
if (g_profiling_all_threads) {
89-
VERIFY(g_global_perf_events);
90-
g_global_perf_events->add_process(*child, ProcessEventType::Create);
91-
}
88+
PerformanceManager::add_process_created_event(*child);
9289

9390
ScopedSpinLock lock(g_scheduler_lock);
9491
child_first_thread->set_affinity(Thread::current()->affinity());

Kernel/Syscalls/profiling.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include <Kernel/CoreDump.h>
88
#include <Kernel/FileSystem/FileDescription.h>
99
#include <Kernel/FileSystem/VirtualFileSystem.h>
10-
#include <Kernel/PerformanceEventBuffer.h>
10+
#include <Kernel/PerformanceManager.h>
1111
#include <Kernel/Process.h>
1212

1313
namespace Kernel {
@@ -27,12 +27,13 @@ KResultOr<int> Process::sys$profiling_enable(pid_t pid)
2727
g_global_perf_events->clear();
2828
else
2929
g_global_perf_events = PerformanceEventBuffer::try_create_with_size(32 * MiB).leak_ptr();
30+
3031
ScopedSpinLock lock(g_processes_lock);
32+
g_profiling_all_threads = true;
3133
Process::for_each([](auto& process) {
32-
g_global_perf_events->add_process(process, ProcessEventType::Create);
34+
PerformanceManager::add_process_created_event(process);
3335
return IterationDecision::Continue;
3436
});
35-
g_profiling_all_threads = true;
3637
return 0;
3738
}
3839

0 commit comments

Comments
 (0)