Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: Source/core/inspector/InspectorTimelineAgent.cpp

Issue 306053010: Tried using CrossThreadPersistent for workerDebuggerAgents (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « Source/core/inspector/InspectorTimelineAgent.h ('k') | Source/core/inspector/InspectorTracingAgent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698