| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "sky/engine/config.h" | 5 #include "sky/engine/config.h" |
| 6 #include "sky/engine/core/inspector/InspectorTraceEvents.h" | 6 #include "sky/engine/core/inspector/InspectorTraceEvents.h" |
| 7 | 7 |
| 8 #include <inttypes.h> | |
| 9 #include "sky/engine/bindings/core/v8/ScriptCallStackFactory.h" | 8 #include "sky/engine/bindings/core/v8/ScriptCallStackFactory.h" |
| 10 #include "sky/engine/bindings/core/v8/ScriptGCEvent.h" | 9 #include "sky/engine/bindings/core/v8/ScriptGCEvent.h" |
| 11 #include "sky/engine/bindings/core/v8/ScriptSourceCode.h" | 10 #include "sky/engine/bindings/core/v8/ScriptSourceCode.h" |
| 12 #include "sky/engine/core/events/Event.h" | 11 #include "sky/engine/core/events/Event.h" |
| 13 #include "sky/engine/core/frame/FrameView.h" | 12 #include "sky/engine/core/frame/FrameView.h" |
| 14 #include "sky/engine/core/frame/LocalDOMWindow.h" | 13 #include "sky/engine/core/frame/LocalDOMWindow.h" |
| 15 #include "sky/engine/core/frame/LocalFrame.h" | |
| 16 #include "sky/engine/core/inspector/IdentifiersFactory.h" | 14 #include "sky/engine/core/inspector/IdentifiersFactory.h" |
| 17 #include "sky/engine/core/inspector/InspectorNodeIds.h" | 15 #include "sky/engine/core/inspector/InspectorNodeIds.h" |
| 16 #include "sky/engine/core/inspector/ScriptCallStack.h" |
| 18 #include "sky/engine/core/page/Page.h" | 17 #include "sky/engine/core/page/Page.h" |
| 19 #include "sky/engine/core/rendering/RenderImage.h" | 18 #include "sky/engine/core/rendering/RenderImage.h" |
| 20 #include "sky/engine/core/rendering/RenderObject.h" | 19 #include "sky/engine/core/rendering/RenderObject.h" |
| 21 #include "sky/engine/platform/JSONValues.h" | 20 #include "sky/engine/platform/JSONValues.h" |
| 22 #include "sky/engine/platform/TracedValue.h" | |
| 23 #include "sky/engine/platform/network/ResourceRequest.h" | 21 #include "sky/engine/platform/network/ResourceRequest.h" |
| 24 #include "sky/engine/platform/network/ResourceResponse.h" | 22 #include "sky/engine/platform/network/ResourceResponse.h" |
| 23 #include "sky/engine/platform/TracedValue.h" |
| 25 #include "sky/engine/platform/weborigin/KURL.h" | 24 #include "sky/engine/platform/weborigin/KURL.h" |
| 26 #include "sky/engine/core/inspector/ScriptCallStack.h" | |
| 27 #include "sky/engine/wtf/Vector.h" | 25 #include "sky/engine/wtf/Vector.h" |
| 28 | 26 |
| 29 namespace blink { | 27 namespace blink { |
| 30 | 28 |
| 31 namespace { | 29 namespace { |
| 32 | 30 |
| 33 class JSCallStack : public TraceEvent::ConvertableToTraceFormat { | 31 class JSCallStack : public TraceEvent::ConvertableToTraceFormat { |
| 34 public: | 32 public: |
| 35 explicit JSCallStack(PassRefPtr<ScriptCallStack> callstack) | 33 explicit JSCallStack(PassRefPtr<ScriptCallStack> callstack) |
| 36 { | 34 { |
| 37 ASSERT(m_serialized.isSafeToSendToAnotherThread()); | 35 ASSERT(m_serialized.isSafeToSendToAnotherThread()); |
| 38 } | 36 } |
| 39 virtual String asTraceFormat() const | 37 virtual String asTraceFormat() const |
| 40 { | 38 { |
| 41 return m_serialized; | 39 return m_serialized; |
| 42 } | 40 } |
| 43 | 41 |
| 44 private: | 42 private: |
| 45 String m_serialized; | 43 String m_serialized; |
| 46 }; | 44 }; |
| 47 | 45 |
| 48 String toHexString(void* p) | |
| 49 { | |
| 50 return String::format("0x%" PRIx64, static_cast<uint64>(reinterpret_cast<int
ptr_t>(p))); | |
| 51 } | |
| 52 | |
| 53 } | 46 } |
| 54 | 47 |
| 55 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorLayoutEvent::beginData
(FrameView* frameView) | 48 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorLayoutEvent::beginData
(FrameView* frameView) |
| 56 { | 49 { |
| 57 bool isPartial; | 50 bool isPartial; |
| 58 unsigned needsLayoutObjects; | 51 unsigned needsLayoutObjects; |
| 59 unsigned totalObjects; | 52 unsigned totalObjects; |
| 60 LocalFrame& frame = frameView->frame(); | 53 frameView->countObjectsNeedingLayout(needsLayoutObjects, totalObjects, isPar
tial); |
| 61 frame.countObjectsNeedingLayout(needsLayoutObjects, totalObjects, isPartial)
; | |
| 62 | 54 |
| 63 RefPtr<TracedValue> value = TracedValue::create(); | 55 RefPtr<TracedValue> value = TracedValue::create(); |
| 64 value->setInteger("dirtyObjects", needsLayoutObjects); | 56 value->setInteger("dirtyObjects", needsLayoutObjects); |
| 65 value->setInteger("totalObjects", totalObjects); | 57 value->setInteger("totalObjects", totalObjects); |
| 66 value->setBoolean("partialLayout", isPartial); | 58 value->setBoolean("partialLayout", isPartial); |
| 67 value->setString("frame", toHexString(&frame)); | |
| 68 return value; | 59 return value; |
| 69 } | 60 } |
| 70 | 61 |
| 71 static void createQuad(TracedValue* value, const char* name, const FloatQuad& qu
ad) | 62 static void createQuad(TracedValue* value, const char* name, const FloatQuad& qu
ad) |
| 72 { | 63 { |
| 73 value->beginArray(name); | 64 value->beginArray(name); |
| 74 value->pushDouble(quad.p1().x()); | 65 value->pushDouble(quad.p1().x()); |
| 75 value->pushDouble(quad.p1().y()); | 66 value->pushDouble(quad.p1().y()); |
| 76 value->pushDouble(quad.p2().x()); | 67 value->pushDouble(quad.p2().x()); |
| 77 value->pushDouble(quad.p2().y()); | 68 value->pushDouble(quad.p2().y()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 100 RefPtr<TracedValue> value = TracedValue::create(); | 91 RefPtr<TracedValue> value = TracedValue::create(); |
| 101 if (quads.size() >= 1) { | 92 if (quads.size() >= 1) { |
| 102 createQuad(value.get(), "root", quads[0]); | 93 createQuad(value.get(), "root", quads[0]); |
| 103 setGeneratingNodeId(value.get(), "rootNode", rootForThisLayout); | 94 setGeneratingNodeId(value.get(), "rootNode", rootForThisLayout); |
| 104 } else { | 95 } else { |
| 105 ASSERT_NOT_REACHED(); | 96 ASSERT_NOT_REACHED(); |
| 106 } | 97 } |
| 107 return value; | 98 return value; |
| 108 } | 99 } |
| 109 | 100 |
| 110 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorSendRequestEvent::data
(unsigned long identifier, LocalFrame* frame, const ResourceRequest& request) | 101 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorSendRequestEvent::data
(unsigned long identifier, const ResourceRequest& request) |
| 111 { | 102 { |
| 112 String requestId = IdentifiersFactory::requestId(identifier); | 103 String requestId = IdentifiersFactory::requestId(identifier); |
| 113 | 104 |
| 114 RefPtr<TracedValue> value = TracedValue::create(); | 105 RefPtr<TracedValue> value = TracedValue::create(); |
| 115 value->setString("requestId", requestId); | 106 value->setString("requestId", requestId); |
| 116 value->setString("frame", toHexString(frame)); | |
| 117 value->setString("url", request.url().string()); | 107 value->setString("url", request.url().string()); |
| 118 value->setString("requestMethod", request.httpMethod()); | 108 value->setString("requestMethod", request.httpMethod()); |
| 119 return value; | 109 return value; |
| 120 } | 110 } |
| 121 | 111 |
| 122 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorReceiveResponseEvent::
data(unsigned long identifier, LocalFrame* frame, const ResourceResponse& respon
se) | 112 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorReceiveResponseEvent::
data(unsigned long identifier, const ResourceResponse& response) |
| 123 { | 113 { |
| 124 String requestId = IdentifiersFactory::requestId(identifier); | 114 String requestId = IdentifiersFactory::requestId(identifier); |
| 125 | 115 |
| 126 RefPtr<TracedValue> value = TracedValue::create(); | 116 RefPtr<TracedValue> value = TracedValue::create(); |
| 127 value->setString("requestId", requestId); | 117 value->setString("requestId", requestId); |
| 128 value->setString("frame", toHexString(frame)); | |
| 129 value->setInteger("statusCode", response.httpStatusCode()); | 118 value->setInteger("statusCode", response.httpStatusCode()); |
| 130 value->setString("mimeType", response.mimeType().string().isolatedCopy()); | 119 value->setString("mimeType", response.mimeType().string().isolatedCopy()); |
| 131 return value; | 120 return value; |
| 132 } | 121 } |
| 133 | 122 |
| 134 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorReceiveDataEvent::data
(unsigned long identifier, LocalFrame* frame, int encodedDataLength) | 123 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorReceiveDataEvent::data
(unsigned long identifier, int encodedDataLength) |
| 135 { | 124 { |
| 136 String requestId = IdentifiersFactory::requestId(identifier); | 125 String requestId = IdentifiersFactory::requestId(identifier); |
| 137 | 126 |
| 138 RefPtr<TracedValue> value = TracedValue::create(); | 127 RefPtr<TracedValue> value = TracedValue::create(); |
| 139 value->setString("requestId", requestId); | 128 value->setString("requestId", requestId); |
| 140 value->setString("frame", toHexString(frame)); | |
| 141 value->setInteger("encodedDataLength", encodedDataLength); | 129 value->setInteger("encodedDataLength", encodedDataLength); |
| 142 return value; | 130 return value; |
| 143 } | 131 } |
| 144 | 132 |
| 145 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorResourceFinishEvent::d
ata(unsigned long identifier, double finishTime, bool didFail) | 133 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorResourceFinishEvent::d
ata(unsigned long identifier, double finishTime, bool didFail) |
| 146 { | 134 { |
| 147 String requestId = IdentifiersFactory::requestId(identifier); | 135 String requestId = IdentifiersFactory::requestId(identifier); |
| 148 | 136 |
| 149 RefPtr<TracedValue> value = TracedValue::create(); | 137 RefPtr<TracedValue> value = TracedValue::create(); |
| 150 value->setString("requestId", requestId); | 138 value->setString("requestId", requestId); |
| 151 value->setBoolean("didFail", didFail); | 139 value->setBoolean("didFail", didFail); |
| 152 if (finishTime) | 140 if (finishTime) |
| 153 value->setDouble("networkTime", finishTime); | 141 value->setDouble("networkTime", finishTime); |
| 154 return value; | 142 return value; |
| 155 } | 143 } |
| 156 | 144 |
| 157 static LocalFrame* frameForExecutionContext(ExecutionContext* context) | |
| 158 { | |
| 159 LocalFrame* frame = 0; | |
| 160 if (context->isDocument()) | |
| 161 frame = context->executingWindow()->frame(); | |
| 162 return frame; | |
| 163 } | |
| 164 | |
| 165 static PassRefPtr<TracedValue> genericTimerData(ExecutionContext* context, int t
imerId) | 145 static PassRefPtr<TracedValue> genericTimerData(ExecutionContext* context, int t
imerId) |
| 166 { | 146 { |
| 167 RefPtr<TracedValue> value = TracedValue::create(); | 147 RefPtr<TracedValue> value = TracedValue::create(); |
| 168 value->setInteger("timerId", timerId); | 148 value->setInteger("timerId", timerId); |
| 169 if (LocalFrame* frame = frameForExecutionContext(context)) | |
| 170 value->setString("frame", toHexString(frame)); | |
| 171 return value.release(); | 149 return value.release(); |
| 172 } | 150 } |
| 173 | 151 |
| 174 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerInstallEvent::dat
a(ExecutionContext* context, int timerId, int timeout, bool singleShot) | 152 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerInstallEvent::dat
a(ExecutionContext* context, int timerId, int timeout, bool singleShot) |
| 175 { | 153 { |
| 176 RefPtr<TracedValue> value = genericTimerData(context, timerId); | 154 RefPtr<TracedValue> value = genericTimerData(context, timerId); |
| 177 value->setInteger("timeout", timeout); | 155 value->setInteger("timeout", timeout); |
| 178 value->setBoolean("singleShot", singleShot); | 156 value->setBoolean("singleShot", singleShot); |
| 179 return value; | 157 return value; |
| 180 } | 158 } |
| 181 | 159 |
| 182 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerRemoveEvent::data
(ExecutionContext* context, int timerId) | 160 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerRemoveEvent::data
(ExecutionContext* context, int timerId) |
| 183 { | 161 { |
| 184 return genericTimerData(context, timerId); | 162 return genericTimerData(context, timerId); |
| 185 } | 163 } |
| 186 | 164 |
| 187 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerFireEvent::data(E
xecutionContext* context, int timerId) | 165 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerFireEvent::data(E
xecutionContext* context, int timerId) |
| 188 { | 166 { |
| 189 return genericTimerData(context, timerId); | 167 return genericTimerData(context, timerId); |
| 190 } | 168 } |
| 191 | 169 |
| 192 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorAnimationFrameEvent::d
ata(Document* document, int callbackId) | 170 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorAnimationFrameEvent::d
ata(Document* document, int callbackId) |
| 193 { | 171 { |
| 194 RefPtr<TracedValue> value = TracedValue::create(); | 172 RefPtr<TracedValue> value = TracedValue::create(); |
| 195 value->setInteger("id", callbackId); | 173 value->setInteger("id", callbackId); |
| 196 value->setString("frame", toHexString(document->frame())); | |
| 197 return value; | 174 return value; |
| 198 } | 175 } |
| 199 | 176 |
| 200 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorParseHtmlEvent::beginD
ata(Document* document, unsigned startLine) | 177 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorParseHtmlEvent::beginD
ata(Document* document, unsigned startLine) |
| 201 { | 178 { |
| 202 RefPtr<TracedValue> value = TracedValue::create(); | 179 RefPtr<TracedValue> value = TracedValue::create(); |
| 203 value->setInteger("startLine", startLine); | 180 value->setInteger("startLine", startLine); |
| 204 value->setString("frame", toHexString(document->frame())); | |
| 205 return value; | 181 return value; |
| 206 } | 182 } |
| 207 | 183 |
| 208 static void localToPageQuad(const RenderObject& renderer, const LayoutRect& rect
, FloatQuad* quad) | 184 static void localToPageQuad(const RenderObject& renderer, const LayoutRect& rect
, FloatQuad* quad) |
| 209 { | 185 { |
| 210 FloatQuad absolute = renderer.localToAbsoluteQuad(FloatQuad(rect)); | 186 FloatQuad absolute = renderer.localToAbsoluteQuad(FloatQuad(rect)); |
| 211 quad->setP1(roundedIntPoint(absolute.p1())); | 187 quad->setP1(roundedIntPoint(absolute.p1())); |
| 212 quad->setP2(roundedIntPoint(absolute.p2())); | 188 quad->setP2(roundedIntPoint(absolute.p2())); |
| 213 quad->setP3(roundedIntPoint(absolute.p3())); | 189 quad->setP3(roundedIntPoint(absolute.p3())); |
| 214 quad->setP4(roundedIntPoint(absolute.p4())); | 190 quad->setP4(roundedIntPoint(absolute.p4())); |
| 215 } | 191 } |
| 216 | 192 |
| 217 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintEvent::data(Rende
rObject* renderer, const LayoutRect& clipRect) | 193 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintEvent::data(Rende
rObject* renderer, const LayoutRect& clipRect) |
| 218 { | 194 { |
| 219 RefPtr<TracedValue> value = TracedValue::create(); | 195 RefPtr<TracedValue> value = TracedValue::create(); |
| 220 value->setString("frame", toHexString(renderer->frame())); | |
| 221 FloatQuad quad; | 196 FloatQuad quad; |
| 222 localToPageQuad(*renderer, clipRect, &quad); | 197 localToPageQuad(*renderer, clipRect, &quad); |
| 223 createQuad(value.get(), "clip", quad); | 198 createQuad(value.get(), "clip", quad); |
| 224 setGeneratingNodeId(value.get(), "nodeId", renderer); | 199 setGeneratingNodeId(value.get(), "nodeId", renderer); |
| 225 value->setInteger("layerId", 0); | 200 value->setInteger("layerId", 0); |
| 226 return value; | 201 return value; |
| 227 } | 202 } |
| 228 | 203 |
| 229 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorMarkLoadEvent::data(Lo
calFrame* frame) | 204 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorMarkLoadEvent::data() |
| 230 { | 205 { |
| 231 RefPtr<TracedValue> value = TracedValue::create(); | 206 return TracedValue::create(); |
| 232 value->setString("frame", toHexString(frame)); | |
| 233 return value; | |
| 234 } | 207 } |
| 235 | 208 |
| 236 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorScrollLayerEvent::data
(RenderObject* renderer) | 209 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorScrollLayerEvent::data
(RenderObject* renderer) |
| 237 { | 210 { |
| 238 RefPtr<TracedValue> value = TracedValue::create(); | 211 RefPtr<TracedValue> value = TracedValue::create(); |
| 239 value->setString("frame", toHexString(renderer->frame())); | |
| 240 setGeneratingNodeId(value.get(), "nodeId", renderer); | 212 setGeneratingNodeId(value.get(), "nodeId", renderer); |
| 241 return value; | 213 return value; |
| 242 } | 214 } |
| 243 | 215 |
| 244 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorEvaluateScriptEvent::d
ata(LocalFrame* frame, const String& url, int lineNumber) | 216 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorEvaluateScriptEvent::d
ata(const String& url, int lineNumber) |
| 245 { | 217 { |
| 246 RefPtr<TracedValue> value = TracedValue::create(); | 218 RefPtr<TracedValue> value = TracedValue::create(); |
| 247 value->setString("frame", toHexString(frame)); | |
| 248 value->setString("url", url); | 219 value->setString("url", url); |
| 249 value->setInteger("lineNumber", lineNumber); | 220 value->setInteger("lineNumber", lineNumber); |
| 250 return value; | 221 return value; |
| 251 } | 222 } |
| 252 | 223 |
| 253 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorFunctionCallEvent::dat
a(ExecutionContext* context, int scriptId, const String& scriptName, int scriptL
ine) | 224 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorFunctionCallEvent::dat
a(ExecutionContext* context, int scriptId, const String& scriptName, int scriptL
ine) |
| 254 { | 225 { |
| 255 RefPtr<TracedValue> value = TracedValue::create(); | 226 RefPtr<TracedValue> value = TracedValue::create(); |
| 256 value->setString("scriptId", String::number(scriptId)); | 227 value->setString("scriptId", String::number(scriptId)); |
| 257 value->setString("scriptName", scriptName); | 228 value->setString("scriptName", scriptName); |
| 258 value->setInteger("scriptLine", scriptLine); | 229 value->setInteger("scriptLine", scriptLine); |
| 259 if (LocalFrame* frame = frameForExecutionContext(context)) | |
| 260 value->setString("frame", toHexString(frame)); | |
| 261 return value; | 230 return value; |
| 262 } | 231 } |
| 263 | 232 |
| 264 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintImageEvent::data(
const RenderImage& renderImage) | 233 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintImageEvent::data(
const RenderImage& renderImage) |
| 265 { | 234 { |
| 266 RefPtr<TracedValue> value = TracedValue::create(); | 235 RefPtr<TracedValue> value = TracedValue::create(); |
| 267 setGeneratingNodeId(value.get(), "nodeId", &renderImage); | 236 setGeneratingNodeId(value.get(), "nodeId", &renderImage); |
| 268 if (const ImageResource* resource = renderImage.cachedImage()) | 237 if (const ImageResource* resource = renderImage.cachedImage()) |
| 269 value->setString("url", resource->url().string()); | 238 value->setString("url", resource->url().string()); |
| 270 return value; | 239 return value; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 298 { | 267 { |
| 299 RefPtr<TracedValue> value = TracedValue::create(); | 268 RefPtr<TracedValue> value = TracedValue::create(); |
| 300 value->setString("type", event.type()); | 269 value->setString("type", event.type()); |
| 301 return value; | 270 return value; |
| 302 } | 271 } |
| 303 | 272 |
| 304 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimeStampEvent::data(E
xecutionContext* context, const String& message) | 273 PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimeStampEvent::data(E
xecutionContext* context, const String& message) |
| 305 { | 274 { |
| 306 RefPtr<TracedValue> value = TracedValue::create(); | 275 RefPtr<TracedValue> value = TracedValue::create(); |
| 307 value->setString("message", message); | 276 value->setString("message", message); |
| 308 if (LocalFrame* frame = frameForExecutionContext(context)) | |
| 309 value->setString("frame", toHexString(frame)); | |
| 310 return value; | 277 return value; |
| 311 } | 278 } |
| 312 | 279 |
| 313 } | 280 } |
| OLD | NEW |