LogBuffer.h revision 94a89c42fe9521f5ac2d382a172c082ca421d6c3
1/* 2 * Copyright (C) 2012-2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef _LOGD_LOG_BUFFER_H__ 18#define _LOGD_LOG_BUFFER_H__ 19 20#include <sys/types.h> 21 22#include <list> 23 24#include <log/log.h> 25#include <sysutils/SocketClient.h> 26 27#include <private/android_filesystem_config.h> 28 29#include "LogBufferElement.h" 30#include "LogTimes.h" 31#include "LogStatistics.h" 32#include "LogWhiteBlackList.h" 33 34typedef std::list<LogBufferElement *> LogBufferElementCollection; 35 36class LogBuffer { 37 LogBufferElementCollection mLogElements; 38 pthread_mutex_t mLogElementsLock; 39 40 LogStatistics stats; 41 42 PruneList mPrune; 43 44 unsigned long mMaxSize[LOG_ID_MAX]; 45 46public: 47 LastLogTimes &mTimes; 48 49 LogBuffer(LastLogTimes *times); 50 void init(); 51 52 int log(log_id_t log_id, log_time realtime, 53 uid_t uid, pid_t pid, pid_t tid, 54 const char *msg, unsigned short len); 55 uint64_t flushTo(SocketClient *writer, const uint64_t start, 56 bool privileged, 57 int (*filter)(const LogBufferElement *element, void *arg) = NULL, 58 void *arg = NULL); 59 60 void clear(log_id_t id, uid_t uid = AID_ROOT); 61 unsigned long getSize(log_id_t id); 62 int setSize(log_id_t id, unsigned long size); 63 unsigned long getSizeUsed(log_id_t id); 64 // *strp uses malloc, use free to release. 65 void formatStatistics(char **strp, uid_t uid, unsigned int logMask); 66 67 void enableStatistics() { 68 stats.enableStatistics(); 69 } 70 71 int initPrune(char *cp) { return mPrune.init(cp); } 72 // *strp uses malloc, use free to release. 73 void formatPrune(char **strp) { mPrune.format(strp); } 74 75 // helper must be protected directly or implicitly by lock()/unlock() 76 char *pidToName(pid_t pid) { return stats.pidToName(pid); } 77 uid_t pidToUid(pid_t pid) { return stats.pidToUid(pid); } 78 char *uidToName(uid_t uid) { return stats.uidToName(uid); } 79 void lock() { pthread_mutex_lock(&mLogElementsLock); } 80 void unlock() { pthread_mutex_unlock(&mLogElementsLock); } 81 82private: 83 void maybePrune(log_id_t id); 84 void prune(log_id_t id, unsigned long pruneRows, uid_t uid = AID_ROOT); 85 LogBufferElementCollection::iterator erase(LogBufferElementCollection::iterator it); 86}; 87 88#endif // _LOGD_LOG_BUFFER_H__ 89