#ifndef ANDROID_DVR_BENCHMARK_H_ #define ANDROID_DVR_BENCHMARK_H_ #include <stdio.h> #include <time.h> #include <cutils/trace.h> #include <private/dvr/clock_ns.h> // Set benchmark traces, using Android systrace. // // The simplest one-parameter version of btrace automatically sets the // timestamp with the system clock. The other versions can optionally set the // timestamp manually, or pass additional data to be written to the log line. // // Example: // Btrace("Start execution"); // ... code to benchmark ... // Btrace("End execution"); // // Use compute_benchmarks.py // with the trace path "Start execution,End execution", // to report the elapsed time between the two calls. // // Btrace will either output to standard atrace, or to a file if specified. // The versions BtraceData also allow an int64_t to be included in the trace. // Btrace without data payload. static inline void Btrace(const char* name, int64_t nanoseconds_monotonic); static inline void Btrace(const char* name); static inline void Btrace(FILE* file, const char* name, int64_t nanoseconds_monotonic); static inline void Btrace(FILE* file, const char* name); // Btrace with data payload. static inline void BtraceData(const char* name, int64_t nanoseconds_monotonic, int64_t data); static inline void BtraceData(const char* name, int64_t data); static inline void BtraceData(FILE* file, const char* name, int64_t nanoseconds_monotonic, int64_t data); static inline void BtraceData(FILE* file, const char* name, int64_t data); static inline void Btrace(const char* name, int64_t nanoseconds_monotonic) { const int kLogMessageLength = 256; char log_message[kLogMessageLength]; snprintf(log_message, kLogMessageLength, "#btrace#%s", name); atrace_int64(ATRACE_TAG_WEBVIEW, log_message, nanoseconds_monotonic); } static inline void Btrace(const char* name) { Btrace(name, android::dvr::GetSystemClockNs()); } static inline void Btrace(FILE* file, const char* name, int64_t nanoseconds_monotonic) { fprintf(file, "#btrace#%s|%" PRId64 "\n", name, nanoseconds_monotonic); } static inline void Btrace(FILE* file, const char* name) { Btrace(file, name, android::dvr::GetSystemClockNs()); } static inline void BtraceData(const char* name, int64_t nanoseconds_monotonic, int64_t data) { const int kLogMessageLength = 256; char log_message[kLogMessageLength]; snprintf(log_message, kLogMessageLength, "#btrace#%s|%" PRId64, name, data); atrace_int64(ATRACE_TAG_WEBVIEW, log_message, nanoseconds_monotonic); } static inline void BtraceData(const char* name, int64_t data) { BtraceData(name, android::dvr::GetSystemClockNs(), data); } static inline void BtraceData(FILE* file, const char* name, int64_t nanoseconds_monotonic, int64_t data) { fprintf(file, "#btrace#%s|%" PRId64 "|%" PRId64 "\n", name, data, nanoseconds_monotonic); } static inline void BtraceData(FILE* file, const char* name, int64_t data) { BtraceData(file, name, android::dvr::GetSystemClockNs(), data); } #endif // ANDROID_DVR_BENCHMARK_H_