mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:57:44 +00:00
Profiler: Add source code view
This adds a new view mode to profiler which displays source lines and samples that occured at those lines. This view can be opened via the menu or by pressing CTRL-S. It does this by mapping file names from DWARF to "/usr/src/serenity/..." i.e. source code should be copied to /usr/src/serenity/Userland and /usr/src/serenity/Kernel to be visible in this mode. Currently *all* files contributing to the selected function are loaded completely which could be a lot of data when dealing with lots of inlined code.
This commit is contained in:
parent
e6df1c9988
commit
cf8427b7b4
6 changed files with 315 additions and 0 deletions
54
Userland/DevTools/Profiler/SourceModel.h
Normal file
54
Userland/DevTools/Profiler/SourceModel.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Stephan Unverwerth <s.unverwerth@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibGUI/Model.h>
|
||||
|
||||
namespace Profiler {
|
||||
|
||||
class Profile;
|
||||
class ProfileNode;
|
||||
|
||||
struct SourceLineData {
|
||||
u32 event_count { 0 };
|
||||
float percent { 0 };
|
||||
String location;
|
||||
u32 line_number { 0 };
|
||||
String source_code;
|
||||
};
|
||||
|
||||
class SourceModel final : public GUI::Model {
|
||||
public:
|
||||
static NonnullRefPtr<SourceModel> create(Profile& profile, ProfileNode& node)
|
||||
{
|
||||
return adopt_ref(*new SourceModel(profile, node));
|
||||
}
|
||||
|
||||
enum Column {
|
||||
SampleCount,
|
||||
Location,
|
||||
LineNumber,
|
||||
SourceCode,
|
||||
__Count
|
||||
};
|
||||
|
||||
virtual int row_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override;
|
||||
virtual int column_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override { return Column::__Count; }
|
||||
virtual String column_name(int) const override;
|
||||
virtual GUI::Variant data(GUI::ModelIndex const&, GUI::ModelRole) const override;
|
||||
virtual bool is_column_sortable(int) const override { return false; }
|
||||
|
||||
private:
|
||||
SourceModel(Profile&, ProfileNode&);
|
||||
|
||||
Profile& m_profile;
|
||||
ProfileNode& m_node;
|
||||
|
||||
Vector<SourceLineData> m_source_lines;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue