Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* This Source Code Form is subject to the terms of the Mozilla Public
3 : * License, v. 2.0. If a copy of the MPL was not distributed with this
4 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 :
6 : #include "GeckoProfiler.h"
7 : #include "ProfilerBacktrace.h"
8 : #include "ProfilerMarkerPayload.h"
9 : #include "gfxASurface.h"
10 : #include "Layers.h"
11 : #include "mozilla/Sprintf.h"
12 :
13 : using namespace mozilla;
14 :
15 : void
16 0 : ProfilerMarkerPayload::StreamCommonProps(const char* aMarkerType,
17 : SpliceableJSONWriter& aWriter,
18 : const TimeStamp& aProcessStartTime,
19 : UniqueStacks& aUniqueStacks)
20 : {
21 0 : MOZ_ASSERT(aMarkerType);
22 0 : aWriter.StringProperty("type", aMarkerType);
23 0 : if (!mStartTime.IsNull()) {
24 0 : aWriter.DoubleProperty("startTime",
25 0 : (mStartTime - aProcessStartTime).ToMilliseconds());
26 : }
27 0 : if (!mEndTime.IsNull()) {
28 0 : aWriter.DoubleProperty("endTime",
29 0 : (mEndTime - aProcessStartTime).ToMilliseconds());
30 : }
31 0 : if (mStack) {
32 0 : aWriter.StartObjectProperty("stack");
33 : {
34 0 : mStack->StreamJSON(aWriter, aProcessStartTime, aUniqueStacks);
35 : }
36 0 : aWriter.EndObject();
37 : }
38 0 : }
39 :
40 : void
41 0 : TracingMarkerPayload::StreamPayload(SpliceableJSONWriter& aWriter,
42 : const TimeStamp& aProcessStartTime,
43 : UniqueStacks& aUniqueStacks)
44 : {
45 0 : StreamCommonProps("tracing", aWriter, aProcessStartTime, aUniqueStacks);
46 :
47 0 : if (mCategory) {
48 0 : aWriter.StringProperty("category", mCategory);
49 : }
50 :
51 0 : if (mKind == TRACING_INTERVAL_START) {
52 0 : aWriter.StringProperty("interval", "start");
53 0 : } else if (mKind == TRACING_INTERVAL_END) {
54 0 : aWriter.StringProperty("interval", "end");
55 : }
56 0 : }
57 :
58 : void
59 0 : GPUMarkerPayload::StreamPayload(SpliceableJSONWriter& aWriter,
60 : const TimeStamp& aProcessStartTime,
61 : UniqueStacks& aUniqueStacks)
62 : {
63 0 : StreamCommonProps("gpu_timer_query", aWriter, aProcessStartTime,
64 0 : aUniqueStacks);
65 :
66 0 : aWriter.DoubleProperty("cpustart",
67 0 : (mCpuTimeStart - aProcessStartTime).ToMilliseconds());
68 0 : aWriter.DoubleProperty("cpuend",
69 0 : (mCpuTimeEnd - aProcessStartTime).ToMilliseconds());
70 0 : aWriter.IntProperty("gpustart", (int)mGpuTimeStart);
71 0 : aWriter.IntProperty("gpuend", (int)mGpuTimeEnd);
72 0 : }
73 :
74 : void
75 0 : IOMarkerPayload::StreamPayload(SpliceableJSONWriter& aWriter,
76 : const TimeStamp& aProcessStartTime,
77 : UniqueStacks& aUniqueStacks)
78 : {
79 0 : StreamCommonProps("io", aWriter, aProcessStartTime, aUniqueStacks);
80 0 : aWriter.StringProperty("source", mSource);
81 0 : if (mFilename) {
82 0 : aWriter.StringProperty("filename", mFilename.get());
83 : }
84 0 : }
85 :
86 : void
87 0 : UserTimingMarkerPayload::StreamPayload(SpliceableJSONWriter& aWriter,
88 : const TimeStamp& aProcessStartTime,
89 : UniqueStacks& aUniqueStacks)
90 : {
91 0 : StreamCommonProps("UserTiming", aWriter, aProcessStartTime, aUniqueStacks);
92 0 : aWriter.StringProperty("name", NS_ConvertUTF16toUTF8(mName).get());
93 0 : aWriter.StringProperty("entryType", mEntryType);
94 0 : }
95 :
96 : void
97 0 : DOMEventMarkerPayload::StreamPayload(SpliceableJSONWriter& aWriter,
98 : const TimeStamp& aProcessStartTime,
99 : UniqueStacks& aUniqueStacks)
100 : {
101 0 : StreamCommonProps("DOMEvent", aWriter, aProcessStartTime, aUniqueStacks);
102 0 : aWriter.StringProperty("type", NS_ConvertUTF16toUTF8(mType).get());
103 0 : aWriter.IntProperty("phase", mPhase);
104 0 : }
105 :
106 : void
107 0 : LayerTranslationMarkerPayload::StreamPayload(SpliceableJSONWriter& aWriter,
108 : const TimeStamp& aProcessStartTime,
109 : UniqueStacks& aUniqueStacks)
110 : {
111 0 : const size_t bufferSize = 32;
112 : char buffer[bufferSize];
113 0 : SprintfLiteral(buffer, "%p", mLayer);
114 :
115 0 : aWriter.StringProperty("layer", buffer);
116 0 : aWriter.IntProperty("x", mPoint.x);
117 0 : aWriter.IntProperty("y", mPoint.y);
118 0 : aWriter.StringProperty("category", "LayerTranslation");
119 0 : }
120 :
121 : void
122 0 : VsyncMarkerPayload::StreamPayload(SpliceableJSONWriter& aWriter,
123 : const TimeStamp& aProcessStartTime,
124 : UniqueStacks& aUniqueStacks)
125 : {
126 0 : aWriter.DoubleProperty("vsync",
127 0 : (mVsyncTimestamp - aProcessStartTime).ToMilliseconds());
128 0 : aWriter.StringProperty("category", "VsyncTimestamp");
129 0 : }
130 :
131 : void
132 0 : GCSliceMarkerPayload::StreamPayload(SpliceableJSONWriter& aWriter,
133 : const TimeStamp& aProcessStartTime,
134 : UniqueStacks& aUniqueStacks)
135 : {
136 0 : MOZ_ASSERT(mTimingJSON);
137 0 : StreamCommonProps("GCSlice", aWriter, aProcessStartTime, aUniqueStacks);
138 0 : if (mTimingJSON) {
139 0 : aWriter.SplicedJSONProperty("timings", mTimingJSON.get());
140 : } else {
141 0 : aWriter.NullProperty("timings");
142 : }
143 0 : }
144 :
145 : void
146 0 : GCMajorMarkerPayload::StreamPayload(SpliceableJSONWriter& aWriter,
147 : const TimeStamp& aProcessStartTime,
148 : UniqueStacks& aUniqueStacks)
149 : {
150 0 : MOZ_ASSERT(mTimingJSON);
151 0 : StreamCommonProps("GCMajor", aWriter, aProcessStartTime, aUniqueStacks);
152 0 : if (mTimingJSON) {
153 0 : aWriter.SplicedJSONProperty("timings", mTimingJSON.get());
154 : } else {
155 0 : aWriter.NullProperty("timings");
156 : }
157 0 : }
158 :
159 : void
160 0 : GCMinorMarkerPayload::StreamPayload(SpliceableJSONWriter& aWriter,
161 : const TimeStamp& aProcessStartTime,
162 : UniqueStacks& aUniqueStacks)
163 : {
164 0 : MOZ_ASSERT(mTimingData);
165 0 : StreamCommonProps("GCMinor", aWriter, aProcessStartTime, aUniqueStacks);
166 0 : if (mTimingData) {
167 0 : aWriter.SplicedJSONProperty("nurseryTimings", mTimingData.get());
168 : } else {
169 0 : aWriter.NullProperty("nurseryTimings");
170 : }
171 0 : }
|