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