- 17 Mar, 2015 1 commit
-
-
loislo authored
this is a fourth part of https://codereview.chromium.org/1012633002 In another patch I'll collect the inlining tree in cpu-profiler CodeEntry Each leaf for an inlined function will have a list of deopts and their pc offsets. So when deopt happens I'll be able to map the deopt pc_offset into inlined function id and point the web developer to the exact place where deopt has happened even if it was in the inlined function. BUG=chromium:452067 LOG=n Review URL: https://codereview.chromium.org/1013753007 Cr-Commit-Position: refs/heads/master@{#27247}
-
- 27 Feb, 2015 1 commit
-
-
loislo authored
Save Unknown position as zero in RelocInfo. Remove copy constructor of SourcePosition because it is trivial. Mechanical replace int raw_position with SourcePosition position. BUG=452067 LOG=n Review URL: https://codereview.chromium.org/959203002 Cr-Commit-Position: refs/heads/master@{#26916}
-
- 20 Feb, 2015 1 commit
-
-
loislo authored
We accessed to cpu_profiler for tracking SharedFunctionInfo objects movements and used their addresses for generating function_id. Actually we could replace the manually generated shared_id by the pair script_id + position. In this case we can drop SharedFunctionInfo events support from cpu_profiler and remove the dependency. BTW GetCallUid was used as an unique identifier of the function on the front-end side. Actually it is a hash which might not be unique. So I renamed GetCallUid with GetHash and implemented GetFunctionId method. BUG=452067 LOG=n Review URL: https://codereview.chromium.org/941973002 Cr-Commit-Position: refs/heads/master@{#26775}
-
- 12 Feb, 2015 3 commits
-
-
loislo authored
1) create beefy RelocInfo table when cpu profiler is active, so if a function was optimized when profiler was active RelocInfo would get separate DeoptInfo for the each deopt case. 2) push DeoptInfo from CodeEntry to ProfileNode. When deopt happens we put the info collected on #1 into CodeEntry and record stack sample. On the sampling thread we grab the deopt data and append it to the corresponding ProfileNode deopts list. Sample profile dump. [Top down]: 0 (root) 0 #1 1 29 #2 1 test 29 #3 2 opt_function 29 #4 2 opt_function 29 #5 deopted at 118 with reason 'not a heap number' deopted at 137 with reason 'division by zero' BUG=452067 LOG=n Committed: https://crrev.com/ce8701b247d3c6604f24f17a90c02d17b4417f54 Cr-Commit-Position: refs/heads/master@{#26615} Review URL: https://codereview.chromium.org/919953002 Cr-Commit-Position: refs/heads/master@{#26630}
-
loislo authored
Revert of CPUProfiler: Push deopt reason further to ProfileNode. (patchset #1 id:1 of https://codereview.chromium.org/919953002/) Reason for revert: static initializers broke the build Original issue's description: > CPUProfiler: Push deopt reason further to ProfileNode. > > 1) create beefy RelocInfo table when cpu profiler is active, so if a function > was optimized when profiler was active RelocInfo would get separate DeoptInfo > for the each deopt case. > > 2) push DeoptInfo from CodeEntry to ProfileNode. > When deopt happens we put the info collected on #1 into CodeEntry and record stack sample. > On the sampling thread we grab the deopt data and append it to the corresponding ProfileNode deopts list. > > Sample profile dump. > [Top down]: > 0 (root) 0 #1 > 1 29 #2 > 5 test 29 #3 > 3 opt_function 29 #4 > deopted at 52 with reason 'not a heap number' > deopted at 71 with reason 'division by zero' > > BUG=452067 > LOG=n > > Committed: https://crrev.com/ce8701b247d3c6604f24f17a90c02d17b4417f54 > Cr-Commit-Position: refs/heads/master@{#26615} TBR=jarin@chromium.org,svenpanne@chromium.org,yurys@chromium.org,alph@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=452067 Review URL: https://codereview.chromium.org/915173005 Cr-Commit-Position: refs/heads/master@{#26616}
-
loislo authored
1) create beefy RelocInfo table when cpu profiler is active, so if a function was optimized when profiler was active RelocInfo would get separate DeoptInfo for the each deopt case. 2) push DeoptInfo from CodeEntry to ProfileNode. When deopt happens we put the info collected on #1 into CodeEntry and record stack sample. On the sampling thread we grab the deopt data and append it to the corresponding ProfileNode deopts list. Sample profile dump. [Top down]: 0 (root) 0 #1 1 29 #2 5 test 29 #3 3 opt_function 29 #4 deopted at 52 with reason 'not a heap number' deopted at 71 with reason 'division by zero' BUG=452067 LOG=n Review URL: https://codereview.chromium.org/919953002 Cr-Commit-Position: refs/heads/master@{#26615}
-
- 10 Feb, 2015 1 commit
-
-
loislo authored
1) Deoptimizer::Reason was replaced with Deoptimizer::DeoptInfo because it also has raw position. Also the old name clashes with DeoptReason enum. 2) c_entry_fp assignment call was added to EntryGenerator::Generate So we can calculate sp and have a chance to record the stack for the deopting function. btw it makes the test stable. 3) new kind of CodeEvents was added to cpu-profiler 4) GetDeoptInfo method was extracted from PrintDeoptLocation. So it could be reused in cpu profiler. BUG=452067 LOG=n Review URL: https://codereview.chromium.org/910773002 Cr-Commit-Position: refs/heads/master@{#26545}
-
- 03 Jun, 2014 1 commit
-
-
jochen@chromium.org authored
- this avoids using relative include paths which are forbidden by the style guide - makes the code more readable since it's clear which header is meant - allows for starting to use checkdeps BUG=none R=jkummerow@chromium.org, danno@chromium.org LOG=n Review URL: https://codereview.chromium.org/304153016 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21625 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 22 May, 2014 1 commit
-
-
alph@chromium.org authored
The reuse of CodeCreateEvent for deopt events caused a CodeCreateEvent fired twice for a code object. When the event was processed for the first time it seized the no-fp-ranges from code object, so the second event had no ranges info leaving code entry without them. As a result when a cpu profile sample falls into the region it missed the 2nd stack frame. LOG=N BUG= R=bmeurer@chromium.org, loislo@chromium.org Review URL: https://codereview.chromium.org/290093005 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21418 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 29 Apr, 2014 1 commit
-
-
bmeurer@chromium.org authored
R=svenpanne@chromium.org Review URL: https://codereview.chromium.org/259183002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@21035 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 23 Aug, 2013 1 commit
-
-
yurys@chromium.org authored
The new implementation: * uses MemoryBarriers to make sure up-to-date data is accessed on both producer and consumer threads * will not allow to overwrite records * doesn't have notion of chunks, instead each entry is aligned on the cache line boundaries BUG=v8:2814 R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/22849002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16284 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 30 Jul, 2013 1 commit
-
-
yurys@chromium.org authored
Sampling rate is now calculated as total number of samples divided by profiling time in ms. Before the patch the sampling rate was updated once per 100ms which doesn't have any obvious advantage over the simpler method. Also we are going to get rid of the profile node self and total time calculation in the v8 CPU profiler and only expose profiling start/end time for CpuProfile and number of ticks on each ProfileNode and let clients do all the math should they need it. BUG=None R=bmeurer@chromium.org, loislo@chromium.org Review URL: https://codereview.chromium.org/21105003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15944 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 07 Jul, 2013 1 commit
-
-
loislo@chromium.org authored
1) report line number even if a script has no resource_name (evals); a) do that for already compiled functions in log.cc; b) do that for fresh evals in compiler.cc; 2) Implement the test for LineNumbers and make it fast and stable, otherwise we have to wait for tick samples; a) move processor_->Join() call into new Processor::StopSynchronously method; b) Process all the CodeEvents even if we are stopping Processor thread; c) make getters for generator and processor; 3) Fix the test for Jit that didn't expect line numbers; 4) Minor refactoring: a) in ProcessTicks; b) rename enqueue_order_ to last_code_event_id_ for better readability; c) rename dequeue_order_ to last_processed_code_event_id_ and make it a member for better readability; BUG= TEST=test-profile-generator/LineNumber R=jkummerow@chromium.org, yurys@chromium.org Review URL: https://codereview.chromium.org/18058008 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15530 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 02 Jul, 2013 2 commits
-
-
yurys@chromium.org authored
When current function is FunctionCall builtin we have no reliable way to determine its caller function (in many cases the top of the sampled stack contains address of the caller but sometimes it does not). Instead of dropping the sample or its two top frames we simply mark the caller frame as '(unresolved function)'. It seems like a better approach that dropping whole sample as knowing the top function and the rest of the stack the user should be able to figure out what the caller was. This change adds builtin id to CodeEntry objects. It will be used later to add similar top frame analysis for FunctionApply and probably other builtins. BUG=None TBR=loislo@chromium.org Review URL: https://codereview.chromium.org/18422003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15436 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
yurys@chromium.org authored
This reverts commit r15426. The new test fails in Debug mode. BUG=None TBR=jkummerow@chromium.org Review URL: https://codereview.chromium.org/18478002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15434 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 01 Jul, 2013 4 commits
-
-
yurys@chromium.org authored
When current function is FunctionCall builtin we have no reliable way to determine its caller function (in many cases the top of the sampled stack contains address of the caller but sometimes it does not). Instead of dropping the sample or its two top frames we simply mark the caller frame as '(unresolved function)'. It seems like a better approach that dropping whole sample as knowing the top function and the rest of the stack the user should be able to figure out what the caller was. This change adds builtin id to CodeEntry objects. It will be used later to add similar top frame analysis for FunctionApply and probably other builtins. BUG=None R=jkummerow@chromium.org, loislo@chromium.org Review URL: https://codereview.chromium.org/18316004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15426 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
loislo@chromium.org authored
The bodies of methods in ProfilerEventProcessor were moved into CpuProfiler. Multiple NewCodeEntry methods in CpuProfilesCollection were replaced with one which simply passes arguments to the CodeEntry constructor. And CpuProfiler just calls this method when it needs a CodeEntry object. This NewCodeEntry method is required because CpuProfilesCollection keeps ownership of CodeEntry objects. BUG=255392 TEST=existing tests R=yangguo@chromium.org, yurys@chromium.org Committed: https://code.google.com/p/v8/source/detail?r=15405 Review URL: https://codereview.chromium.org/18053004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15407 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
loislo@chromium.org authored
This reverts commit 76adf84b83ec3c0b261cbc29369ce4ac83f9d002. windows compilation failed BUG=none TBR=yurys@chromium.org Review URL: https://codereview.chromium.org/18344002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15406 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
loislo@chromium.org authored
The bodies of methods in ProfilerEventProcessor were moved into CpuProfiler. Multiple NewCodeEntry methods in CpuProfilesCollection were replaced with one which simply passes arguments to the CodeEntry constructor. And CpuProfiler just calls this method when it needs a CodeEntry object. This NewCodeEntry method is required because CpuProfilesCollection keeps ownership of CodeEntry objects. BUG=255392 TEST=existing tests R=yangguo@chromium.org, yurys@chromium.org Review URL: https://codereview.chromium.org/18053004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15405 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 30 Nov, 2012 1 commit
-
-
jkummerow@chromium.org authored
This reverts r12985. Review URL: https://codereview.chromium.org/11428103 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13104 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 16 Nov, 2012 1 commit
-
-
jkummerow@chromium.org authored
- perform CPU profiler sampling in the sampler thread as we used to; - skip sampling in the sampling thread if processing thread is running; - only install SIGPROF handler when CPU profiling is enabled. BUG=v8:2364 Review URL: https://codereview.chromium.org/11231002 Patch from Sergey Rogulenko <rogulenko@google.com> and Andrey Kosyakov <caseq@chromium.org>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12985 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 17 Oct, 2012 1 commit
-
-
jkummerow@chromium.org authored
This reverts r12649 and r12650. BUG=v8:2364 Review URL: https://codereview.chromium.org/11193020 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12745 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 02 Oct, 2012 1 commit
-
-
jkummerow@chromium.org authored
BUG=None Review URL: https://codereview.chromium.org/10871039 Patch from Sergey Rogulenko <rogulenko@google.com>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12650 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 14 Sep, 2011 1 commit
-
-
mikhail.naganov@gmail.com authored
Events are still generated for tick processor on performance testing server to work, as soon as scripts will be updated, it will be safe to remove code delete events emitting code. R=erik.corry@gmail.com BUG=v8:1466 TEST=existing tests in test-profile-generator,test-cpu-profiler and mjsunit/tools Review URL: http://codereview.chromium.org/7864017 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9275 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 13 Jul, 2011 1 commit
-
-
sgjesse@chromium.org authored
The preprocessor defines ENABLE_LOGGING_AND_PROFILING and ENABLE_VMSTATE_TRACKING has been removed as these where required to be turned on for Crankshaft to work. To re-enable reducing the binary size by leaving out heap and CPU profiler a new set of defines needs to be created. R=ager@chromium.org BUG=v8:1271 TEST=all Review URL: http://codereview.chromium.org//7350014 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8622 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 22 Jun, 2011 1 commit
-
-
mikhail.naganov@gmail.com authored
R=vitalyr@chromium.org BUG=1293 Review URL: http://codereview.chromium.org/7203005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8368 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 30 Mar, 2011 1 commit
-
-
mikhail.naganov@gmail.com authored
It looks like we initialize TickSample values twice in some situations, but I will fix this in a separate change list. R=sgjesse@chromium.org BUG=1292 TEST=none Review URL: http://codereview.chromium.org/6756031 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7434 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 10 Mar, 2011 4 commits
-
-
mikhail.naganov@gmail.com authored
BUG=none TEST=none Review URL: http://codereview.chromium.org/6646022/ git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7124 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
mikhail.naganov@gmail.com authored
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7123 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
mikhail.naganov@gmail.com authored
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7120 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
mikhail.naganov@gmail.com authored
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7119 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 22 Feb, 2011 1 commit
-
-
mikhail.naganov@gmail.com authored
The main issue was due to multiple recompilations of functions. Now code objects are grouped by function using SFI object address. JSFunction objects are no longer tracked, instead we track SFI object moves. To pick a correct code version, we now sample return addresses instead of JSFunction addresses. tools/{linux|mac|windows}-tickprocessor scripts differentiate between code optimization states for the same function (using * and ~ prefixes introduced earlier). DevTools CPU profiler treats all variants of function code as a single function. ll_prof treats each optimized variant as a separate entry, because it can disassemble each one of them. tickprocessor.py not updated -- it is deprecated and will be removed. BUG=v8/1087,b/3178160 TEST=all existing tests pass, including Chromium layout tests Review URL: http://codereview.chromium.org/6551011 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@6902 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 20 Sep, 2010 1 commit
-
-
mikhail.naganov@gmail.com authored
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
-
- 22 May, 2010 1 commit
-
-
mikhail.naganov@gmail.com authored
I changed the implementation of a queue between the VM and processor thread to be unbounded and lock-free, using Herb Sutter's example from DDJ article: http://www.ddj.com/high-performance-computing/210604448 This had brought back profiling overhead to a minimum for the page from Chromium's issue 16184. BUG=714 Review URL: http://codereview.chromium.org/2091019 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4706 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 18 May, 2010 1 commit
-
-
mikhail.naganov@gmail.com authored
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
-
- 15 Apr, 2010 1 commit
-
-
mikhail.naganov@gmail.com authored
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
-
- 14 Apr, 2010 1 commit
-
-
mikhail.naganov@gmail.com authored
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4422 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 12 Apr, 2010 1 commit
-
-
mikhail.naganov@gmail.com authored
This is to make possible enabling usage of the new profiling subsystem in Chromium without much hassle. The idea is pretty simple: unless the new profiling API is used, all works as usual, as soon as Chromium starts to use the new API, it will work too. Review URL: http://codereview.chromium.org/1635005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4382 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 07 Apr, 2010 1 commit
-
-
mikhail.naganov@gmail.com authored
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
-
- 06 Apr, 2010 1 commit
-
-
mikhail.naganov@gmail.com authored
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
-