| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011, Google Inc. All rights reserved. | 2 * Copyright (c) 2011, 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 25 matching lines...) Expand all Loading... |
| 36 #include "V8Node.h" | 36 #include "V8Node.h" |
| 37 #include "bindings/v8/RetainedDOMInfo.h" | 37 #include "bindings/v8/RetainedDOMInfo.h" |
| 38 #include "bindings/v8/ScriptObject.h" | 38 #include "bindings/v8/ScriptObject.h" |
| 39 #include "bindings/v8/V8Binding.h" | 39 #include "bindings/v8/V8Binding.h" |
| 40 #include "bindings/v8/V8DOMWrapper.h" | 40 #include "bindings/v8/V8DOMWrapper.h" |
| 41 #include "bindings/v8/WrapperTypeInfo.h" | 41 #include "bindings/v8/WrapperTypeInfo.h" |
| 42 #include "core/dom/WebCoreMemoryInstrumentation.h" | 42 #include "core/dom/WebCoreMemoryInstrumentation.h" |
| 43 #include "core/inspector/BindingVisitors.h" | 43 #include "core/inspector/BindingVisitors.h" |
| 44 | 44 |
| 45 #include <v8-profiler.h> | 45 #include <v8-profiler.h> |
| 46 #include <v8.h> |
| 46 | 47 |
| 47 #include "wtf/ThreadSpecific.h" | 48 #include "wtf/ThreadSpecific.h" |
| 48 | 49 |
| 49 namespace WebCore { | 50 namespace WebCore { |
| 50 | 51 |
| 51 typedef HashMap<String, double> ProfileNameIdleTimeMap; | 52 typedef HashMap<String, double> ProfileNameIdleTimeMap; |
| 52 | 53 |
| 53 void ScriptProfiler::start(ScriptState* state, const String& title) | 54 void ScriptProfiler::start(ScriptState* state, const String& title) |
| 54 { | 55 { |
| 55 ProfileNameIdleTimeMap* profileNameIdleTimeMap = ScriptProfiler::currentProf
ileNameIdleTimeMap(); | 56 ProfileNameIdleTimeMap* profileNameIdleTimeMap = ScriptProfiler::currentProf
ileNameIdleTimeMap(); |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 } | 193 } |
| 193 return 0; | 194 return 0; |
| 194 } | 195 } |
| 195 | 196 |
| 196 private: | 197 private: |
| 197 Vector<CString> m_strings; | 198 Vector<CString> m_strings; |
| 198 }; | 199 }; |
| 199 | 200 |
| 200 } // namespace | 201 } // namespace |
| 201 | 202 |
| 203 void ScriptProfiler::startTrackingHeapObjects() |
| 204 { |
| 205 v8::Isolate::GetCurrent()->GetHeapProfiler()->StartTrackingHeapObjects(); |
| 206 } |
| 207 |
| 208 namespace { |
| 209 |
| 210 class HeapStatsStream : public v8::OutputStream { |
| 211 public: |
| 212 HeapStatsStream(ScriptProfiler::OutputStream* stream) : m_stream(stream) { } |
| 213 virtual void EndOfStream() OVERRIDE { } |
| 214 |
| 215 virtual WriteResult WriteAsciiChunk(char* data, int size) OVERRIDE |
| 216 { |
| 217 ASSERT(false); |
| 218 return kAbort; |
| 219 } |
| 220 |
| 221 virtual WriteResult WriteHeapStatsChunk(v8::HeapStatsUpdate* updateData, int
count) OVERRIDE |
| 222 { |
| 223 Vector<uint32_t> rawData(count * 3); |
| 224 for (int i = 0; i < count; ++i) { |
| 225 int offset = i * 3; |
| 226 rawData[offset] = updateData[i].index; |
| 227 rawData[offset + 1] = updateData[i].count; |
| 228 rawData[offset + 2] = updateData[i].size; |
| 229 } |
| 230 m_stream->write(rawData.data(), rawData.size()); |
| 231 return kContinue; |
| 232 } |
| 233 |
| 234 private: |
| 235 ScriptProfiler::OutputStream* m_stream; |
| 236 }; |
| 237 |
| 238 } |
| 239 |
| 240 unsigned ScriptProfiler::requestHeapStatsUpdate(ScriptProfiler::OutputStream* st
ream) |
| 241 { |
| 242 HeapStatsStream heapStatsStream(stream); |
| 243 return v8::Isolate::GetCurrent()->GetHeapProfiler()->GetHeapStats(&heapStats
Stream); |
| 244 } |
| 245 |
| 246 void ScriptProfiler::stopTrackingHeapObjects() |
| 247 { |
| 248 v8::Isolate::GetCurrent()->GetHeapProfiler()->StopTrackingHeapObjects(); |
| 249 } |
| 250 |
| 202 // FIXME: This method should receive a ScriptState, from which we should retriev
e an Isolate. | 251 // FIXME: This method should receive a ScriptState, from which we should retriev
e an Isolate. |
| 203 PassRefPtr<ScriptHeapSnapshot> ScriptProfiler::takeHeapSnapshot(const String& ti
tle, HeapSnapshotProgress* control) | 252 PassRefPtr<ScriptHeapSnapshot> ScriptProfiler::takeHeapSnapshot(const String& ti
tle, HeapSnapshotProgress* control) |
| 204 { | 253 { |
| 205 v8::Isolate* isolate = v8::Isolate::GetCurrent(); | 254 v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
| 206 v8::HeapProfiler* profiler = isolate->GetHeapProfiler(); | 255 v8::HeapProfiler* profiler = isolate->GetHeapProfiler(); |
| 207 if (!profiler) | 256 if (!profiler) |
| 208 return 0; | 257 return 0; |
| 209 v8::HandleScope handleScope(isolate); | 258 v8::HandleScope handleScope(isolate); |
| 210 ASSERT(control); | 259 ASSERT(control); |
| 211 ActivityControlAdapter adapter(control); | 260 ActivityControlAdapter adapter(control); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 } | 362 } |
| 314 | 363 |
| 315 ProfileNameIdleTimeMap* ScriptProfiler::currentProfileNameIdleTimeMap() | 364 ProfileNameIdleTimeMap* ScriptProfiler::currentProfileNameIdleTimeMap() |
| 316 { | 365 { |
| 317 AtomicallyInitializedStatic(WTF::ThreadSpecific<ProfileNameIdleTimeMap>*, ma
p = new WTF::ThreadSpecific<ProfileNameIdleTimeMap>); | 366 AtomicallyInitializedStatic(WTF::ThreadSpecific<ProfileNameIdleTimeMap>*, ma
p = new WTF::ThreadSpecific<ProfileNameIdleTimeMap>); |
| 318 return *map; | 367 return *map; |
| 319 } | 368 } |
| 320 | 369 |
| 321 } // namespace WebCore | 370 } // namespace WebCore |
| 322 | 371 |
| OLD | NEW |