瀏覽代碼

ProfileViewer: Make sure ProfileNodes have the correct parent pointer

We were forgetting to call ProfileNode::add_child() which is how the
parent node pointer gets set. This fixes the weird looking GTreeView.
Andreas Kling 5 年之前
父節點
當前提交
9150be4716
共有 3 個文件被更改,包括 9 次插入8 次删除
  1. 1 1
      DevTools/ProfileViewer/Profile.cpp
  2. 4 4
      DevTools/ProfileViewer/Profile.h
  3. 4 3
      DevTools/ProfileViewer/ProfileModel.cpp

+ 1 - 1
DevTools/ProfileViewer/Profile.cpp

@@ -4,7 +4,7 @@
 #include <LibCore/CFile.h>
 #include <stdio.h>
 
-Profile::Profile(const JsonArray& json, NonnullRefPtrVector<ProfileNode>&& roots)
+Profile::Profile(const JsonArray& json, Vector<NonnullRefPtr<ProfileNode>>&& roots)
     : m_json(json)
     , m_roots(move(roots))
 {

+ 4 - 4
DevTools/ProfileViewer/Profile.h

@@ -43,7 +43,7 @@ public:
             }
         }
         auto new_child = ProfileNode::create(symbol, address, offset);
-        m_children.append(new_child);
+        add_child(new_child);
         return new_child;
     };
 
@@ -77,12 +77,12 @@ public:
 
     GModel& model();
 
-    const NonnullRefPtrVector<ProfileNode>& roots() const { return m_roots; }
+    const Vector<NonnullRefPtr<ProfileNode>>& roots() const { return m_roots; }
 
 private:
-    explicit Profile(const JsonArray&, NonnullRefPtrVector<ProfileNode>&&);
+    explicit Profile(const JsonArray&, Vector<NonnullRefPtr<ProfileNode>>&&);
 
     JsonArray m_json;
     RefPtr<ProfileModel> m_model;
-    NonnullRefPtrVector<ProfileNode> m_roots;
+    Vector<NonnullRefPtr<ProfileNode>> m_roots;
 };

+ 4 - 3
DevTools/ProfileViewer/ProfileModel.cpp

@@ -19,7 +19,7 @@ GModelIndex ProfileModel::index(int row, int column, const GModelIndex& parent)
     if (!parent.is_valid()) {
         if (m_profile.roots().is_empty())
             return {};
-        return create_index(row, column, &m_profile.roots().at(row));
+        return create_index(row, column, m_profile.roots().at(row).ptr());
     }
     auto& remote_parent = *static_cast<ProfileNode*>(parent.internal_data());
     return create_index(row, column, remote_parent.children().at(row).ptr());
@@ -33,11 +33,12 @@ GModelIndex ProfileModel::parent_index(const GModelIndex& index) const
     if (!node.parent())
         return {};
 
-    // NOTE: If the parent has no parent, it's a root, so we have to look among the remote roots.
+    // NOTE: If the parent has no parent, it's a root, so we have to look among the roots.
     if (!node.parent()->parent()) {
         for (int row = 0; row < m_profile.roots().size(); ++row) {
-            if (&m_profile.roots()[row] == node.parent())
+            if (m_profile.roots()[row].ptr() == node.parent()) {
                 return create_index(row, 0, node.parent());
+            }
         }
         ASSERT_NOT_REACHED();
         return {};