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

Side by Side Diff: Source/bindings/v8/ScriptProfiler.cpp

Issue 14373016: DevTools: [HeapProfiler] Provide API for heap objects tracking info. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: jank -> junk Created 7 years, 8 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
« no previous file with comments | « Source/bindings/v8/ScriptProfiler.h ('k') | Source/core/inspector/InspectorHeapProfilerAgent.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « Source/bindings/v8/ScriptProfiler.h ('k') | Source/core/inspector/InspectorHeapProfilerAgent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698