| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 , skipWhenUnbalanced(false) | 150 , skipWhenUnbalanced(false) |
| 151 { | 151 { |
| 152 } | 152 } |
| 153 RefPtr<TimelineEvent> record; | 153 RefPtr<TimelineEvent> record; |
| 154 RefPtr<JSONObject> data; | 154 RefPtr<JSONObject> data; |
| 155 RefPtr<TypeBuilder::Array<TimelineEvent> > children; | 155 RefPtr<TypeBuilder::Array<TimelineEvent> > children; |
| 156 String type; | 156 String type; |
| 157 bool skipWhenUnbalanced; | 157 bool skipWhenUnbalanced; |
| 158 }; | 158 }; |
| 159 | 159 |
| 160 class TimelineRecordStack { | 160 class TimelineRecordStack : public NoBaseWillBeGarbageCollectedFinalized<Timelin
eRecordStack> { |
| 161 private: | 161 private: |
| 162 struct Entry { | 162 struct Entry { |
| 163 Entry(PassRefPtr<TimelineEvent> record, const String& type) | 163 Entry(PassRefPtr<TimelineEvent> record, const String& type) |
| 164 : record(record) | 164 : record(record) |
| 165 , children(TypeBuilder::Array<TimelineEvent>::create()) | 165 , children(TypeBuilder::Array<TimelineEvent>::create()) |
| 166 #ifndef NDEBUG | 166 #ifndef NDEBUG |
| 167 , type(type) | 167 , type(type) |
| 168 #endif | 168 #endif |
| 169 { | 169 { |
| 170 } | 170 } |
| 171 | 171 |
| 172 RefPtr<TimelineEvent> record; | 172 RefPtr<TimelineEvent> record; |
| 173 RefPtr<TypeBuilder::Array<TimelineEvent> > children; | 173 RefPtr<TypeBuilder::Array<TimelineEvent> > children; |
| 174 #ifndef NDEBUG | 174 #ifndef NDEBUG |
| 175 String type; | 175 String type; |
| 176 #endif | 176 #endif |
| 177 }; | 177 }; |
| 178 | 178 |
| 179 public: | 179 public: |
| 180 TimelineRecordStack() : m_timelineAgent(0) { } | 180 TimelineRecordStack() : m_timelineAgent(nullptr) { } |
| 181 TimelineRecordStack(InspectorTimelineAgent*); | 181 TimelineRecordStack(InspectorTimelineAgent*); |
| 182 | 182 |
| 183 void addScopedRecord(PassRefPtr<TimelineEvent> record, const String& type); | 183 void addScopedRecord(PassRefPtr<TimelineEvent> record, const String& type); |
| 184 void closeScopedRecord(double endTime); | 184 void closeScopedRecord(double endTime); |
| 185 void addInstantRecord(PassRefPtr<TimelineEvent> record); | 185 void addInstantRecord(PassRefPtr<TimelineEvent> record); |
| 186 | 186 |
| 187 #ifndef NDEBUG | 187 #ifndef NDEBUG |
| 188 bool isOpenRecordOfType(const String& type); | 188 bool isOpenRecordOfType(const String& type); |
| 189 #endif | 189 #endif |
| 190 | 190 |
| 191 void trace(Visitor*); |
| 192 |
| 191 private: | 193 private: |
| 192 void send(PassRefPtr<JSONObject>); | 194 void send(PassRefPtr<JSONObject>); |
| 193 | 195 |
| 194 InspectorTimelineAgent* m_timelineAgent; | 196 RawPtrWillBeMember<InspectorTimelineAgent> m_timelineAgent; |
| 195 Vector<Entry> m_stack; | 197 Vector<Entry> m_stack; |
| 196 }; | 198 }; |
| 197 | 199 |
| 198 struct TimelineThreadState { | 200 struct TimelineThreadState : public NoBaseWillBeGarbageCollectedFinalized<Timeli
neThreadState> { |
| 199 TimelineThreadState() { } | 201 TimelineThreadState() { } |
| 200 | 202 |
| 201 TimelineThreadState(InspectorTimelineAgent* timelineAgent) | 203 TimelineThreadState(InspectorTimelineAgent* timelineAgent) |
| 202 : recordStack(timelineAgent) | 204 : recordStack(adoptPtrWillBeNoop(new TimelineRecordStack(timelineAgent))
) |
| 203 , inKnownLayerTask(false) | 205 , inKnownLayerTask(false) |
| 204 , decodedPixelRefId(0) | 206 , decodedPixelRefId(0) |
| 205 { | 207 { |
| 206 } | 208 } |
| 207 | 209 |
| 208 TimelineRecordStack recordStack; | 210 void trace(Visitor*); |
| 211 |
| 212 OwnPtrWillBeMember<TimelineRecordStack> recordStack; |
| 209 bool inKnownLayerTask; | 213 bool inKnownLayerTask; |
| 210 unsigned long long decodedPixelRefId; | 214 unsigned long long decodedPixelRefId; |
| 211 }; | 215 }; |
| 212 | 216 |
| 213 struct TimelineImageInfo { | 217 struct TimelineImageInfo { |
| 214 int backendNodeId; | 218 int backendNodeId; |
| 215 String url; | 219 String url; |
| 216 | 220 |
| 217 TimelineImageInfo() : backendNodeId(0) { } | 221 TimelineImageInfo() : backendNodeId(0) { } |
| 218 TimelineImageInfo(int backendNodeId, String url) : backendNodeId(backendNode
Id), url(url) { } | 222 TimelineImageInfo(int backendNodeId, String url) : backendNodeId(backendNode
Id), url(url) { } |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 addRecordToTimeline(record.release(), time); | 258 addRecordToTimeline(record.release(), time); |
| 255 if (m_state->getBoolean(TimelineAgentState::includeCounters)) { | 259 if (m_state->getBoolean(TimelineAgentState::includeCounters)) { |
| 256 addRecordToTimeline(createCountersUpdate(), time); | 260 addRecordToTimeline(createCountersUpdate(), time); |
| 257 } | 261 } |
| 258 } | 262 } |
| 259 | 263 |
| 260 InspectorTimelineAgent::~InspectorTimelineAgent() | 264 InspectorTimelineAgent::~InspectorTimelineAgent() |
| 261 { | 265 { |
| 262 } | 266 } |
| 263 | 267 |
| 268 void InspectorTimelineAgent::trace(Visitor* visitor) |
| 269 { |
| 270 visitor->trace(m_pageAgent); |
| 271 visitor->trace(m_layerTreeAgent); |
| 272 visitor->trace(m_threadStates); |
| 273 InspectorBaseAgent::trace(visitor); |
| 274 } |
| 275 |
| 264 void InspectorTimelineAgent::setFrontend(InspectorFrontend* frontend) | 276 void InspectorTimelineAgent::setFrontend(InspectorFrontend* frontend) |
| 265 { | 277 { |
| 266 m_frontend = frontend->timeline(); | 278 m_frontend = frontend->timeline(); |
| 267 } | 279 } |
| 268 | 280 |
| 269 void InspectorTimelineAgent::clearFrontend() | 281 void InspectorTimelineAgent::clearFrontend() |
| 270 { | 282 { |
| 271 ErrorString error; | 283 ErrorString error; |
| 272 RefPtr<TypeBuilder::Array<TimelineEvent> > events; | 284 RefPtr<TypeBuilder::Array<TimelineEvent> > events; |
| 273 stop(&error, events); | 285 stop(&error, events); |
| (...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 879 { | 891 { |
| 880 appendRecord(TimelineRecordFactory::createGenericWebSocketData(identifier),
TimelineRecordType::WebSocketDestroy, true, document->frame()); | 892 appendRecord(TimelineRecordFactory::createGenericWebSocketData(identifier),
TimelineRecordType::WebSocketDestroy, true, document->frame()); |
| 881 } | 893 } |
| 882 | 894 |
| 883 void InspectorTimelineAgent::onBeginImplSideFrame(const TraceEventDispatcher::Tr
aceEvent& event) | 895 void InspectorTimelineAgent::onBeginImplSideFrame(const TraceEventDispatcher::Tr
aceEvent& event) |
| 884 { | 896 { |
| 885 unsigned long long layerTreeId = event.asUInt(InstrumentationEventArguments:
:LayerTreeId); | 897 unsigned long long layerTreeId = event.asUInt(InstrumentationEventArguments:
:LayerTreeId); |
| 886 if (layerTreeId != m_layerTreeId) | 898 if (layerTreeId != m_layerTreeId) |
| 887 return; | 899 return; |
| 888 TimelineThreadState& state = threadState(event.threadIdentifier()); | 900 TimelineThreadState& state = threadState(event.threadIdentifier()); |
| 889 state.recordStack.addInstantRecord(createRecordForEvent(event, TimelineRecor
dType::BeginFrame, JSONObject::create())); | 901 state.recordStack->addInstantRecord(createRecordForEvent(event, TimelineReco
rdType::BeginFrame, JSONObject::create())); |
| 890 } | 902 } |
| 891 | 903 |
| 892 void InspectorTimelineAgent::onPaintSetupBegin(const TraceEventDispatcher::Trace
Event& event) | 904 void InspectorTimelineAgent::onPaintSetupBegin(const TraceEventDispatcher::Trace
Event& event) |
| 893 { | 905 { |
| 894 ASSERT(!m_paintSetupStart); | 906 ASSERT(!m_paintSetupStart); |
| 895 m_paintSetupStart = event.timestamp() * msPerSecond; | 907 m_paintSetupStart = event.timestamp() * msPerSecond; |
| 896 } | 908 } |
| 897 | 909 |
| 898 void InspectorTimelineAgent::onPaintSetupEnd(const TraceEventDispatcher::TraceEv
ent& event) | 910 void InspectorTimelineAgent::onPaintSetupEnd(const TraceEventDispatcher::TraceEv
ent& event) |
| 899 { | 911 { |
| 900 ASSERT(m_paintSetupStart); | 912 ASSERT(m_paintSetupStart); |
| 901 m_paintSetupEnd = event.timestamp() * msPerSecond; | 913 m_paintSetupEnd = event.timestamp() * msPerSecond; |
| 902 } | 914 } |
| 903 | 915 |
| 904 void InspectorTimelineAgent::onRasterTaskBegin(const TraceEventDispatcher::Trace
Event& event) | 916 void InspectorTimelineAgent::onRasterTaskBegin(const TraceEventDispatcher::Trace
Event& event) |
| 905 { | 917 { |
| 906 TimelineThreadState& state = threadState(event.threadIdentifier()); | 918 TimelineThreadState& state = threadState(event.threadIdentifier()); |
| 907 unsigned long long layerId = event.asUInt(InstrumentationEventArguments::Lay
erId); | 919 unsigned long long layerId = event.asUInt(InstrumentationEventArguments::Lay
erId); |
| 908 ASSERT(layerId); | 920 ASSERT(layerId); |
| 909 if (!m_layerToNodeMap.contains(layerId)) | 921 if (!m_layerToNodeMap.contains(layerId)) |
| 910 return; | 922 return; |
| 911 ASSERT(!state.inKnownLayerTask); | 923 ASSERT(!state.inKnownLayerTask); |
| 912 state.inKnownLayerTask = true; | 924 state.inKnownLayerTask = true; |
| 913 double timestamp = event.timestamp() * msPerSecond; | 925 double timestamp = event.timestamp() * msPerSecond; |
| 914 RefPtr<JSONObject> data = TimelineRecordFactory::createLayerData(m_layerToNo
deMap.get(layerId)); | 926 RefPtr<JSONObject> data = TimelineRecordFactory::createLayerData(m_layerToNo
deMap.get(layerId)); |
| 915 RefPtr<TimelineEvent> record = TimelineRecordFactory::createBackgroundRecord
(timestamp, String::number(event.threadIdentifier()), TimelineRecordType::Raster
ize, data); | 927 RefPtr<TimelineEvent> record = TimelineRecordFactory::createBackgroundRecord
(timestamp, String::number(event.threadIdentifier()), TimelineRecordType::Raster
ize, data); |
| 916 state.recordStack.addScopedRecord(record, TimelineRecordType::Rasterize); | 928 state.recordStack->addScopedRecord(record, TimelineRecordType::Rasterize); |
| 917 } | 929 } |
| 918 | 930 |
| 919 void InspectorTimelineAgent::onRasterTaskEnd(const TraceEventDispatcher::TraceEv
ent& event) | 931 void InspectorTimelineAgent::onRasterTaskEnd(const TraceEventDispatcher::TraceEv
ent& event) |
| 920 { | 932 { |
| 921 TimelineThreadState& state = threadState(event.threadIdentifier()); | 933 TimelineThreadState& state = threadState(event.threadIdentifier()); |
| 922 if (!state.inKnownLayerTask) | 934 if (!state.inKnownLayerTask) |
| 923 return; | 935 return; |
| 924 ASSERT(state.recordStack.isOpenRecordOfType(TimelineRecordType::Rasterize)); | 936 ASSERT(state.recordStack->isOpenRecordOfType(TimelineRecordType::Rasterize))
; |
| 925 state.recordStack.closeScopedRecord(event.timestamp() * msPerSecond); | 937 state.recordStack->closeScopedRecord(event.timestamp() * msPerSecond); |
| 926 state.inKnownLayerTask = false; | 938 state.inKnownLayerTask = false; |
| 927 } | 939 } |
| 928 | 940 |
| 929 void InspectorTimelineAgent::onImageDecodeBegin(const TraceEventDispatcher::Trac
eEvent& event) | 941 void InspectorTimelineAgent::onImageDecodeBegin(const TraceEventDispatcher::Trac
eEvent& event) |
| 930 { | 942 { |
| 931 TimelineThreadState& state = threadState(event.threadIdentifier()); | 943 TimelineThreadState& state = threadState(event.threadIdentifier()); |
| 932 if (!state.decodedPixelRefId && !state.inKnownLayerTask) | 944 if (!state.decodedPixelRefId && !state.inKnownLayerTask) |
| 933 return; | 945 return; |
| 934 TimelineImageInfo imageInfo; | 946 TimelineImageInfo imageInfo; |
| 935 if (state.decodedPixelRefId) { | 947 if (state.decodedPixelRefId) { |
| 936 PixelRefToImageInfoMap::const_iterator it = m_pixelRefToImageInfo.find(s
tate.decodedPixelRefId); | 948 PixelRefToImageInfoMap::const_iterator it = m_pixelRefToImageInfo.find(s
tate.decodedPixelRefId); |
| 937 if (it != m_pixelRefToImageInfo.end()) | 949 if (it != m_pixelRefToImageInfo.end()) |
| 938 imageInfo = it->value; | 950 imageInfo = it->value; |
| 939 else | 951 else |
| 940 ASSERT_NOT_REACHED(); | 952 ASSERT_NOT_REACHED(); |
| 941 } | 953 } |
| 942 RefPtr<JSONObject> data = JSONObject::create(); | 954 RefPtr<JSONObject> data = JSONObject::create(); |
| 943 TimelineRecordFactory::setImageDetails(data.get(), imageInfo.backendNodeId,
imageInfo.url); | 955 TimelineRecordFactory::setImageDetails(data.get(), imageInfo.backendNodeId,
imageInfo.url); |
| 944 double timeestamp = event.timestamp() * msPerSecond; | 956 double timeestamp = event.timestamp() * msPerSecond; |
| 945 state.recordStack.addScopedRecord(TimelineRecordFactory::createBackgroundRec
ord(timeestamp, String::number(event.threadIdentifier()), TimelineRecordType::De
codeImage, data), TimelineRecordType::DecodeImage); | 957 state.recordStack->addScopedRecord(TimelineRecordFactory::createBackgroundRe
cord(timeestamp, String::number(event.threadIdentifier()), TimelineRecordType::D
ecodeImage, data), TimelineRecordType::DecodeImage); |
| 946 } | 958 } |
| 947 | 959 |
| 948 void InspectorTimelineAgent::onImageDecodeEnd(const TraceEventDispatcher::TraceE
vent& event) | 960 void InspectorTimelineAgent::onImageDecodeEnd(const TraceEventDispatcher::TraceE
vent& event) |
| 949 { | 961 { |
| 950 TimelineThreadState& state = threadState(event.threadIdentifier()); | 962 TimelineThreadState& state = threadState(event.threadIdentifier()); |
| 951 if (!state.decodedPixelRefId) | 963 if (!state.decodedPixelRefId) |
| 952 return; | 964 return; |
| 953 ASSERT(state.recordStack.isOpenRecordOfType(TimelineRecordType::DecodeImage)
); | 965 ASSERT(state.recordStack->isOpenRecordOfType(TimelineRecordType::DecodeImage
)); |
| 954 state.recordStack.closeScopedRecord(event.timestamp() * msPerSecond); | 966 state.recordStack->closeScopedRecord(event.timestamp() * msPerSecond); |
| 955 } | 967 } |
| 956 | 968 |
| 957 void InspectorTimelineAgent::onRequestMainThreadFrame(const TraceEventDispatcher
::TraceEvent& event) | 969 void InspectorTimelineAgent::onRequestMainThreadFrame(const TraceEventDispatcher
::TraceEvent& event) |
| 958 { | 970 { |
| 959 unsigned long long layerTreeId = event.asUInt(InstrumentationEventArguments:
:LayerTreeId); | 971 unsigned long long layerTreeId = event.asUInt(InstrumentationEventArguments:
:LayerTreeId); |
| 960 if (layerTreeId != m_layerTreeId) | 972 if (layerTreeId != m_layerTreeId) |
| 961 return; | 973 return; |
| 962 TimelineThreadState& state = threadState(event.threadIdentifier()); | 974 TimelineThreadState& state = threadState(event.threadIdentifier()); |
| 963 state.recordStack.addInstantRecord(createRecordForEvent(event, TimelineRecor
dType::RequestMainThreadFrame, JSONObject::create())); | 975 state.recordStack->addInstantRecord(createRecordForEvent(event, TimelineReco
rdType::RequestMainThreadFrame, JSONObject::create())); |
| 964 } | 976 } |
| 965 | 977 |
| 966 void InspectorTimelineAgent::onActivateLayerTree(const TraceEventDispatcher::Tra
ceEvent& event) | 978 void InspectorTimelineAgent::onActivateLayerTree(const TraceEventDispatcher::Tra
ceEvent& event) |
| 967 { | 979 { |
| 968 unsigned long long layerTreeId = event.asUInt(InstrumentationEventArguments:
:LayerTreeId); | 980 unsigned long long layerTreeId = event.asUInt(InstrumentationEventArguments:
:LayerTreeId); |
| 969 if (layerTreeId != m_layerTreeId) | 981 if (layerTreeId != m_layerTreeId) |
| 970 return; | 982 return; |
| 971 unsigned long long frameId = event.asUInt(InstrumentationEventArguments::Fra
meId); | 983 unsigned long long frameId = event.asUInt(InstrumentationEventArguments::Fra
meId); |
| 972 TimelineThreadState& state = threadState(event.threadIdentifier()); | 984 TimelineThreadState& state = threadState(event.threadIdentifier()); |
| 973 state.recordStack.addInstantRecord(createRecordForEvent(event, TimelineRecor
dType::ActivateLayerTree, TimelineRecordFactory::createFrameData(frameId))); | 985 state.recordStack->addInstantRecord(createRecordForEvent(event, TimelineReco
rdType::ActivateLayerTree, TimelineRecordFactory::createFrameData(frameId))); |
| 974 } | 986 } |
| 975 | 987 |
| 976 void InspectorTimelineAgent::onDrawFrame(const TraceEventDispatcher::TraceEvent&
event) | 988 void InspectorTimelineAgent::onDrawFrame(const TraceEventDispatcher::TraceEvent&
event) |
| 977 { | 989 { |
| 978 unsigned long long layerTreeId = event.asUInt(InstrumentationEventArguments:
:LayerTreeId); | 990 unsigned long long layerTreeId = event.asUInt(InstrumentationEventArguments:
:LayerTreeId); |
| 979 if (layerTreeId != m_layerTreeId) | 991 if (layerTreeId != m_layerTreeId) |
| 980 return; | 992 return; |
| 981 TimelineThreadState& state = threadState(event.threadIdentifier()); | 993 TimelineThreadState& state = threadState(event.threadIdentifier()); |
| 982 state.recordStack.addInstantRecord(createRecordForEvent(event, TimelineRecor
dType::DrawFrame, JSONObject::create())); | 994 state.recordStack->addInstantRecord(createRecordForEvent(event, TimelineReco
rdType::DrawFrame, JSONObject::create())); |
| 983 } | 995 } |
| 984 | 996 |
| 985 void InspectorTimelineAgent::onLayerDeleted(const TraceEventDispatcher::TraceEve
nt& event) | 997 void InspectorTimelineAgent::onLayerDeleted(const TraceEventDispatcher::TraceEve
nt& event) |
| 986 { | 998 { |
| 987 unsigned long long id = event.id(); | 999 unsigned long long id = event.id(); |
| 988 ASSERT(id); | 1000 ASSERT(id); |
| 989 m_layerToNodeMap.remove(id); | 1001 m_layerToNodeMap.remove(id); |
| 990 } | 1002 } |
| 991 | 1003 |
| 992 void InspectorTimelineAgent::onDecodeLazyPixelRefBegin(const TraceEventDispatche
r::TraceEvent& event) | 1004 void InspectorTimelineAgent::onDecodeLazyPixelRefBegin(const TraceEventDispatche
r::TraceEvent& event) |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1037 } | 1049 } |
| 1038 } | 1050 } |
| 1039 } | 1051 } |
| 1040 | 1052 |
| 1041 void InspectorTimelineAgent::onEmbedderCallbackBegin(const TraceEventDispatcher:
:TraceEvent& event) | 1053 void InspectorTimelineAgent::onEmbedderCallbackBegin(const TraceEventDispatcher:
:TraceEvent& event) |
| 1042 { | 1054 { |
| 1043 TimelineThreadState& state = threadState(event.threadIdentifier()); | 1055 TimelineThreadState& state = threadState(event.threadIdentifier()); |
| 1044 double timestamp = event.timestamp() * msPerSecond; | 1056 double timestamp = event.timestamp() * msPerSecond; |
| 1045 RefPtr<JSONObject> data = TimelineRecordFactory::createEmbedderCallbackData(
event.asString(InstrumentationEventArguments::CallbackName)); | 1057 RefPtr<JSONObject> data = TimelineRecordFactory::createEmbedderCallbackData(
event.asString(InstrumentationEventArguments::CallbackName)); |
| 1046 RefPtr<TimelineEvent> record = TimelineRecordFactory::createGenericRecord(ti
mestamp, 0, TimelineRecordType::EmbedderCallback, data); | 1058 RefPtr<TimelineEvent> record = TimelineRecordFactory::createGenericRecord(ti
mestamp, 0, TimelineRecordType::EmbedderCallback, data); |
| 1047 state.recordStack.addScopedRecord(record, TimelineRecordType::EmbedderCallba
ck); | 1059 state.recordStack->addScopedRecord(record, TimelineRecordType::EmbedderCallb
ack); |
| 1048 } | 1060 } |
| 1049 | 1061 |
| 1050 void InspectorTimelineAgent::onEmbedderCallbackEnd(const TraceEventDispatcher::T
raceEvent& event) | 1062 void InspectorTimelineAgent::onEmbedderCallbackEnd(const TraceEventDispatcher::T
raceEvent& event) |
| 1051 { | 1063 { |
| 1052 TimelineThreadState& state = threadState(event.threadIdentifier()); | 1064 TimelineThreadState& state = threadState(event.threadIdentifier()); |
| 1053 state.recordStack.closeScopedRecord(event.timestamp() * msPerSecond); | 1065 state.recordStack->closeScopedRecord(event.timestamp() * msPerSecond); |
| 1054 } | 1066 } |
| 1055 | 1067 |
| 1056 void InspectorTimelineAgent::addRecordToTimeline(PassRefPtr<TimelineEvent> recor
d, double ts) | 1068 void InspectorTimelineAgent::addRecordToTimeline(PassRefPtr<TimelineEvent> recor
d, double ts) |
| 1057 { | 1069 { |
| 1058 commitFrameRecord(); | 1070 commitFrameRecord(); |
| 1059 innerAddRecordToTimeline(record); | 1071 innerAddRecordToTimeline(record); |
| 1060 if (m_bufferedEvents && ts - m_lastProgressTimestamp > 300) { | 1072 if (m_bufferedEvents && ts - m_lastProgressTimestamp > 300) { |
| 1061 m_lastProgressTimestamp = ts; | 1073 m_lastProgressTimestamp = ts; |
| 1062 m_frontend->progress(m_bufferedEvents->length()); | 1074 m_frontend->progress(m_bufferedEvents->length()); |
| 1063 } | 1075 } |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1194 if (hasLowLevelDetails && !m_platformInstrumentationClientInstalledAtStackDe
pth && !PlatformInstrumentation::hasClient()) { | 1206 if (hasLowLevelDetails && !m_platformInstrumentationClientInstalledAtStackDe
pth && !PlatformInstrumentation::hasClient()) { |
| 1195 m_platformInstrumentationClientInstalledAtStackDepth = m_recordStack.siz
e(); | 1207 m_platformInstrumentationClientInstalledAtStackDepth = m_recordStack.siz
e(); |
| 1196 PlatformInstrumentation::setClient(this); | 1208 PlatformInstrumentation::setClient(this); |
| 1197 } | 1209 } |
| 1198 } | 1210 } |
| 1199 | 1211 |
| 1200 TimelineThreadState& InspectorTimelineAgent::threadState(ThreadIdentifier thread
) | 1212 TimelineThreadState& InspectorTimelineAgent::threadState(ThreadIdentifier thread
) |
| 1201 { | 1213 { |
| 1202 ThreadStateMap::iterator it = m_threadStates.find(thread); | 1214 ThreadStateMap::iterator it = m_threadStates.find(thread); |
| 1203 if (it != m_threadStates.end()) | 1215 if (it != m_threadStates.end()) |
| 1204 return it->value; | 1216 return *(it->value); |
| 1205 return m_threadStates.add(thread, TimelineThreadState(this)).storedValue->va
lue; | 1217 return *(m_threadStates.add(thread, adoptPtrWillBeNoop(new TimelineThreadSta
te(this))).storedValue->value); |
| 1206 } | 1218 } |
| 1207 | 1219 |
| 1208 void InspectorTimelineAgent::commitFrameRecord() | 1220 void InspectorTimelineAgent::commitFrameRecord() |
| 1209 { | 1221 { |
| 1210 if (!m_pendingFrameRecord) | 1222 if (!m_pendingFrameRecord) |
| 1211 return; | 1223 return; |
| 1212 innerAddRecordToTimeline(m_pendingFrameRecord.release()); | 1224 innerAddRecordToTimeline(m_pendingFrameRecord.release()); |
| 1213 } | 1225 } |
| 1214 | 1226 |
| 1215 void InspectorTimelineAgent::clearRecordStack() | 1227 void InspectorTimelineAgent::clearRecordStack() |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1303 m_stack.last().children->addItem(record); | 1315 m_stack.last().children->addItem(record); |
| 1304 } | 1316 } |
| 1305 | 1317 |
| 1306 #ifndef NDEBUG | 1318 #ifndef NDEBUG |
| 1307 bool TimelineRecordStack::isOpenRecordOfType(const String& type) | 1319 bool TimelineRecordStack::isOpenRecordOfType(const String& type) |
| 1308 { | 1320 { |
| 1309 return !m_stack.isEmpty() && m_stack.last().type == type; | 1321 return !m_stack.isEmpty() && m_stack.last().type == type; |
| 1310 } | 1322 } |
| 1311 #endif | 1323 #endif |
| 1312 | 1324 |
| 1325 void TimelineRecordStack::trace(Visitor* visitor) |
| 1326 { |
| 1327 visitor->trace(m_timelineAgent); |
| 1328 } |
| 1329 |
| 1330 void TimelineThreadState::trace(Visitor* visitor) |
| 1331 { |
| 1332 visitor->trace(recordStack); |
| 1333 } |
| 1334 |
| 1313 } // namespace WebCore | 1335 } // namespace WebCore |
| 1314 | 1336 |
| OLD | NEW |