diff options
| author | Peter LaFosse <peter@vector35.com> | 2023-02-16 14:44:53 -0500 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2023-02-17 09:08:04 -0500 |
| commit | c80262b75947c7a408483482f445b812a4611478 (patch) | |
| tree | e8fc9b4fc6b29a3d7352f03665f5c4069a6ee0cc | |
| parent | 8daa0bd5528549ccc9a6612f77089539c8640f84 (diff) | |
LogView: keep a local cache of bv valid ranges to avoid taking a lock in the core while painting
| -rw-r--r-- | ui/logview.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/ui/logview.h b/ui/logview.h index 19251df7..62926c3c 100644 --- a/ui/logview.h +++ b/ui/logview.h @@ -88,7 +88,7 @@ class BINARYNINJAUIAPI LogListFilterProxyModel : public QSortFilterProxyModel \ingroup logview */ -class BINARYNINJAUIAPI LogListModel : public QAbstractItemModel, public BinaryNinja::LogListener +class BINARYNINJAUIAPI LogListModel : public QAbstractItemModel, BinaryNinja::LogListener { Q_OBJECT @@ -156,7 +156,7 @@ class BINARYNINJAUIAPI LogListModel : public QAbstractItemModel, public BinaryNi \ingroup logview */ -class BINARYNINJAUIAPI LogItemDelegate : public QStyledItemDelegate +class BINARYNINJAUIAPI LogItemDelegate : public QStyledItemDelegate, public BinaryNinja::BinaryDataNotification { Q_OBJECT @@ -164,11 +164,14 @@ class BINARYNINJAUIAPI LogItemDelegate : public QStyledItemDelegate ViewFrame* m_viewFrame = nullptr; View* m_view = nullptr; BinaryViewRef m_data; - + std::vector<std::pair<uint64_t, uint64_t>> m_validRanges; QFont m_font; int m_height; - bool IsNavigable(const QString& str, const std::pair<int, int>& offsetLen, uint64_t& value, bool highlight) const; + bool isNavigable(const QString& str, const std::pair<int, int>& offsetLen, uint64_t& value, bool highlight) const; + void cacheValidRanges(); + bool isAddressValid(uint64_t addr) const; + public: LogItemDelegate(QWidget* parent); @@ -176,7 +179,9 @@ class BINARYNINJAUIAPI LogItemDelegate : public QStyledItemDelegate void updateFonts(); virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& idx) const override; virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& idx) const override; - + virtual void OnSegmentAdded(BinaryNinja::BinaryView*, BinaryNinja::Segment*) override { cacheValidRanges(); } + virtual void OnSegmentRemoved(BinaryNinja::BinaryView*, BinaryNinja::Segment*) override { cacheValidRanges(); } + virtual void OnSegmentUpdated(BinaryNinja::BinaryView*, BinaryNinja::Segment*) override { cacheValidRanges(); } protected: bool editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index) override; |
