Add support for memory block events to CliContext.
This commit is contained in:
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user