blob: f2e32b21a5dd9192630ff69ac539ca7c61972424 [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_TIMER_PROBE_H
#define ANDROID_TIMER_PROBE_H
#if 0 && defined(HAVE_POSIX_CLOCKS)
#define ENABLE_TIMER_PROBE 1
#else
#define ENABLE_TIMER_PROBE 0
#endif
#if ENABLE_TIMER_PROBE
#include <time.h>
#include <sys/time.h>
#include <utils/Vector.h>
#define TIMER_PROBE(tag) \
static int _timer_slot_; \
android::TimerProbe probe(tag, &_timer_slot_)
#define TIMER_PROBE_END() probe.end()
#else
#define TIMER_PROBE(tag)
#define TIMER_PROBE_END()
#endif
#if ENABLE_TIMER_PROBE
namespace android {
class TimerProbe {
public:
TimerProbe(const char tag[], int* slot);
void end();
~TimerProbe();
private:
struct Bucket {
int mStart, mReal, mProcess, mThread, mCount;
const char* mTag;
int* mSlotPtr;
int mIndent;
};
static Vector<Bucket> gBuckets;
static TimerProbe* gExecuteChain;
static int gIndent;
static timespec gRealBase;
TimerProbe* mNext;
static uint32_t ElapsedTime(const timespec& start, const timespec& end);
void print(const timespec& r, const timespec& p, const timespec& t) const;
timespec mRealStart, mPStart, mTStart;
const char* mTag;
int mIndent;
int mBucket;
};
}; // namespace android
#endif
#endif