Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / skia / ext / event_tracer_impl.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/debug/trace_event.h"
6 #include "skia/ext/event_tracer_impl.h"
7 #include "third_party/skia/include/utils/SkEventTracer.h"
8
9 namespace skia {
10
11 class SkChromiumEventTracer: public SkEventTracer {
12   virtual const uint8_t* getCategoryGroupEnabled(const char* name) OVERRIDE;
13   virtual const char* getCategoryGroupName(
14       const uint8_t* categoryEnabledFlag) OVERRIDE;
15   virtual SkEventTracer::Handle
16     addTraceEvent(char phase,
17                   const uint8_t* categoryEnabledFlag,
18                   const char* name,
19                   uint64_t id,
20                   int32_t numArgs,
21                   const char** argNames,
22                   const uint8_t* argTypes,
23                   const uint64_t* argValues,
24                   uint8_t flags) OVERRIDE;
25   virtual void
26     updateTraceEventDuration(const uint8_t* categoryEnabledFlag,
27                              const char *name,
28                              SkEventTracer::Handle handle) OVERRIDE;
29 };
30
31 const uint8_t*
32   SkChromiumEventTracer::getCategoryGroupEnabled(const char* name) {
33     return TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(name);
34 }
35
36 const char* SkChromiumEventTracer::getCategoryGroupName(
37       const uint8_t* categoryEnabledFlag) {
38   return base::debug::TraceLog::GetCategoryGroupName(
39       categoryEnabledFlag);
40 }
41
42 SkEventTracer::Handle
43     SkChromiumEventTracer::addTraceEvent(char phase,
44                                          const uint8_t* categoryEnabledFlag,
45                                          const char* name,
46                                          uint64_t id,
47                                          int32_t numArgs,
48                                          const char** argNames,
49                                          const uint8_t* argTypes,
50                                          const uint64_t* argValues,
51                                          uint8_t flags) {
52       base::debug::TraceEventHandle handle = TRACE_EVENT_API_ADD_TRACE_EVENT(
53           phase, categoryEnabledFlag, name, id, numArgs, argNames,
54           argTypes, (const long long unsigned int*) argValues, NULL, flags);
55       SkEventTracer::Handle result;
56       memcpy(&result, &handle, sizeof(result));
57       return result;
58 }
59
60 void
61     SkChromiumEventTracer::updateTraceEventDuration(
62         const uint8_t* categoryEnabledFlag,
63         const char *name,
64         SkEventTracer::Handle handle) {
65       base::debug::TraceEventHandle traceEventHandle;
66       memcpy(&traceEventHandle, &handle, sizeof(handle));
67       TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(
68           categoryEnabledFlag, name, traceEventHandle);
69 }
70
71 }  // namespace skia
72
73
74 void InitSkiaEventTracer() {
75   // Initialize the binding to Skia's tracing events. Skia will
76   // take ownership of and clean up the memory allocated here.
77   SkEventTracer::SetInstance(new skia::SkChromiumEventTracer());
78 }