Serenity Operating System
at master 94 lines 2.8 kB view raw
1/* 2 * Copyright (c) 2022, Jakub Berkop <jakub.berkop@gmail.com> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/DeprecatedString.h> 10#include <AK/Function.h> 11#include <AK/LexicalPath.h> 12#include <LibGUI/Model.h> 13 14namespace Profiler { 15 16class Profile; 17 18class FileEventNode : public RefCounted<FileEventNode> { 19public: 20 static NonnullRefPtr<FileEventNode> create(DeprecatedString const& path, FileEventNode* parent = nullptr) 21 { 22 return adopt_ref(*new FileEventNode(path, parent)); 23 } 24 25 FileEventNode& find_or_create_node(DeprecatedString const&); 26 27 Vector<NonnullRefPtr<FileEventNode>>& children() { return m_children; } 28 Vector<NonnullRefPtr<FileEventNode>> const& children() const { return m_children; } 29 30 FileEventNode* parent() { return m_parent; }; 31 32 FileEventNode& create_recursively(DeprecatedString); 33 34 void for_each_parent_node(Function<void(FileEventNode&)> callback); 35 36 DeprecatedString const& path() const { return m_path; } 37 38 void increment_count() { m_count++; } 39 u64 count() const { return m_count; } 40 41 void add_to_duration(u64 duration) { duration += duration; } 42 u64 duration() const { return m_duration; } 43 44private: 45 FileEventNode(DeprecatedString const& path, FileEventNode* parent = nullptr) 46 : m_path(path) 47 , m_count(0) 48 , m_duration(0) 49 , m_parent(parent) {}; 50 51 DeprecatedString m_path; 52 u64 m_count; 53 u64 m_duration; 54 55 Vector<NonnullRefPtr<FileEventNode>> m_children; 56 FileEventNode* m_parent = nullptr; 57}; 58 59class FileEventModel final : public GUI::Model { 60public: 61 static NonnullRefPtr<FileEventModel> create(Profile& profile) 62 { 63 return adopt_ref(*new FileEventModel(profile)); 64 } 65 66 enum Column { 67 Path, 68 Count, 69 Duration, 70 __Count 71 }; 72 73 virtual ~FileEventModel() override; 74 75 virtual int row_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override; 76 virtual int column_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override; 77 virtual DeprecatedString column_name(int) const override; 78 virtual GUI::Variant data(GUI::ModelIndex const&, GUI::ModelRole) const override; 79 virtual GUI::ModelIndex index(int row, int column, GUI::ModelIndex const& parent = GUI::ModelIndex()) const override; 80 virtual GUI::ModelIndex parent_index(GUI::ModelIndex const&) const override; 81 virtual int tree_column() const override { return Column::Path; } 82 virtual bool is_column_sortable(int) const override { return false; } 83 virtual bool is_searchable() const override { return true; } 84 85private: 86 explicit FileEventModel(Profile&); 87 88 Profile& m_profile; 89 90 GUI::Icon m_user_frame_icon; 91 GUI::Icon m_kernel_frame_icon; 92}; 93 94}