blob: b824fec1c5907e006b6bb1a62ed347e1c9d8fb2a [file] [log] [blame]
//
// 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