Commit 5eef409e authored by jmadill's avatar jmadill Committed by Commit bot

Add ANGLE platform tracing methods.

This enables event tracing in ANGLE via the new APIs. This can
replace the old methods via SetTraceFunctionPointers.

BUG=436191

Review URL: https://codereview.chromium.org/1064163002

Cr-Commit-Position: refs/heads/master@{#324232}
parent fe460231
......@@ -6,6 +6,7 @@
#include "base/metrics/histogram.h"
#include "base/metrics/sparse_histogram.h"
#include "base/trace_event/trace_event.h"
namespace gfx {
......@@ -15,6 +16,49 @@ ANGLEPlatformImpl::ANGLEPlatformImpl() {
ANGLEPlatformImpl::~ANGLEPlatformImpl() {
}
double ANGLEPlatformImpl::monotonicallyIncreasingTime() {
return base::TimeTicks::Now().ToInternalValue() /
static_cast<double>(base::Time::kMicrosecondsPerSecond);
}
const unsigned char* ANGLEPlatformImpl::getTraceCategoryEnabledFlag(
const char* category_group) {
return TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(category_group);
}
angle::Platform::TraceEventHandle ANGLEPlatformImpl::addTraceEvent(
char phase,
const unsigned char* category_group_enabled,
const char* name,
unsigned long long id,
double timestamp,
int num_args,
const char** arg_names,
const unsigned char* arg_types,
const unsigned long long* arg_values,
unsigned char flags) {
base::TimeTicks timestamp_tt = base::TimeTicks::FromInternalValue(
static_cast<int64>(timestamp * base::Time::kMicrosecondsPerSecond));
base::trace_event::TraceEventHandle handle =
TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP(
phase, category_group_enabled, name, id,
base::PlatformThread::CurrentId(), timestamp_tt, num_args, arg_names,
arg_types, arg_values, nullptr, flags);
angle::Platform::TraceEventHandle result;
memcpy(&result, &handle, sizeof(result));
return result;
}
void ANGLEPlatformImpl::updateTraceEventDuration(
const unsigned char* category_group_enabled,
const char* name,
TraceEventHandle handle) {
base::trace_event::TraceEventHandle trace_event_handle;
memcpy(&trace_event_handle, &handle, sizeof(handle));
TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled, name,
trace_event_handle);
}
void ANGLEPlatformImpl::histogramCustomCounts(const char* name,
int sample,
int min,
......
......@@ -20,6 +20,22 @@ class ANGLEPlatformImpl : public angle::Platform {
~ANGLEPlatformImpl() override;
// angle::Platform:
double monotonicallyIncreasingTime() override;
const unsigned char* getTraceCategoryEnabledFlag(
const char* category_group) override;
TraceEventHandle addTraceEvent(char phase,
const unsigned char* category_group_enabled,
const char* name,
unsigned long long id,
double timestamp,
int num_args,
const char** arg_names,
const unsigned char* arg_types,
const unsigned long long* arg_values,
unsigned char flags) override;
void updateTraceEventDuration(const unsigned char* category_group_enabled,
const char* name,
TraceEventHandle handle) override;
void histogramCustomCounts(const char* name,
int sample,
int min,
......
......@@ -61,45 +61,6 @@ bool LoadD3DXLibrary(const base::FilePath& module_path,
return true;
}
const unsigned char* AngleGetTraceCategoryEnabledFlag(const char* name) {
return TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(name);
}
void AngleAddTraceEvent(char phase,
const unsigned char* category_group_enabled,
const char* name,
unsigned long long id,
int num_args,
const char** arg_names,
const unsigned char* arg_types,
const unsigned long long* arg_values,
unsigned char flags) {
TRACE_EVENT_API_ADD_TRACE_EVENT(phase,
category_group_enabled,
name,
id,
num_args,
arg_names,
arg_types,
arg_values,
NULL,
flags);
}
typedef const unsigned char* (*GetCategoryEnabledFlagFunc)(const char* name);
typedef void (*AddTraceEventFunc)(char phase,
const unsigned char* categoryGroupEnabled,
const char* name,
unsigned long long id,
int numArgs,
const char** argNames,
const unsigned char* argTypes,
const unsigned long long* argValues,
unsigned char flags);
typedef void (__stdcall *SetTraceFunctionPointersFunc)(
GetCategoryEnabledFlagFunc get_category_enabled_flag,
AddTraceEventFunc add_trace_event_func);
// TODO(jmadill): Apply to all platforms eventually
base::LazyInstance<ANGLEPlatformImpl> g_angle_platform_impl =
LAZY_INSTANCE_INITIALIZER;
......@@ -213,16 +174,6 @@ bool InitializeStaticGLBindings(GLImplementation implementation) {
#endif
if (!using_swift_shader) {
// TODO(jmadill): remove when platform impl supports tracing
SetTraceFunctionPointersFunc set_trace_function_pointers =
reinterpret_cast<SetTraceFunctionPointersFunc>(
base::GetFunctionPointerFromNativeLibrary(
gles_library, "SetTraceFunctionPointers"));
if (set_trace_function_pointers) {
set_trace_function_pointers(&AngleGetTraceCategoryEnabledFlag,
&AngleAddTraceEvent);
}
// Init ANGLE platform here, before we call GetPlatformDisplay().
// TODO(jmadill): Apply to all platforms eventually
ANGLEPlatformInitializeFunc angle_platform_init =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment