Chromium Code Reviews| Index: Source/core/inspector/InspectorTraceEvents.cpp |
| diff --git a/Source/core/inspector/InspectorTraceEvents.cpp b/Source/core/inspector/InspectorTraceEvents.cpp |
| index bd80f7ff573f3245698654a15975048ce0e91761..f55b986becdbf2eb95b0e885169607e935a46f66 100644 |
| --- a/Source/core/inspector/InspectorTraceEvents.cpp |
| +++ b/Source/core/inspector/InspectorTraceEvents.cpp |
| @@ -32,16 +32,19 @@ namespace { |
| class JSCallStack : public TraceEvent::ConvertableToTraceFormat { |
| public: |
| - explicit JSCallStack(PassRefPtrWillBeRawPtr<ScriptCallStack> callstack) : m_callstack(callstack) { } |
| + explicit JSCallStack(PassRefPtrWillBeRawPtr<ScriptCallStack> callstack) |
| + { |
| + m_serialized = callstack ? callstack->buildInspectorArray()->toJSONString() : "null"; |
| + if (!m_serialized.isSafeToSendToAnotherThread()) |
|
caseq
2014/06/25 14:27:25
Do we expect to ever hit this?
yurys
2014/06/25 14:57:40
I believe not, replaced with ASSERT.
|
| + m_serialized = m_serialized.isolatedCopy(); |
| + } |
| virtual String asTraceFormat() const |
| { |
| - if (!m_callstack) |
| - return "null"; |
| - return m_callstack->buildInspectorArray()->toJSONString(); |
| + return m_serialized; |
| } |
| private: |
| - RefPtrWillBePersistent<ScriptCallStack> m_callstack; |
| + String m_serialized; |
| }; |
| String toHexString(void* p) |
| @@ -59,26 +62,27 @@ PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorLayoutEvent::beginData |
| LocalFrame& frame = frameView->frame(); |
| frame.countObjectsNeedingLayout(needsLayoutObjects, totalObjects, isPartial); |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setNumber("dirtyObjects", needsLayoutObjects); |
| - data->setNumber("totalObjects", totalObjects); |
| - data->setBoolean("partialLayout", isPartial); |
| - data->setString("frame", toHexString(&frame)); |
| - return TracedValue::fromJSONValue(data); |
| + |
|
dsinclair
2014/06/25 14:12:50
nit: extra blank line.
yurys
2014/06/25 14:57:40
Done.
|
| + TracedValue value; |
| + return value.setInteger("dirtyObjects", needsLayoutObjects) |
| + .setInteger("totalObjects", totalObjects) |
| + .setBoolean("partialLayout", isPartial) |
| + .setString("frame", toHexString(&frame)) |
| + .finish(); |
| } |
| -static PassRefPtr<JSONArray> createQuad(const FloatQuad& quad) |
| +static void createQuad(TracedValue* value, const char* name, const FloatQuad& quad) |
|
dsinclair
2014/06/25 14:12:50
Can the TraceValue* be passed by reference so we k
yurys
2014/06/25 14:57:40
Done.
|
| { |
| - RefPtr<JSONArray> array = JSONArray::create(); |
| - array->pushNumber(quad.p1().x()); |
| - array->pushNumber(quad.p1().y()); |
| - array->pushNumber(quad.p2().x()); |
| - array->pushNumber(quad.p2().y()); |
| - array->pushNumber(quad.p3().x()); |
| - array->pushNumber(quad.p3().y()); |
| - array->pushNumber(quad.p4().x()); |
| - array->pushNumber(quad.p4().y()); |
| - return array.release(); |
| + value->beginArray(name) |
| + .pushDouble(quad.p1().x()) |
| + .pushDouble(quad.p1().y()) |
| + .pushDouble(quad.p2().x()) |
| + .pushDouble(quad.p2().y()) |
| + .pushDouble(quad.p3().x()) |
| + .pushDouble(quad.p3().y()) |
| + .pushDouble(quad.p4().x()) |
| + .pushDouble(quad.p4().y()) |
| + .endArray(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorLayoutEvent::endData(RenderObject* rootForThisLayout) |
| @@ -86,62 +90,62 @@ PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorLayoutEvent::endData(R |
| Vector<FloatQuad> quads; |
| rootForThisLayout->absoluteQuads(quads); |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| + TracedValue value; |
| if (quads.size() >= 1) { |
| - data->setArray("root", createQuad(quads[0])); |
| + createQuad(&value, "root", quads[0]); |
| int rootNodeId = InspectorNodeIds::idForNode(rootForThisLayout->generatingNode()); |
| - data->setNumber("rootNode", rootNodeId); |
| + value.setInteger("rootNode", rootNodeId); |
| } else { |
| ASSERT_NOT_REACHED(); |
| } |
| - return TracedValue::fromJSONValue(data); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorSendRequestEvent::data(unsigned long identifier, LocalFrame* frame, const ResourceRequest& request) |
| { |
| String requestId = IdentifiersFactory::requestId(identifier); |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("requestId", requestId); |
| - data->setString("frame", toHexString(frame)); |
| - data->setString("url", request.url().string()); |
| - data->setString("requestMethod", request.httpMethod()); |
| - return TracedValue::fromJSONValue(data); |
| + TracedValue value; |
| + return value.setString("requestId", requestId) |
| + .setString("frame", toHexString(frame)) |
| + .setString("url", request.url().string()) |
| + .setString("requestMethod", request.httpMethod()) |
| + .finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorReceiveResponseEvent::data(unsigned long identifier, LocalFrame* frame, const ResourceResponse& response) |
| { |
| String requestId = IdentifiersFactory::requestId(identifier); |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("requestId", requestId); |
| - data->setString("frame", toHexString(frame)); |
| - data->setNumber("statusCode", response.httpStatusCode()); |
| - data->setString("mimeType", response.mimeType().string().isolatedCopy()); |
| - return TracedValue::fromJSONValue(data); |
| + TracedValue value; |
| + return value.setString("requestId", requestId) |
| + .setString("frame", toHexString(frame)) |
| + .setInteger("statusCode", response.httpStatusCode()) |
| + .setString("mimeType", response.mimeType().string().isolatedCopy()) |
| + .finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorReceiveDataEvent::data(unsigned long identifier, LocalFrame* frame, int encodedDataLength) |
| { |
| String requestId = IdentifiersFactory::requestId(identifier); |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("requestId", requestId); |
| - data->setString("frame", toHexString(frame)); |
| - data->setNumber("encodedDataLength", encodedDataLength); |
| - return TracedValue::fromJSONValue(data); |
| + TracedValue value; |
| + return value.setString("requestId", requestId) |
| + .setString("frame", toHexString(frame)) |
| + .setInteger("encodedDataLength", encodedDataLength) |
| + .finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorResourceFinishEvent::data(unsigned long identifier, double finishTime, bool didFail) |
| { |
| String requestId = IdentifiersFactory::requestId(identifier); |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("requestId", requestId); |
| - data->setBoolean("didFail", didFail); |
| + TracedValue value; |
| + value.setString("requestId", requestId); |
| + value.setBoolean("didFail", didFail); |
| if (finishTime) |
| - data->setNumber("networkTime", finishTime); |
| - return TracedValue::fromJSONValue(data); |
| + value.setDouble("networkTime", finishTime); |
| + return value.finish(); |
| } |
| static LocalFrame* frameForExecutionContext(ExecutionContext* context) |
| @@ -152,85 +156,85 @@ static LocalFrame* frameForExecutionContext(ExecutionContext* context) |
| return frame; |
| } |
| -static PassRefPtr<JSONObject> genericTimerData(ExecutionContext* context, int timerId) |
| +static PassOwnPtr<TracedValue> genericTimerData(ExecutionContext* context, int timerId) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setNumber("timerId", timerId); |
| + OwnPtr<TracedValue> value = adoptPtr(new TracedValue()); |
| + value->setInteger("timerId", timerId); |
| if (LocalFrame* frame = frameForExecutionContext(context)) |
| - data->setString("frame", toHexString(frame)); |
| - return data.release(); |
| + value->setString("frame", toHexString(frame)); |
| + return value.release(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerInstallEvent::data(ExecutionContext* context, int timerId, int timeout, bool singleShot) |
| { |
| - RefPtr<JSONObject> data = genericTimerData(context, timerId); |
| - data->setNumber("timeout", timeout); |
| - data->setBoolean("singleShot", singleShot); |
| - return TracedValue::fromJSONValue(data); |
| + OwnPtr<TracedValue> value = genericTimerData(context, timerId); |
| + value->setInteger("timeout", timeout); |
| + value->setBoolean("singleShot", singleShot); |
| + return value->finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerRemoveEvent::data(ExecutionContext* context, int timerId) |
| { |
| - return TracedValue::fromJSONValue(genericTimerData(context, timerId)); |
| + return genericTimerData(context, timerId)->finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerFireEvent::data(ExecutionContext* context, int timerId) |
| { |
| - return TracedValue::fromJSONValue(genericTimerData(context, timerId)); |
| + return genericTimerData(context, timerId)->finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorAnimationFrameEvent::data(Document* document, int callbackId) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setNumber("id", callbackId); |
| - data->setString("frame", toHexString(document->frame())); |
| - return TracedValue::fromJSONValue(data); |
| + TracedValue value; |
| + return value.setInteger("id", callbackId) |
| + .setString("frame", toHexString(document->frame())) |
| + .finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorWebSocketCreateEvent::data(Document* document, unsigned long identifier, const KURL& url, const String& protocol) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setNumber("identifier", identifier); |
| - data->setString("url", url.string()); |
| - data->setString("frame", toHexString(document->frame())); |
| + TracedValue value; |
| + value.setInteger("identifier", identifier); |
| + value.setString("url", url.string()); |
| + value.setString("frame", toHexString(document->frame())); |
| if (!protocol.isNull()) |
| - data->setString("webSocketProtocol", protocol); |
| - return TracedValue::fromJSONValue(data); |
| + value.setString("webSocketProtocol", protocol); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorWebSocketEvent::data(Document* document, unsigned long identifier) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setNumber("identifier", identifier); |
| - data->setString("frame", toHexString(document->frame())); |
| - return TracedValue::fromJSONValue(data); |
| + TracedValue value; |
| + value.setInteger("identifier", identifier); |
| + value.setString("frame", toHexString(document->frame())); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorParseHtmlEvent::beginData(Document* document, unsigned startLine) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setNumber("startLine", startLine); |
| - data->setString("frame", toHexString(document->frame())); |
| - return TracedValue::fromJSONValue(data); |
| + TracedValue value; |
| + value.setInteger("startLine", startLine); |
| + value.setString("frame", toHexString(document->frame())); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorXhrReadyStateChangeEvent::data(ExecutionContext* context, XMLHttpRequest* request) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("url", request->url().string()); |
| - data->setNumber("readyState", request->readyState()); |
| + TracedValue value; |
| + value.setString("url", request->url().string()); |
| + value.setInteger("readyState", request->readyState()); |
| if (LocalFrame* frame = frameForExecutionContext(context)) |
| - data->setString("frame", toHexString(frame)); |
| - return TracedValue::fromJSONValue(data); |
| + value.setString("frame", toHexString(frame)); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorXhrLoadEvent::data(ExecutionContext* context, XMLHttpRequest* request) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("url", request->url().string()); |
| + TracedValue value; |
| + value.setString("url", request->url().string()); |
| if (LocalFrame* frame = frameForExecutionContext(context)) |
| - data->setString("frame", toHexString(frame)); |
| - return TracedValue::fromJSONValue(data); |
| + value.setString("frame", toHexString(frame)); |
| + return value.finish(); |
| } |
| static void localToPageQuad(const RenderObject& renderer, const LayoutRect& rect, FloatQuad* quad) |
| @@ -246,65 +250,63 @@ static void localToPageQuad(const RenderObject& renderer, const LayoutRect& rect |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintEvent::data(RenderObject* renderer, const LayoutRect& clipRect, const GraphicsLayer* graphicsLayer) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("frame", toHexString(renderer->frame())); |
| + TracedValue value; |
| + value.setString("frame", toHexString(renderer->frame())); |
| FloatQuad quad; |
| localToPageQuad(*renderer, clipRect, &quad); |
| - data->setArray("clip", createQuad(quad)); |
| + createQuad(&value, "clip", quad); |
| int nodeId = InspectorNodeIds::idForNode(renderer->generatingNode()); |
| - data->setNumber("nodeId", nodeId); |
| + value.setInteger("nodeId", nodeId); |
| int graphicsLayerId = graphicsLayer ? graphicsLayer->platformLayer()->id() : 0; |
| - data->setNumber("layerId", graphicsLayerId); |
| - return TracedValue::fromJSONValue(data); |
| + value.setInteger("layerId", graphicsLayerId); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorMarkLoadEvent::data(LocalFrame* frame) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("frame", toHexString(frame)); |
| + TracedValue value; |
| + value.setString("frame", toHexString(frame)); |
| bool isMainFrame = frame && frame->page()->mainFrame() == frame; |
| - data->setBoolean("isMainFrame", isMainFrame); |
| - return TracedValue::fromJSONValue(data); |
| + value.setBoolean("isMainFrame", isMainFrame); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorScrollLayerEvent::data(RenderObject* renderer) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("frame", toHexString(renderer->frame())); |
| + TracedValue value; |
| + value.setString("frame", toHexString(renderer->frame())); |
| int nodeId = InspectorNodeIds::idForNode(renderer->generatingNode()); |
| - data->setNumber("nodeId", nodeId); |
| - return TracedValue::fromJSONValue(data); |
| + value.setInteger("nodeId", nodeId); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorEvaluateScriptEvent::data(LocalFrame* frame, const String& url, int lineNumber) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("frame", toHexString(frame)); |
| - data->setString("url", url); |
| - data->setNumber("lineNumber", lineNumber); |
| - return TracedValue::fromJSONValue(data); |
| + TracedValue value; |
| + value.setString("frame", toHexString(frame)); |
| + value.setString("url", url); |
| + value.setInteger("lineNumber", lineNumber); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorFunctionCallEvent::data(ExecutionContext* context, int scriptId, const String& scriptName, int scriptLine) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setString("scriptId", String::number(scriptId)); |
| - data->setString("scriptName", scriptName); |
| - data->setNumber("scriptLine", scriptLine); |
| + TracedValue value; |
| + value.setString("scriptId", String::number(scriptId)); |
| + value.setString("scriptName", scriptName); |
| + value.setInteger("scriptLine", scriptLine); |
| if (LocalFrame* frame = frameForExecutionContext(context)) |
| - data->setString("frame", toHexString(frame)); |
| - return TracedValue::fromJSONValue(data); |
| + value.setString("frame", toHexString(frame)); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintImageEvent::data(const RenderImage& renderImage) |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| - data->setNumber("nodeId", InspectorNodeIds::idForNode(renderImage.generatingNode())); |
| - |
| + TracedValue value; |
| + value.setInteger("nodeId", InspectorNodeIds::idForNode(renderImage.generatingNode())); |
| if (const ImageResource* resource = renderImage.cachedImage()) |
| - data->setString("url", resource->url().string()); |
| - |
| - return TracedValue::fromJSONValue(data); |
| + value.setString("url", resource->url().string()); |
| + return value.finish(); |
| } |
| static size_t usedHeapSize() |
| @@ -316,14 +318,14 @@ static size_t usedHeapSize() |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorUpdateCountersEvent::data() |
| { |
| - RefPtr<JSONObject> data = JSONObject::create(); |
| + TracedValue value; |
| if (isMainThread()) { |
| - data->setNumber("documents", InspectorCounters::counterValue(InspectorCounters::DocumentCounter)); |
| - data->setNumber("nodes", InspectorCounters::counterValue(InspectorCounters::NodeCounter)); |
| - data->setNumber("jsEventListeners", InspectorCounters::counterValue(InspectorCounters::JSEventListenerCounter)); |
| + value.setInteger("documents", InspectorCounters::counterValue(InspectorCounters::DocumentCounter)); |
| + value.setInteger("nodes", InspectorCounters::counterValue(InspectorCounters::NodeCounter)); |
| + value.setInteger("jsEventListeners", InspectorCounters::counterValue(InspectorCounters::JSEventListenerCounter)); |
| } |
| - data->setNumber("jsHeapSizeUsed", static_cast<double>(usedHeapSize())); |
| - return TracedValue::fromJSONValue(data); |
| + value.setDouble("jsHeapSizeUsed", static_cast<double>(usedHeapSize())); |
| + return value.finish(); |
| } |
| PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorCallStackEvent::currentCallStack() |