• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
LogPool(void)24     LogPool(void)
25         : mpHead(NULL), mpTail(NULL), mpBookmark(NULL),
26           mCurrentSize(0), mMaxSize(10240)
27         {}
~LogPool(void)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 */
GetMaxSize(void)39     long GetMaxSize(void) const { return mMaxSize; }
40 
GetHead(void)41     LogMessage* GetHead(void) const { return mpHead; }
42 
SetBookmark(void)43     void SetBookmark(void) { mpBookmark = mpHead; }
GetBookmark(void)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
57