1 #ifndef ANDROID_DVR_BENCHMARK_H_ 2 #define ANDROID_DVR_BENCHMARK_H_ 3 4 #include <stdio.h> 5 #include <time.h> 6 7 #include <cutils/trace.h> 8 9 #include <private/dvr/clock_ns.h> 10 11 // Set benchmark traces, using Android systrace. 12 // 13 // The simplest one-parameter version of btrace automatically sets the 14 // timestamp with the system clock. The other versions can optionally set the 15 // timestamp manually, or pass additional data to be written to the log line. 16 // 17 // Example: 18 // Btrace("Start execution"); 19 // ... code to benchmark ... 20 // Btrace("End execution"); 21 // 22 // Use compute_benchmarks.py 23 // with the trace path "Start execution,End execution", 24 // to report the elapsed time between the two calls. 25 // 26 // Btrace will either output to standard atrace, or to a file if specified. 27 // The versions BtraceData also allow an int64_t to be included in the trace. 28 29 // Btrace without data payload. 30 static inline void Btrace(const char* name, int64_t nanoseconds_monotonic); 31 static inline void Btrace(const char* name); 32 static inline void Btrace(FILE* file, const char* name, 33 int64_t nanoseconds_monotonic); 34 static inline void Btrace(FILE* file, const char* name); 35 36 // Btrace with data payload. 37 static inline void BtraceData(const char* name, int64_t nanoseconds_monotonic, 38 int64_t data); 39 static inline void BtraceData(const char* name, int64_t data); 40 static inline void BtraceData(FILE* file, const char* name, 41 int64_t nanoseconds_monotonic, int64_t data); 42 static inline void BtraceData(FILE* file, const char* name, int64_t data); 43 44 static inline void Btrace(const char* name, int64_t nanoseconds_monotonic) { 45 const int kLogMessageLength = 256; 46 char log_message[kLogMessageLength]; 47 snprintf(log_message, kLogMessageLength, "#btrace#%s", name); 48 atrace_int64(ATRACE_TAG_WEBVIEW, log_message, nanoseconds_monotonic); 49 } 50 51 static inline void Btrace(const char* name) { 52 Btrace(name, android::dvr::GetSystemClockNs()); 53 } 54 55 static inline void Btrace(FILE* file, const char* name, 56 int64_t nanoseconds_monotonic) { 57 fprintf(file, "#btrace#%s|%" PRId64 "\n", name, nanoseconds_monotonic); 58 } 59 60 static inline void Btrace(FILE* file, const char* name) { 61 Btrace(file, name, android::dvr::GetSystemClockNs()); 62 } 63 64 static inline void BtraceData(const char* name, int64_t nanoseconds_monotonic, 65 int64_t data) { 66 const int kLogMessageLength = 256; 67 char log_message[kLogMessageLength]; 68 snprintf(log_message, kLogMessageLength, "#btrace#%s|%" PRId64, name, data); 69 atrace_int64(ATRACE_TAG_WEBVIEW, log_message, nanoseconds_monotonic); 70 } 71 72 static inline void BtraceData(const char* name, int64_t data) { 73 BtraceData(name, android::dvr::GetSystemClockNs(), data); 74 } 75 76 static inline void BtraceData(FILE* file, const char* name, 77 int64_t nanoseconds_monotonic, int64_t data) { 78 fprintf(file, "#btrace#%s|%" PRId64 "|%" PRId64 "\n", name, data, 79 nanoseconds_monotonic); 80 } 81 82 static inline void BtraceData(FILE* file, const char* name, int64_t data) { 83 BtraceData(file, name, android::dvr::GetSystemClockNs(), data); 84 } 85 86 #endif // ANDROID_DVR_BENCHMARK_H_ 87