Add support for memory block events to CliContext.

This commit is contained in:
Rene Gollent
2012-12-18 21:37:54 -05:00
parent 779b84b17b
commit c7f5dd6207
2 changed files with 44 additions and 4 deletions
@@ -26,10 +26,11 @@ static CliContext* sCurrentContext;
struct CliContext::Event : DoublyLinkedListLinkImpl<CliContext::Event> { struct CliContext::Event : DoublyLinkedListLinkImpl<CliContext::Event> {
Event(int type, Thread* thread = NULL) Event(int type, Thread* thread = NULL, TeamMemoryBlock* block = NULL)
: :
fType(type), fType(type),
fThreadReference(thread) fThreadReference(thread),
fMemoryBlockReference(block)
{ {
} }
@@ -43,9 +44,15 @@ struct CliContext::Event : DoublyLinkedListLinkImpl<CliContext::Event> {
return fThreadReference.Get(); return fThreadReference.Get();
} }
TeamMemoryBlock* GetMemoryBlock() const
{
return fMemoryBlockReference.Get();
}
private: private:
int fType; int fType;
BReference<Thread> fThreadReference; BReference<Thread> fThreadReference;
BReference<TeamMemoryBlock> fMemoryBlockReference;
}; };
@@ -68,7 +75,8 @@ CliContext::CliContext()
fTerminating(false), fTerminating(false),
fCurrentThread(NULL), fCurrentThread(NULL),
fCurrentStackTrace(NULL), fCurrentStackTrace(NULL),
fCurrentStackFrameIndex(-1) fCurrentStackFrameIndex(-1),
fCurrentBlock(NULL)
{ {
sCurrentContext = this; sCurrentContext = this;
} }
@@ -151,6 +159,11 @@ CliContext::Cleanup()
fNodeManager->ReleaseReference(); fNodeManager->ReleaseReference();
fNodeManager = NULL; fNodeManager = NULL;
} }
if (fCurrentBlock != NULL) {
fCurrentBlock->ReleaseReference();
fCurrentBlock = NULL;
}
} }
@@ -376,6 +389,13 @@ CliContext::ProcessPendingEvents()
SetCurrentStackFrameIndex(0); SetCurrentStackFrameIndex(0);
} }
break; break;
case EVENT_TEAM_MEMORY_BLOCK_RETRIEVED:
if (fCurrentBlock != NULL) {
fCurrentBlock->ReleaseReference();
fCurrentBlock = NULL;
}
fCurrentBlock = event->GetMemoryBlock();
break;
} }
} }
} }
@@ -424,6 +444,16 @@ CliContext::ThreadStackTraceChanged(const Team::ThreadEvent& threadEvent)
} }
void
CliContext::MemoryBlockRetrieved(TeamMemoryBlock* block)
{
_QueueEvent(
new(std::nothrow) Event(EVENT_TEAM_MEMORY_BLOCK_RETRIEVED,
NULL, block));
_SignalInputLoop(EVENT_TEAM_MEMORY_BLOCK_RETRIEVED);
}
void void
CliContext::ValueNodeChanged(ValueNodeChild* nodeChild, ValueNode* oldNode, CliContext::ValueNodeChanged(ValueNodeChild* nodeChild, ValueNode* oldNode,
ValueNode* newNode) ValueNode* newNode)
@@ -13,17 +13,20 @@
#include <Locker.h> #include <Locker.h>
#include "Team.h" #include "Team.h"
#include "TeamMemoryBlock.h"
#include "ValueNodeContainer.h" #include "ValueNodeContainer.h"
class StackFrame; class StackFrame;
class StackTrace; class StackTrace;
class Team; class Team;
class TeamMemoryBlock;
class UserInterfaceListener; class UserInterfaceListener;
class ValueNodeManager; class ValueNodeManager;
class CliContext : private Team::Listener, class CliContext : private Team::Listener,
public TeamMemoryBlock::Listener,
private ValueNodeContainer::Listener { private ValueNodeContainer::Listener {
public: public:
enum { enum {
@@ -33,7 +36,8 @@ public:
EVENT_THREAD_REMOVED = 0x08, EVENT_THREAD_REMOVED = 0x08,
EVENT_THREAD_STOPPED = 0x10, EVENT_THREAD_STOPPED = 0x10,
EVENT_THREAD_STACK_TRACE_CHANGED = 0x20, EVENT_THREAD_STACK_TRACE_CHANGED = 0x20,
EVENT_VALUE_NODE_CHANGED = 0x40 EVENT_VALUE_NODE_CHANGED = 0x40,
EVENT_TEAM_MEMORY_BLOCK_RETRIEVED = 0x80
}; };
public: public:
@@ -67,6 +71,8 @@ public:
{ return fCurrentStackFrameIndex; } { return fCurrentStackFrameIndex; }
void SetCurrentStackFrameIndex(int32 index); void SetCurrentStackFrameIndex(int32 index);
TeamMemoryBlock* CurrentBlock() const { return fCurrentBlock; }
const char* PromptUser(const char* prompt); const char* PromptUser(const char* prompt);
void AddLineToInputHistory(const char* line); void AddLineToInputHistory(const char* line);
@@ -91,6 +97,9 @@ private:
virtual void ThreadStackTraceChanged( virtual void ThreadStackTraceChanged(
const Team::ThreadEvent& event); const Team::ThreadEvent& event);
// TeamMemoryBlock::Listener
virtual void MemoryBlockRetrieved(TeamMemoryBlock* block);
// ValueNodeContainer::Listener // ValueNodeContainer::Listener
virtual void ValueNodeChanged(ValueNodeChild* nodeChild, virtual void ValueNodeChanged(ValueNodeChild* nodeChild,
ValueNode* oldNode, ValueNode* newNode); ValueNode* oldNode, ValueNode* newNode);
@@ -124,6 +133,7 @@ private:
Thread* fCurrentThread; Thread* fCurrentThread;
StackTrace* fCurrentStackTrace; StackTrace* fCurrentStackTrace;
int32 fCurrentStackFrameIndex; int32 fCurrentStackFrameIndex;
TeamMemoryBlock* fCurrentBlock;
EventList fPendingEvents; EventList fPendingEvents;
}; };