blob: 7ed30edd1b2fab5b6a1f1b63bec38e0b17f544e0 [file] [log] [blame]
/*
* Copyright (C) 2012, 2014-2017 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.
*/
#define LOG_TAG "PerformanceTraces"
#include <fcntl.h>
#include <time.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sstream>
#include "PerformanceTraces.h"
namespace cros {
namespace intel {
namespace PerformanceTraces {
int HalAtrace::mTraceLevel = 0;
HalAtrace::HalAtrace(const char* func, const char* tag, const char* note, int value)
{
std::ostringstream stringStream;
if (value < 0 || note == nullptr) {
stringStream << "< " << func << "," << tag << ">";
ia_trace_begin(mTraceLevel, stringStream.str().c_str());
} else {
stringStream << "< " << func << "," << tag << ">:" << note << "(" << value << ")";
ia_trace_begin(mTraceLevel, stringStream.str().c_str());
}
}
HalAtrace::~HalAtrace()
{
ia_trace_end(mTraceLevel);
}
void HalAtrace::reset(void)
{
if (LogHelper::isPerfDumpTypeEnable(CAMERA_DEBUG_LOG_ATRACE_LEVEL))
mTraceLevel = 1;
else
mTraceLevel = 0;
}
/**
* \class PerformanceTimer
*
* Private class for managing R&D traces used for performance
* analysis and testing.
*
* This code should be disabled in product builds.
*/
class PerformanceTimer {
public:
nsecs_t mStartAt;
nsecs_t mLastRead;
bool mFilled; //!< timestamp has been taken
bool mRequested; //!< trace is requested/enabled
PerformanceTimer(void) :
mStartAt(0),
mLastRead(0),
mFilled(false),
mRequested(false) {
}
bool isRunning(void) { return mFilled && mRequested; }
bool isRequested(void) { return mRequested; }
int64_t timeUs(void) {
uint64_t now = systemTime();
mLastRead = now;
return (now - mStartAt) / 1000;
}
int64_t lastTimeUs(void) {
uint64_t now = systemTime();
return (now - mLastRead) / 1000;
}
/**
* Enforce a standard format on timestamp traces parsed
* by offline PnP tools.
*
* \see system/core/include/android/log.h
*/
void formattedTrace(const char* p, const char *f) {
LOGD("%s:%s, Time: %" PRId64 " us, Diff: %" PRId64 " us",
p, f, timeUs(), mFilled ? lastTimeUs() : -1);
}
void start(void) {
mStartAt = mLastRead = systemTime();
mFilled = true;
}
void stop(void) { mFilled = false; }
};
void reset(void) {}
} // namespace PerformanceTraces
} /* namespace intel */
} /* namespace cros */