185cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian/* 285cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * Copyright 2013 The Android Open Source Project 385cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * 485cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 585cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * you may not use this file except in compliance with the License. 685cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * You may obtain a copy of the License at 785cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * 885cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 985cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * 1085cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * Unless required by applicable law or agreed to in writing, software 1185cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 1285cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1385cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * See the License for the specific language governing permissions and 1485cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * limitations under the License. 1585cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian */ 1685cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 1785cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian#include <stdint.h> 1885cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian#include <utils/Errors.h> 1985cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian#include <utils/Singleton.h> 2085cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 2185cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian#ifndef ANDROID_SF_EVENTLOG_H 2285cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian#define ANDROID_SF_EVENTLOG_H 2385cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 2485cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian// --------------------------------------------------------------------------- 2585cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopiannamespace android { 2685cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian// --------------------------------------------------------------------------- 2785cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 2885cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopianclass String8; 2985cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 3085cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopianclass EventLog : public Singleton<EventLog> { 3185cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 3285cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopianpublic: 336547ff4327aa320fbc9635668d3fc66db7dd78f6Jamie Gennis static void logFrameDurations(const String8& window, 346547ff4327aa320fbc9635668d3fc66db7dd78f6Jamie Gennis const int32_t* durations, size_t numDurations); 3585cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 3685cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopianprotected: 3785cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian EventLog(); 3885cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 3985cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopianprivate: 4085cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian /* 4185cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * EventLogBuffer is a helper class to construct an in-memory event log 4285cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * tag. In this version the buffer is not dynamic, so write operation can 4385cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * fail if there is not enough space in the temporary buffer. 4485cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * Once constructed, the buffer can be logger by calling the log() 4585cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian * method. 4685cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian */ 4785cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 4885cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian class TagBuffer { 4985cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian enum { STORAGE_MAX_SIZE = 128 }; 5085cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian int32_t mPos; 5185cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian int32_t mTag; 5285cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian bool mOverflow; 5385cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian char mStorage[STORAGE_MAX_SIZE]; 5485cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian public: 5585cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian TagBuffer(int32_t tag); 5685cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 5785cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian // starts list of items 5885cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian void startList(int8_t count); 5985cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian // terminates the list 6085cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian void endList(); 6185cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian // write a 32-bit integer 6285cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian void writeInt32(int32_t value); 6385cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian // write a 64-bit integer 6485cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian void writeInt64(int64_t value); 6585cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian // write a C string 6685cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian void writeString8(const String8& value); 6785cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 6885cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian // outputs the the buffer to the log 6985cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian void log(); 7085cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian }; 7185cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 7285cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian friend class Singleton<EventLog>; 7385cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian EventLog(const EventLog&); 7485cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian EventLog& operator =(const EventLog&); 7585cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 766547ff4327aa320fbc9635668d3fc66db7dd78f6Jamie Gennis enum { LOGTAG_SF_FRAME_DUR = 60100 }; 776547ff4327aa320fbc9635668d3fc66db7dd78f6Jamie Gennis void doLogFrameDurations(const String8& window, const int32_t* durations, 786547ff4327aa320fbc9635668d3fc66db7dd78f6Jamie Gennis size_t numDurations); 7985cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian}; 8085cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 8185cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian// --------------------------------------------------------------------------- 8285cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian}// namespace android 8385cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian// --------------------------------------------------------------------------- 8485cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian 8585cce376cbeecb185ba485c69643bfabe72fe794Mathias Agopian#endif /* ANDROID_SF_EVENTLOG_H */ 86