LogStatistics.h revision 97c1c2beee2cbd8c67c1cd507367e5b084d853c8
134facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn/* 234facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * Copyright (C) 2014 The Android Open Source Project 334facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * 434facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * Licensed under the Apache License, Version 2.0 (the "License"); 534facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * you may not use this file except in compliance with the License. 634facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * You may obtain a copy of the License at 734facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * 834facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * http://www.apache.org/licenses/LICENSE-2.0 934facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * 1034facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * Unless required by applicable law or agreed to in writing, software 1134facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * distributed under the License is distributed on an "AS IS" BASIS, 1234facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1334facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * See the License for the specific language governing permissions and 1434facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn * limitations under the License. 1534facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn */ 1634facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 1734facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn#ifndef _LOGD_LOG_STATISTICS_H__ 1834facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn#define _LOGD_LOG_STATISTICS_H__ 1934facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 2034facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn#include <sys/types.h> 2134facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 2234facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn#include <log/log.h> 2397c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn#include <utils/BasicHashtable.h> 2497c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn 2597c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn#include "LogBufferElement.h" 2634facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 2734facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn#define log_id_for_each(i) \ 2834facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn for (log_id_t i = LOG_ID_MIN; i < LOG_ID_MAX; i = (log_id_t) (i + 1)) 2934facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 3097c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzynstruct UidEntry { 3134facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn const uid_t uid; 3297c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn size_t size; 3334facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 3497c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn UidEntry(uid_t uid):uid(uid),size(0) { } 3534facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 3697c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn inline const uid_t&getKey() const { return uid; } 3797c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn size_t getSizes() const { return size; } 3897c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn inline void add(size_t s) { size += s; } 3997c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn inline bool subtract(size_t s) { size -= s; return !size; } 4034facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn}; 4134facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 4234facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn// Log Statistics 4334facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzynclass LogStatistics { 4434facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn size_t mSizes[LOG_ID_MAX]; 4534facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn size_t mElements[LOG_ID_MAX]; 4697c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn size_t mSizesTotal[LOG_ID_MAX]; 4797c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn size_t mElementsTotal[LOG_ID_MAX]; 4834facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 4997c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn // uid to size list 5097c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn typedef android::BasicHashtable<uid_t, UidEntry> uidTable_t; 5197c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn uidTable_t uidTable[LOG_ID_MAX]; 52e457b74ce6ee6d799812dc2ec5e4b8b18bcd3e91Mark Salyzyn 5334facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzynpublic: 5434facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn LogStatistics(); 5534facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 5697c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn void enableStatistics() { } 5734facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 5897c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn void add(LogBufferElement *entry); 5997c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn void subtract(LogBufferElement *entry); 60e457b74ce6ee6d799812dc2ec5e4b8b18bcd3e91Mark Salyzyn 6197c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn // Caller must delete array 6297c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn const UidEntry **sort(size_t n, log_id i); 6334facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 6434facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn // fast track current value by id only 6534facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn size_t sizes(log_id_t id) const { return mSizes[id]; } 6634facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn size_t elements(log_id_t id) const { return mElements[id]; } 6797c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn size_t sizesTotal(log_id_t id) const { return mSizesTotal[id]; } 6897c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn size_t elementsTotal(log_id_t id) const { return mElementsTotal[id]; } 6934facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 7034facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn // *strp = malloc, balance with free 7197c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn void format(char **strp, uid_t uid, unsigned int logMask); 729a03863e88da99ba010342c874252089dd771f7fMark Salyzyn 739a03863e88da99ba010342c874252089dd771f7fMark Salyzyn // helper 7497c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn char *pidToName(pid_t pid); 754ba0387af5acc52e43e4004ccb4c46b8bc700349Mark Salyzyn uid_t pidToUid(pid_t pid); 7697c1c2beee2cbd8c67c1cd507367e5b084d853c8Mark Salyzyn char *uidToName(uid_t uid); 7734facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn}; 7834facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn 7934facab86b0fe7ec613de92b46b637f864fb0682Mark Salyzyn#endif // _LOGD_LOG_STATISTICS_H__ 80