blob: b824fec1c5907e006b6bb1a62ed347e1c9d8fb2a [file] [log] [blame]
The Android Open Source Project52d4c302009-03-03 19:29:09 -08001//
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 */
22class LogPool {
23public:
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
46private:
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