mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-10 01:51:03 +09:00
Kernel: Move perf event backtrace capture out of Thread class
There's no need for this to be generic and support running from an arbitrary thread context. Perf events are always generated from within the thread being profiled, so take advantage of that to simplify the code. Also use Vector capacity to avoid heap allocations.
This commit is contained in:
parent
9c77980965
commit
c10e0adaca
Notes:
sideshowbarker
2024-07-18 22:36:31 +09:00
Author: https://github.com/awesomekling
Commit: c10e0adaca
3 changed files with 24 additions and 31 deletions
|
@ -1017,30 +1017,6 @@ String Thread::backtrace_impl()
|
|||
return builder.to_string();
|
||||
}
|
||||
|
||||
Vector<FlatPtr> Thread::raw_backtrace(FlatPtr ebp, FlatPtr eip) const
|
||||
{
|
||||
InterruptDisabler disabler;
|
||||
auto& process = const_cast<Process&>(this->process());
|
||||
ProcessPagingScope paging_scope(process);
|
||||
Vector<FlatPtr, PerformanceEvent::max_stack_frame_count> backtrace;
|
||||
backtrace.append(eip);
|
||||
FlatPtr stack_ptr_copy;
|
||||
FlatPtr stack_ptr = (FlatPtr)ebp;
|
||||
while (stack_ptr) {
|
||||
void* fault_at;
|
||||
if (!safe_memcpy(&stack_ptr_copy, (void*)stack_ptr, sizeof(FlatPtr), fault_at))
|
||||
break;
|
||||
FlatPtr retaddr;
|
||||
if (!safe_memcpy(&retaddr, (void*)(stack_ptr + sizeof(FlatPtr)), sizeof(FlatPtr), fault_at))
|
||||
break;
|
||||
backtrace.append(retaddr);
|
||||
if (backtrace.size() == PerformanceEvent::max_stack_frame_count)
|
||||
break;
|
||||
stack_ptr = stack_ptr_copy;
|
||||
}
|
||||
return backtrace;
|
||||
}
|
||||
|
||||
size_t Thread::thread_specific_region_alignment() const
|
||||
{
|
||||
return max(process().m_master_tls_alignment, alignof(ThreadSpecificData));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue