Add a runtime flag to enable ATRACE
Implement a runtime flag for android framework to enable systrace logging. To enable logging call SkATrace::setEnableTracing(true), instead of changing compile time flag SK_TRACE_EVENTS_IN_FRAMEWORK. Bug: skia: Change-Id: Ib4f607e001577a84e944042d799a98af8eb51626 Reviewed-on: https://skia-review.googlesource.com/138594 Commit-Queue: Stan Iliev <stani@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
This commit is contained in:
parent
d2f8eafbb8
commit
b7b9d02ac0
@ -9,6 +9,8 @@
|
||||
|
||||
#include "SkTraceEvent.h"
|
||||
|
||||
#include "SkTraceEventCommon.h"
|
||||
|
||||
#ifdef SK_BUILD_FOR_ANDROID
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
@ -70,3 +72,12 @@ const uint8_t* SkATrace::getCategoryGroupEnabled(const char* name) {
|
||||
return &yes;
|
||||
}
|
||||
|
||||
|
||||
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
|
||||
|
||||
bool SkAndroidFrameworkTraceUtil::gEnableAndroidTracing = false;
|
||||
|
||||
#endif //SK_BUILD_FOR_ANDROID_FRAMEWORK
|
||||
|
||||
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
#define SkTraceEventCommon_DEFINED
|
||||
|
||||
#include "SkTraceEventPhase.h"
|
||||
#include "SkTypes.h"
|
||||
|
||||
// Trace events are for tracking application performance and resource usage.
|
||||
// Macros are provided to track:
|
||||
@ -61,13 +62,15 @@
|
||||
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
|
||||
|
||||
#include <cutils/trace.h>
|
||||
struct SkAndroidFrameworkTraceUtil {
|
||||
|
||||
class SkAndroidFrameworkTraceUtil {
|
||||
public:
|
||||
SkAndroidFrameworkTraceUtil(const char* name) {
|
||||
ATRACE_BEGIN(name);
|
||||
if (CC_UNLIKELY(gEnableAndroidTracing)) {
|
||||
ATRACE_BEGIN(name);
|
||||
}
|
||||
}
|
||||
SkAndroidFrameworkTraceUtil(bool, const char* fmt, ...) {
|
||||
if (CC_LIKELY(!ATRACE_ENABLED())) return;
|
||||
if (CC_LIKELY((!gEnableAndroidTracing) || (!ATRACE_ENABLED()))) return;
|
||||
|
||||
const int BUFFER_SIZE = 256;
|
||||
va_list ap;
|
||||
@ -79,19 +82,26 @@ struct SkAndroidFrameworkTraceUtil {
|
||||
|
||||
ATRACE_BEGIN(buf);
|
||||
}
|
||||
~SkAndroidFrameworkTraceUtil() { ATRACE_END(); }
|
||||
~SkAndroidFrameworkTraceUtil() {
|
||||
if (CC_UNLIKELY(gEnableAndroidTracing)) {
|
||||
ATRACE_END();
|
||||
}
|
||||
}
|
||||
|
||||
static void setEnableTracing(bool enableAndroidTracing) {
|
||||
gEnableAndroidTracing = enableAndroidTracing;
|
||||
}
|
||||
|
||||
static bool getEnableTracing() {
|
||||
return gEnableAndroidTracing;
|
||||
}
|
||||
|
||||
private:
|
||||
static bool gEnableAndroidTracing;
|
||||
};
|
||||
|
||||
#define ATRACE_ANDROID_FRAMEWORK(fmt, ...) SkAndroidFrameworkTraceUtil __trace(true, fmt, ##__VA_ARGS__)
|
||||
|
||||
// If profiling Skia within the Android framework, setting this to 1 will route all Skia
|
||||
// tracing events to ATrace.
|
||||
#ifndef SK_TRACE_EVENTS_IN_FRAMEWORK
|
||||
#define SK_TRACE_EVENTS_IN_FRAMEWORK 0
|
||||
#endif
|
||||
|
||||
#if SK_TRACE_EVENTS_IN_FRAMEWORK
|
||||
|
||||
// Records a pair of begin and end events called "name" for the current scope, with 0, 1 or 2
|
||||
// associated arguments. In the framework, the arguments are ignored.
|
||||
#define TRACE_EVENT0(category_group, name) \
|
||||
@ -115,32 +125,22 @@ struct SkAndroidFrameworkTraceUtil {
|
||||
|
||||
// Records the value of a counter called "name" immediately. Value
|
||||
// must be representable as a 32 bit integer.
|
||||
#define TRACE_COUNTER1(category_group, name, value) ATRACE_INT(name, value)
|
||||
#define TRACE_COUNTER1(category_group, name, value) \
|
||||
if (CC_UNLIKELY(SkAndroidFrameworkTraceUtil::getEnableTracing())) { \
|
||||
ATRACE_INT(name, value); \
|
||||
}
|
||||
|
||||
// Records the values of a multi-parted counter called "name" immediately.
|
||||
// In Chrome, this macro produces a stacked bar chart. ATrace doesn't support
|
||||
// that, so this just produces two separate counters.
|
||||
#define TRACE_COUNTER2(category_group, name, value1_name, value1_val, value2_name, value2_val) \
|
||||
do { \
|
||||
ATRACE_INT(name "-" value1_name, value1_val); \
|
||||
ATRACE_INT(name "-" value2_name, value2_val); \
|
||||
if (CC_UNLIKELY(SkAndroidFrameworkTraceUtil::getEnableTracing())) { \
|
||||
ATRACE_INT(name "-" value1_name, value1_val); \
|
||||
ATRACE_INT(name "-" value2_name, value2_val); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
|
||||
#define TRACE_EVENT0(category_group, name) TRACE_EMPTY
|
||||
#define TRACE_EVENT1(category_group, name, arg1_name, arg1_val) TRACE_EMPTY
|
||||
#define TRACE_EVENT2(category_group, name, arg1_name, arg1_val, arg2_name, arg2_val) TRACE_EMPTY
|
||||
|
||||
#define TRACE_EVENT_INSTANT0(category_group, name, scope) TRACE_EMPTY
|
||||
#define TRACE_EVENT_INSTANT1(category_group, name, scope, arg1_name, arg1_val) TRACE_EMPTY
|
||||
#define TRACE_EVENT_INSTANT2(category_group, name, scope, arg1_name, arg1_val, arg2_name, arg2_val) TRACE_EMPTY
|
||||
|
||||
#define TRACE_COUNTER1(category_group, name, value) TRACE_EMPTY
|
||||
#define TRACE_COUNTER2(category_group, name, value1_name, value1_val, value2_name, value2_val) TRACE_EMPTY
|
||||
|
||||
#endif
|
||||
|
||||
// ATrace has no object tracking
|
||||
#define TRACE_EVENT_OBJECT_CREATED_WITH_ID(category_group, name, id) TRACE_EMPTY
|
||||
#define TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(category_group, name, id, snapshot) TRACE_EMPTY
|
||||
|
Loading…
Reference in New Issue
Block a user