The Android Open Source Project | 52d4c30 | 2009-03-03 19:29:09 -0800 | [diff] [blame] | 1 | // |
| 2 | // Copyright 2005 The Android Open Source Project |
| 3 | // |
| 4 | // Pool of log messages. Not thread safe -- operations on the log pool |
| 5 | // should only happen in the main UI thread. |
| 6 | // |
| 7 | #ifndef _SIM_LOG_POOL_H |
| 8 | #define _SIM_LOG_POOL_H |
| 9 | |
| 10 | #include "LogMessage.h" |
| 11 | |
| 12 | /* |
| 13 | * This contains the pool of log messages. The messages themselves are |
| 14 | * allocated individually and reference counted. We add new messages to |
| 15 | * the head and, when the total "footprint" exceeds our stated max, we |
| 16 | * delete one or more from the tail. |
| 17 | * |
| 18 | * To support pause/resume, we allow a "bookmark" to be set. This is |
| 19 | * just a pointer to a message in the pool. If the bookmarked message |
| 20 | * is deleted, we discard the bookmark. |
| 21 | */ |
| 22 | class LogPool { |
| 23 | public: |
| 24 | LogPool(void) |
| 25 | : mpHead(NULL), mpTail(NULL), mpBookmark(NULL), |
| 26 | mCurrentSize(0), mMaxSize(10240) |
| 27 | {} |
| 28 | ~LogPool(void) { Clear(); } |
| 29 | |
| 30 | void Clear(void); |
| 31 | |
| 32 | /* add a new message to the pool */ |
| 33 | void Add(LogMessage* pLogMessage); |
| 34 | |
| 35 | /* resize the pool, removing excess messages */ |
| 36 | void Resize(long maxSize); |
| 37 | |
| 38 | /* return the current limit, in bytes */ |
| 39 | long GetMaxSize(void) const { return mMaxSize; } |
| 40 | |
| 41 | LogMessage* GetHead(void) const { return mpHead; } |
| 42 | |
| 43 | void SetBookmark(void) { mpBookmark = mpHead; } |
| 44 | LogMessage* GetBookmark(void) const { return mpBookmark; } |
| 45 | |
| 46 | private: |
| 47 | void RemoveOldest(void); |
| 48 | |
| 49 | LogMessage* mpHead; |
| 50 | LogMessage* mpTail; |
| 51 | LogMessage* mpBookmark; |
| 52 | long mCurrentSize; // current size, in bytes |
| 53 | long mMaxSize; // maximum size, in bytes |
| 54 | }; |
| 55 | |
| 56 | #endif // _SIM_LOG_POOL_H |