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 "SkTraceEvent.h"
|
||||||
|
|
||||||
|
#include "SkTraceEventCommon.h"
|
||||||
|
|
||||||
#ifdef SK_BUILD_FOR_ANDROID
|
#ifdef SK_BUILD_FOR_ANDROID
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#endif
|
#endif
|
||||||
@ -70,3 +72,12 @@ const uint8_t* SkATrace::getCategoryGroupEnabled(const char* name) {
|
|||||||
return &yes;
|
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
|
#define SkTraceEventCommon_DEFINED
|
||||||
|
|
||||||
#include "SkTraceEventPhase.h"
|
#include "SkTraceEventPhase.h"
|
||||||
|
#include "SkTypes.h"
|
||||||
|
|
||||||
// Trace events are for tracking application performance and resource usage.
|
// Trace events are for tracking application performance and resource usage.
|
||||||
// Macros are provided to track:
|
// Macros are provided to track:
|
||||||
@ -61,13 +62,15 @@
|
|||||||
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
|
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
|
||||||
|
|
||||||
#include <cutils/trace.h>
|
#include <cutils/trace.h>
|
||||||
struct SkAndroidFrameworkTraceUtil {
|
class SkAndroidFrameworkTraceUtil {
|
||||||
|
public:
|
||||||
SkAndroidFrameworkTraceUtil(const char* name) {
|
SkAndroidFrameworkTraceUtil(const char* name) {
|
||||||
ATRACE_BEGIN(name);
|
if (CC_UNLIKELY(gEnableAndroidTracing)) {
|
||||||
|
ATRACE_BEGIN(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
SkAndroidFrameworkTraceUtil(bool, const char* fmt, ...) {
|
SkAndroidFrameworkTraceUtil(bool, const char* fmt, ...) {
|
||||||
if (CC_LIKELY(!ATRACE_ENABLED())) return;
|
if (CC_LIKELY((!gEnableAndroidTracing) || (!ATRACE_ENABLED()))) return;
|
||||||
|
|
||||||
const int BUFFER_SIZE = 256;
|
const int BUFFER_SIZE = 256;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@ -79,19 +82,26 @@ struct SkAndroidFrameworkTraceUtil {
|
|||||||
|
|
||||||
ATRACE_BEGIN(buf);
|
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__)
|
#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
|
// 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.
|
// associated arguments. In the framework, the arguments are ignored.
|
||||||
#define TRACE_EVENT0(category_group, name) \
|
#define TRACE_EVENT0(category_group, name) \
|
||||||
@ -115,32 +125,22 @@ struct SkAndroidFrameworkTraceUtil {
|
|||||||
|
|
||||||
// Records the value of a counter called "name" immediately. Value
|
// Records the value of a counter called "name" immediately. Value
|
||||||
// must be representable as a 32 bit integer.
|
// 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.
|
// Records the values of a multi-parted counter called "name" immediately.
|
||||||
// In Chrome, this macro produces a stacked bar chart. ATrace doesn't support
|
// In Chrome, this macro produces a stacked bar chart. ATrace doesn't support
|
||||||
// that, so this just produces two separate counters.
|
// that, so this just produces two separate counters.
|
||||||
#define TRACE_COUNTER2(category_group, name, value1_name, value1_val, value2_name, value2_val) \
|
#define TRACE_COUNTER2(category_group, name, value1_name, value1_val, value2_name, value2_val) \
|
||||||
do { \
|
do { \
|
||||||
ATRACE_INT(name "-" value1_name, value1_val); \
|
if (CC_UNLIKELY(SkAndroidFrameworkTraceUtil::getEnableTracing())) { \
|
||||||
ATRACE_INT(name "-" value2_name, value2_val); \
|
ATRACE_INT(name "-" value1_name, value1_val); \
|
||||||
|
ATRACE_INT(name "-" value2_name, value2_val); \
|
||||||
|
} \
|
||||||
} while (0)
|
} 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
|
// ATrace has no object tracking
|
||||||
#define TRACE_EVENT_OBJECT_CREATED_WITH_ID(category_group, name, id) TRACE_EMPTY
|
#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
|
#define TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(category_group, name, id, snapshot) TRACE_EMPTY
|
||||||
|
Loading…
Reference in New Issue
Block a user