summaryrefslogtreecommitdiff
path: root/binaryninjaapi.h
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-08-31 17:21:53 -0400
committerRusty Wagner <rusty@vector35.com>2016-08-31 17:22:29 -0400
commitc910aa5a42fb789225bb58c990d077d39da9b4ce (patch)
tree45222fe184d2f0a64b4801fde05b72454cf3aa05 /binaryninjaapi.h
parent548b906badf83e500551522a87242fefbc582d2c (diff)
Cache lines on API side to avoid UI hangs with large basic blocks
Diffstat (limited to 'binaryninjaapi.h')
-rw-r--r--binaryninjaapi.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 6902c1a3..fed1bbd9 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1694,6 +1694,10 @@ namespace BinaryNinja
class FunctionGraphBlock: public CoreRefCountObject<BNFunctionGraphBlock,
BNNewFunctionGraphBlockReference, BNFreeFunctionGraphBlock>
{
+ std::vector<DisassemblyTextLine> m_cachedLines;
+ std::vector<FunctionGraphEdge> m_cachedEdges;
+ bool m_cachedLinesValid, m_cachedEdgesValid;
+
public:
FunctionGraphBlock(BNFunctionGraphBlock* block);
@@ -1705,14 +1709,15 @@ namespace BinaryNinja
int GetWidth() const;
int GetHeight() const;
- std::vector<DisassemblyTextLine> GetLines() const;
- std::vector<FunctionGraphEdge> GetOutgoingEdges() const;
+ const std::vector<DisassemblyTextLine>& GetLines();
+ const std::vector<FunctionGraphEdge>& GetOutgoingEdges();
};
class FunctionGraph: public RefCountObject
{
BNFunctionGraph* m_graph;
std::function<void()> m_completeFunc;
+ std::map<BNFunctionGraphBlock*, Ref<FunctionGraphBlock>> m_cachedBlocks;
static void CompleteCallback(void* ctxt);
@@ -1735,7 +1740,7 @@ namespace BinaryNinja
void OnComplete(const std::function<void()>& func);
void Abort();
- std::vector<Ref<FunctionGraphBlock>> GetBlocks() const;
+ std::vector<Ref<FunctionGraphBlock>> GetBlocks();
int GetWidth() const;
int GetHeight() const;