1f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu// Copyright 2014 The Chromium Authors. All rights reserved.
2f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu// Use of this source code is governed by a BSD-style license that can be
3f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu// found in the LICENSE file.
4f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
5f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "config.h"
6f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/inspector/InspectorTraceEvents.h"
7f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
8197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptCallStackFactory.h"
9197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptGCEvent.h"
10197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptSourceCode.h"
11197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/events/Event.h"
12f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/FrameView.h"
13f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/LocalFrame.h"
14f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/inspector/IdentifiersFactory.h"
15f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/inspector/InspectorNodeIds.h"
16323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "core/inspector/ScriptCallStack.h"
17f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/page/Page.h"
18f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "core/rendering/RenderImage.h"
197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/RenderLayer.h"
20f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/rendering/RenderObject.h"
217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/workers/WorkerThread.h"
22f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/xml/XMLHttpRequest.h"
23f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/JSONValues.h"
24f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/TracedValue.h"
25f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/graphics/GraphicsLayer.h"
26f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/network/ResourceRequest.h"
27f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/network/ResourceResponse.h"
28f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/weborigin/KURL.h"
29f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "wtf/Vector.h"
30f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include <inttypes.h>
31f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
32c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccistatic const unsigned maxInvalidationTrackingCallstackSize = 5;
357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
36323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)namespace {
37323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
38323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)class JSCallStack : public TraceEvent::ConvertableToTraceFormat  {
39323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)public:
40197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    explicit JSCallStack(PassRefPtrWillBeRawPtr<ScriptCallStack> callstack)
41197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    {
429e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        m_serialized = callstack ? callstack->buildInspectorArray()->toJSONString() : "[]";
43197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        ASSERT(m_serialized.isSafeToSendToAnotherThread());
44197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    }
45323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    virtual String asTraceFormat() const
46323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    {
47197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return m_serialized;
48323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    }
49323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
50323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)private:
51197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    String m_serialized;
52323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)};
53323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciString toHexString(const void* p)
55f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
56f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    return String::format("0x%" PRIx64, static_cast<uint64>(reinterpret_cast<intptr_t>(p)));
57f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
58f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
59323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
60323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
61f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorLayoutEvent::beginData(FrameView* frameView)
62f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
63f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    bool isPartial;
64f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    unsigned needsLayoutObjects;
65f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    unsigned totalObjects;
66f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    LocalFrame& frame = frameView->frame();
67f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    frame.countObjectsNeedingLayout(needsLayoutObjects, totalObjects, isPartial);
68f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
69c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
70c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("dirtyObjects", needsLayoutObjects);
71c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("totalObjects", totalObjects);
72c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setBoolean("partialLayout", isPartial);
73c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(&frame));
74c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
75f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
76f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
77c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)static void createQuad(TracedValue* value, const char* name, const FloatQuad& quad)
78f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
79c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->beginArray(name);
80c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->pushDouble(quad.p1().x());
81c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->pushDouble(quad.p1().y());
82c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->pushDouble(quad.p2().x());
83c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->pushDouble(quad.p2().y());
84c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->pushDouble(quad.p3().x());
85c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->pushDouble(quad.p3().y());
86c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->pushDouble(quad.p4().x());
87c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->pushDouble(quad.p4().y());
88c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->endArray();
89197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}
90197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccistatic void setGeneratingNodeInfo(TracedValue* value, const RenderObject* renderer, const char* idFieldName, const char* nameFieldName = 0)
92197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{
93197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    Node* node = 0;
94197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    for (; renderer && !node; renderer = renderer->parent())
95197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        node = renderer->generatingNode();
96197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    if (!node)
97197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return;
987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    value->setInteger(idFieldName, InspectorNodeIds::idForNode(node));
997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (nameFieldName)
1007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        value->setString(nameFieldName, node->debugName());
101f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
102f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
103f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorLayoutEvent::endData(RenderObject* rootForThisLayout)
104f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
105f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    Vector<FloatQuad> quads;
106f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    rootForThisLayout->absoluteQuads(quads);
107f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
108c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
109f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    if (quads.size() >= 1) {
110c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        createQuad(value.get(), "root", quads[0]);
1117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        setGeneratingNodeInfo(value.get(), rootForThisLayout, "rootNode");
112f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    } else {
113f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu        ASSERT_NOT_REACHED();
114f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    }
115c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
116f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
117f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
1187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorLayoutInvalidationTrackingEvent::data(const RenderObject* renderer)
1197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
1207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ASSERT(renderer);
1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RefPtr<TracedValue> value = TracedValue::create();
1227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    value->setString("frame", toHexString(renderer->frame()));
1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    setGeneratingNodeInfo(value.get(), renderer, "nodeId", "nodeName");
1247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RefPtrWillBeRawPtr<ScriptCallStack> callstack = createScriptCallStack(maxInvalidationTrackingCallstackSize, true);
1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    value->setString("callstack", callstack ? callstack->buildInspectorArray()->toJSONString() : "[]");
1267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return value;
1277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
1287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintInvalidationTrackingEvent::data(const RenderObject* renderer, const RenderObject* paintContainer)
1307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ASSERT(renderer);
1327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RefPtr<TracedValue> value = TracedValue::create();
1337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    value->setString("frame", toHexString(renderer->frame()));
1347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    setGeneratingNodeInfo(value.get(), paintContainer, "paintId");
1357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    setGeneratingNodeInfo(value.get(), renderer, "nodeId", "nodeName");
1367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return value;
1377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
139f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorSendRequestEvent::data(unsigned long identifier, LocalFrame* frame, const ResourceRequest& request)
140f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
141f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    String requestId = IdentifiersFactory::requestId(identifier);
142f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
143c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
144c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("requestId", requestId);
145c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(frame));
146c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("url", request.url().string());
147c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("requestMethod", request.httpMethod());
148c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
149f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
150f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
151f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorReceiveResponseEvent::data(unsigned long identifier, LocalFrame* frame, const ResourceResponse& response)
152f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
153f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    String requestId = IdentifiersFactory::requestId(identifier);
154f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
155c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
156c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("requestId", requestId);
157c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(frame));
158c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("statusCode", response.httpStatusCode());
159c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("mimeType", response.mimeType().string().isolatedCopy());
160c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
161f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
162f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
163f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorReceiveDataEvent::data(unsigned long identifier, LocalFrame* frame, int encodedDataLength)
164f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
165f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    String requestId = IdentifiersFactory::requestId(identifier);
166f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
167c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
168c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("requestId", requestId);
169c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(frame));
170c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("encodedDataLength", encodedDataLength);
171c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
172f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
173f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
174f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorResourceFinishEvent::data(unsigned long identifier, double finishTime, bool didFail)
175f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
176f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    String requestId = IdentifiersFactory::requestId(identifier);
177f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
178c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
179c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("requestId", requestId);
180c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setBoolean("didFail", didFail);
181f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    if (finishTime)
182c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        value->setDouble("networkTime", finishTime);
183c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
184f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
185f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
186f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liustatic LocalFrame* frameForExecutionContext(ExecutionContext* context)
187f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
188f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    LocalFrame* frame = 0;
189f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    if (context->isDocument())
190f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu        frame = toDocument(context)->frame();
191f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    return frame;
192f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
193f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
194c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)static PassRefPtr<TracedValue> genericTimerData(ExecutionContext* context, int timerId)
195f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
196c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
197197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    value->setInteger("timerId", timerId);
198f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    if (LocalFrame* frame = frameForExecutionContext(context))
199197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        value->setString("frame", toHexString(frame));
200197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    return value.release();
201f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
202f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
203f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerInstallEvent::data(ExecutionContext* context, int timerId, int timeout, bool singleShot)
204f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
205c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = genericTimerData(context, timerId);
206197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    value->setInteger("timeout", timeout);
207197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    value->setBoolean("singleShot", singleShot);
208c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
209f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
210f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
211f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerRemoveEvent::data(ExecutionContext* context, int timerId)
212f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
213c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return genericTimerData(context, timerId);
214f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
215f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
216f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimerFireEvent::data(ExecutionContext* context, int timerId)
217f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
218c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return genericTimerData(context, timerId);
219f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
220f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
221f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorAnimationFrameEvent::data(Document* document, int callbackId)
222f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
223c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
224c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("id", callbackId);
225c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(document->frame()));
226c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
227f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
228f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
229f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorWebSocketCreateEvent::data(Document* document, unsigned long identifier, const KURL& url, const String& protocol)
230f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
231c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
232c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("identifier", identifier);
233c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("url", url.string());
234c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(document->frame()));
235f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    if (!protocol.isNull())
236c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        value->setString("webSocketProtocol", protocol);
237c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
238f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
239f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
240f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorWebSocketEvent::data(Document* document, unsigned long identifier)
241f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
242c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
243c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("identifier", identifier);
244c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(document->frame()));
245c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
246f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
247f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
248f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorParseHtmlEvent::beginData(Document* document, unsigned startLine)
249f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
250c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
251c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("startLine", startLine);
252c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(document->frame()));
253c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
254f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
255f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
256f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorXhrReadyStateChangeEvent::data(ExecutionContext* context, XMLHttpRequest* request)
257f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
258c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
259c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("url", request->url().string());
260c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("readyState", request->readyState());
261f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    if (LocalFrame* frame = frameForExecutionContext(context))
262c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        value->setString("frame", toHexString(frame));
263c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
264f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
265f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
266f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorXhrLoadEvent::data(ExecutionContext* context, XMLHttpRequest* request)
267f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
268c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
269c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("url", request->url().string());
270f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    if (LocalFrame* frame = frameForExecutionContext(context))
271c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        value->setString("frame", toHexString(frame));
272c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
273f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
274f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
275f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liustatic void localToPageQuad(const RenderObject& renderer, const LayoutRect& rect, FloatQuad* quad)
276f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
277f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    LocalFrame* frame = renderer.frame();
278f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    FrameView* view = frame->view();
279f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    FloatQuad absolute = renderer.localToAbsoluteQuad(FloatQuad(rect));
280f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    quad->setP1(view->contentsToRootView(roundedIntPoint(absolute.p1())));
281f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    quad->setP2(view->contentsToRootView(roundedIntPoint(absolute.p2())));
282f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    quad->setP3(view->contentsToRootView(roundedIntPoint(absolute.p3())));
283f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    quad->setP4(view->contentsToRootView(roundedIntPoint(absolute.p4())));
284f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
285f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
2867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciconst char InspectorLayerInvalidationTrackingEvent::SquashingLayerGeometryWasUpdated[] = "Squashing layer geometry was updated.";
2877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciconst char InspectorLayerInvalidationTrackingEvent::AddedToSquashingLayer[] = "The layer may have been added to an already-existing squashing layer.";
2887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciconst char InspectorLayerInvalidationTrackingEvent::RemovedFromSquashingLayer[] = "Removed the layer from a squashing layer.";
2897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciconst char InspectorLayerInvalidationTrackingEvent::ReflectionLayerChanged[] = "Reflection layer change.";
2907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciconst char InspectorLayerInvalidationTrackingEvent::NewCompositedLayer[] = "Assigned a new composited layer.";
2917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciconst char InspectorLayerInvalidationTrackingEvent::AncestorRequiresNewLayer[] = "A new composited layer is needed based on the RenderLayer's compositing ancestor's properties.";
2927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
2937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorLayerInvalidationTrackingEvent::data(const RenderLayer* layer, const char* reason)
2947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
2957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    const RenderObject* paintInvalidationContainer = layer->renderer()->containerForPaintInvalidation();
2967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
2977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RefPtr<TracedValue> value = TracedValue::create();
2987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    value->setString("frame", toHexString(paintInvalidationContainer->frame()));
2997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    setGeneratingNodeInfo(value.get(), paintInvalidationContainer, "paintId");
3007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    value->setString("reason", reason);
3017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return value;
3027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
3037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
304f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintEvent::data(RenderObject* renderer, const LayoutRect& clipRect, const GraphicsLayer* graphicsLayer)
305f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
306c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
307c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(renderer->frame()));
308f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    FloatQuad quad;
309f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    localToPageQuad(*renderer, clipRect, &quad);
310c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    createQuad(value.get(), "clip", quad);
3117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    setGeneratingNodeInfo(value.get(), renderer, "nodeId");
312f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    int graphicsLayerId = graphicsLayer ? graphicsLayer->platformLayer()->id() : 0;
313c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("layerId", graphicsLayerId);
314c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
315f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
316f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
317f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorMarkLoadEvent::data(LocalFrame* frame)
318f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
319c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
320c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(frame));
321e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    bool isMainFrame = frame && frame->isMainFrame();
322c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setBoolean("isMainFrame", isMainFrame);
323c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
324f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
325f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
326f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorScrollLayerEvent::data(RenderObject* renderer)
327f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
328c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
329c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(renderer->frame()));
3307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    setGeneratingNodeInfo(value.get(), renderer, "nodeId");
331c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
332f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
333f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
334f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorEvaluateScriptEvent::data(LocalFrame* frame, const String& url, int lineNumber)
335f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
336c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
337c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("frame", toHexString(frame));
338c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("url", url);
339c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("lineNumber", lineNumber);
340c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
341f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
342f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
343f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorFunctionCallEvent::data(ExecutionContext* context, int scriptId, const String& scriptName, int scriptLine)
344f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{
345c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
346c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("scriptId", String::number(scriptId));
347c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("scriptName", scriptName);
348c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setInteger("scriptLine", scriptLine);
349f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    if (LocalFrame* frame = frameForExecutionContext(context))
350c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        value->setString("frame", toHexString(frame));
351c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
352f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
353f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
354f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintImageEvent::data(const RenderImage& renderImage)
355f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){
356c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
3577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    setGeneratingNodeInfo(value.get(), &renderImage, "nodeId");
358f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    if (const ImageResource* resource = renderImage.cachedImage())
359c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        value->setString("url", resource->url().string());
360c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
361f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)}
362f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
363323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)static size_t usedHeapSize()
364323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
365323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    HeapInfo info;
366323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    ScriptGCEvent::getHeapSize(info);
367323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    return info.usedJSHeapSize;
368323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
369323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
370323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorUpdateCountersEvent::data()
371323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
372c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
373323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    if (isMainThread()) {
374c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        value->setInteger("documents", InspectorCounters::counterValue(InspectorCounters::DocumentCounter));
375c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        value->setInteger("nodes", InspectorCounters::counterValue(InspectorCounters::NodeCounter));
376c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        value->setInteger("jsEventListeners", InspectorCounters::counterValue(InspectorCounters::JSEventListenerCounter));
377323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    }
378c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setDouble("jsHeapSizeUsed", static_cast<double>(usedHeapSize()));
379c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
380323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
381323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
382323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorCallStackEvent::currentCallStack()
383323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
384323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    return adoptRef(new JSCallStack(createScriptCallStack(ScriptCallStack::maxCallStackSizeToCapture, true)));
385323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
386323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
387197021e6b966cfb06891637935ef33fff06433d1Ben MurdochPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorEventDispatchEvent::data(const Event& event)
388197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{
389c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
390c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("type", event.type());
391c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
392197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}
393197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
394197021e6b966cfb06891637935ef33fff06433d1Ben MurdochPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTimeStampEvent::data(ExecutionContext* context, const String& message)
395197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{
396c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtr<TracedValue> value = TracedValue::create();
397c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    value->setString("message", message);
398197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    if (LocalFrame* frame = frameForExecutionContext(context))
399c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        value->setString("frame", toHexString(frame));
400c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return value;
401197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}
402197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
4037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorTracingSessionIdForWorkerEvent::data(const String& sessionId, WorkerThread* workerThread)
4047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
4057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RefPtr<TracedValue> value = TracedValue::create();
4067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    value->setString("sessionId", sessionId);
4077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    value->setDouble("workerThreadId", workerThread->platformThreadId());
4087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return value;
4097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
4107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
411f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu}
412