| // |
| // Copyright 2005 The Android Open Source Project |
| // |
| // Pool of log messages. Not thread safe -- operations on the log pool |
| // should only happen in the main UI thread. |
| // |
| #ifndef _SIM_LOG_POOL_H |
| #define _SIM_LOG_POOL_H |
| |
| #include "LogMessage.h" |
| |
| /* |
| * This contains the pool of log messages. The messages themselves are |
| * allocated individually and reference counted. We add new messages to |
| * the head and, when the total "footprint" exceeds our stated max, we |
| * delete one or more from the tail. |
| * |
| * To support pause/resume, we allow a "bookmark" to be set. This is |
| * just a pointer to a message in the pool. If the bookmarked message |
| * is deleted, we discard the bookmark. |
| */ |
| class LogPool { |
| public: |
| LogPool(void) |
| : mpHead(NULL), mpTail(NULL), mpBookmark(NULL), |
| mCurrentSize(0), mMaxSize(10240) |
| {} |
| ~LogPool(void) { Clear(); } |
| |
| void Clear(void); |
| |
| /* add a new message to the pool */ |
| void Add(LogMessage* pLogMessage); |
| |
| /* resize the pool, removing excess messages */ |
| void Resize(long maxSize); |
| |
| /* return the current limit, in bytes */ |
| long GetMaxSize(void) const { return mMaxSize; } |
| |
| LogMessage* GetHead(void) const { return mpHead; } |
| |
| void SetBookmark(void) { mpBookmark = mpHead; } |
| LogMessage* GetBookmark(void) const { return mpBookmark; } |
| |
| private: |
| void RemoveOldest(void); |
| |
| LogMessage* mpHead; |
| LogMessage* mpTail; |
| LogMessage* mpBookmark; |
| long mCurrentSize; // current size, in bytes |
| long mMaxSize; // maximum size, in bytes |
| }; |
| |
| #endif // _SIM_LOG_POOL_H |