Commit Graph

132 Commits

Author SHA1 Message Date
mikhail.naganov@gmail.com
44050b12b9 Revert last commit due to check fail on Linux.
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5568 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-09-30 12:35:03 +00:00
mikhail.naganov@gmail.com
99c276bbbc Fix HeapSnapshotsDiff test and a bug introduced during snapshot size optimization.
The bug wasn't revealed because the test was disabled.

BUG=848
TEST=HeapSnapshotsDiff,HeapSnapshotRootPreservedAfterSorting

Review URL: http://codereview.chromium.org/3572003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5567 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-09-30 12:24:56 +00:00
mikhail.naganov@gmail.com
8f22667805 Provide more functions to CPU profiler (fix issue 858).
The cause for missing functions is that some of them are created
from compiled code (see FastNewClosureStub), and thus not get
registered in profiler's code map.

My solution is to hook on GC visitor to provide JS functions
addresses to profiler, only if it is enabled.

BUG=858
TEST=

Review URL: http://codereview.chromium.org/3417019

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5523 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-09-24 11:45:12 +00:00
mikhail.naganov@gmail.com
c1903ce332 Show RegExp calls in the profile.
It turns out they were filtered out. But when I unfiltered them, I
discovered another issue: when DevTools run, regexp literals get
recompiled each time they called (looks like this is concerned with
switching to full compiler), so I ended up having multiple entries for
the same regexp. To fix this, I changed the way of how code entries
equivalence is considered.

BUG=crbug/55999
TEST=cctest/test-profile-generator/ProfileNodeFindOrAddChildForSameFunction
(the test isn't for the whole issue, but rather for equivalence testing)

Review URL: http://codereview.chromium.org/3426008

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5492 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-09-20 09:29:12 +00:00
mikhail.naganov@gmail.com
228d56bd8e Add support for abortion in v8::OutputStream.
It's a good idea to allow receiver to interrupt data transmission.

Review URL: http://codereview.chromium.org/3409002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5452 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-09-14 15:11:24 +00:00
mikhail.naganov@gmail.com
2388079051 Implement heap snapshots serialization into JSON. API is designed
to avoid storing serialized snapshot on VM, instead it is emitted
using output stream interface.

The size of JSON emitted is roughly equal to used heap size
(when stored as an ASCII string).

Now a whole heap snapshot can be serialized and transmitted outside
VM. This makes possible:
  - implementing non-async UI for heap snapshots inspection;
  - storing heap snapshots for further inspection;
  - remote profiling (we can even implement a snapshotting mode
    where a snapshot isn't even stored in VM, only transmitted --
    good for mobile devices);
  - creating tools for outside heap snapshots processing, e.g.
    converting to HPROF.

Review URL: http://codereview.chromium.org/3311028

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5450 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-09-14 11:49:06 +00:00
mikhail.naganov@gmail.com
e82081a506 CPU profiler: limit the number of simultaneously collected profiles.
This is related to Chromium issue 51919

BUG=51919
TEST=test-profile-generator/Issue51919

Review URL: http://codereview.chromium.org/3287005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5384 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-08-31 14:16:01 +00:00
mikhail.naganov@gmail.com
e839a1ca58 Heap profiler: allow returning aggregated snapshots via the new API.
This is intended for smoother migration to the new API in Chromium.
Also, aggregated heap snapshots can be used for cheaply obtaining
heap statistics, e.g. in tests.

Review URL: http://codereview.chromium.org/3124024

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5297 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-08-18 08:19:29 +00:00
mikhail.naganov@gmail.com
0765b6ea3e Fix issue 822: handling of JSObject::elements in CalculateNetworkSize.
BUG=822
TEST=test-heap-profiler/Issue822

Review URL: http://codereview.chromium.org/3128004

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5235 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-08-11 09:03:23 +00:00
mikhail.naganov@gmail.com
4bbf058d53 Fix CPU profiler crash in start / stop sequence when non-existent name is passed
BUG=51594
TEST=test-cpu-profiler/CrashIfStoppingLastNonExistentProfile

Review URL: http://codereview.chromium.org/3108004

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5230 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-08-10 12:06:42 +00:00
mikhail.naganov@gmail.com
31fd432f2d A follow-up to r5211: fix a couple of issues detected on Windows.
- storage of enums in bit fields;
 - removing dead entries from address -> id map in HeapObjectsMap;
 - layout of HeapEntry, to avoid class size increase on ia32 due to alignment;

Review URL: http://codereview.chromium.org/3096008

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5217 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-08-09 14:57:13 +00:00
mikhail.naganov@gmail.com
1695003bb9 Heap profiler: reduce heap snapshots size.
The size of a snapshot is now 65-80% of the JS heap size (tested on
GMail and Wave), previously it was >200%.

BUG=783

Review URL: http://codereview.chromium.org/3060008

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5211 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-08-09 11:37:24 +00:00
mikhail.naganov@gmail.com
522faec553 Fix compile errors on Linux x64 and Windows.
Will fix test-heap-profiler in the next change.

TBR=ager@chromium.org

Review URL: http://codereview.chromium.org/2877019

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5079 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-07-15 14:28:52 +00:00
mikhail.naganov@gmail.com
c98ac6e82c Heap profiler: implement diffing of snapshots.
To trace objects between snapshots, an external map of object tags is
maintained. After the first heap snapshot has been taken, the map is
updated by reporting object moves from the GC. If no snapshots were
taken, there is no overhead (except for flag checking).

I considered graph comparison algorithms that doesn't require using
object tags, but they are all of a high computational complexity, and
will still fail to detect object moves properly, even for trivial
cases, so using tags looks like unavoidable.

Review URL: http://codereview.chromium.org/3020002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5078 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-07-15 13:21:50 +00:00
mikhail.naganov@gmail.com
93387f272e Heap profiler: add a missing link between a function closure and shared function info.
Review URL: http://codereview.chromium.org/2846012

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4891 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-06-17 12:56:55 +00:00
mikhail.naganov@gmail.com
f213b096bc Heap profiler: publish API and add test.
Review URL: http://codereview.chromium.org/2822009

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4864 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-06-15 11:44:07 +00:00
mikhail.naganov@gmail.com
7e13119880 The new JS Heap Profiler: the main part.
There is no test in this patch, because the test uses V8 API,
which is coming in a separate change list.

Review URL: http://codereview.chromium.org/2722005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4848 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-06-11 16:34:59 +00:00
mikhail.naganov@gmail.com
e5bdf01d1e Factor out StringsStorage from CpuProfilesCollection.
Review URL: http://codereview.chromium.org/2769001

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4826 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-06-09 07:00:33 +00:00
mikhail.naganov@gmail.com
a217c50ab2 Move token-related constants from CodeEntry to TokenEnumerator.
Review URL: http://codereview.chromium.org/2745002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4819 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-06-08 11:27:00 +00:00
mikhail.naganov@gmail.com
cdc09c5073 CPU profiler: sample call stack on profiling start.
This simplifies writing tests a lot, because it is now possible
to guarantee that certain function will present in a profile by
starting profiler from inside it.

Review URL: http://codereview.chromium.org/2438002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4769 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-06-01 13:52:49 +00:00
mikhail.naganov@gmail.com
f939ccbc26 Unreviewed. Revert r4766, r4767.
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4768 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-06-01 13:42:48 +00:00
mikhail.naganov@gmail.com
c48b60d4a3 added function
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4766 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-06-01 13:35:09 +00:00
mikhail.naganov@gmail.com
3d7ce8ac19 CPU profiler: add secure profiles by filtering out functions using security tokens.
As several pages can run in a single V8 instance, it is possible to
have functions from different security contexts intermixed in a single
CPU profile.  To avoid exposing function names from one page to
another, filtering is introduced.

The basic idea is that instead of capturing return addresses from
stack, we're now capturing JSFunction addresses (as we anyway work
only with JS stack frames.)  Each JSFunction can reach out for
context's security token. When providing a profile to a page, the
profile is filtered using the security token of caller page. Any
functions with different security tokens are filtered out (yes, we
only do fast path check for now) and their ticks are attributed to
their parents.

Review URL: http://codereview.chromium.org/2083005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4673 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-05-18 14:19:33 +00:00
mikhail.naganov@gmail.com
61085478c6 Report approximated duration in milliseconds for profile nodes.
The simple formula "ms = ticks * sampler_interval" doesn't work,
because e.g. on Linux, the actual sampling rate can be 5 times
lower than the one set up in the code. To calculate actual sampling
rate, current time is periodically queried and processed along with
actual sampling ticks count.

Review URL: http://codereview.chromium.org/1539038

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4427 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-04-15 11:37:29 +00:00
mikhail.naganov@gmail.com
c007fd4d15 merged
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4422 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-04-14 18:48:05 +00:00
mikhail.naganov@gmail.com
4f5ff869d3 C++ profiles processor: align browser mode with the old implementation, sample VM state.
In browser (DevTools) mode, only non-native JS code and callbacks are reported.
Also, added "(garbage collector)" entry which accumulates samples count in GC state.
Trying to display "(compiler)" and "(external)" only brings confusion,
because it ends up in displaying scripts code under "(compiler)" node, and DOM
event handlers under "(external)" node, which looks weird.

Review URL: http://codereview.chromium.org/1523015

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4357 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-04-07 14:18:26 +00:00
mikhail.naganov@gmail.com
393aa6865b C++ profiler: publish the new API, make compatible with WebKit / Chromium.
I succeeded at connecting the new implementation to Chromium, this
commit includes required (although, not all) adjustments.

Review URL: http://codereview.chromium.org/1547023

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4349 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-04-06 14:54:20 +00:00
mikhail.naganov@gmail.com
889f6cce74 C++ profiles processor: wire up to VM.
If 'shell' is compiled with 'cppprofilesprocessor=on' and run
with '--prof' flag, top-down and bottom-up call trees are printed
on shell exit.

Review URL: http://codereview.chromium.org/1582004

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4343 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-04-06 10:36:38 +00:00
mikhail.naganov@gmail.com
dde48831be C++ profiles processor: put under #ifdef and fix issues.
Review URL: http://codereview.chromium.org/1514006

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4317 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-30 11:38:39 +00:00
mikhail.naganov@gmail.com
89b040894e Add a few tests to ProfilerEventsProcessor.
Review URL: http://codereview.chromium.org/1084009

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4197 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-19 13:51:01 +00:00
mikhail.naganov@gmail.com
9582645a02 Add basic C++ implementation of CPU profiler.
Review URL: http://codereview.chromium.org/1079006

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4189 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-19 09:46:53 +00:00
mikhail.naganov@gmail.com
12d252eb81 Start migrating profiles processing to C++.
Adding code for maintaining (address -> name) mapping and building
call trees.

Review URL: http://codereview.chromium.org/910002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4131 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-15 14:11:19 +00:00