57 lines
1.6 KiB
C++
57 lines
1.6 KiB
C++
//
|
|
// 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
|