OLD | NEW |
(Empty) | |
| 1 -- Copyright 2011 the V8 project authors. All rights reserved. |
| 2 -- Redistribution and use in source and binary forms, with or without |
| 3 -- modification, are permitted provided that the following conditions are |
| 4 -- met: |
| 5 -- |
| 6 -- * Redistributions of source code must retain the above copyright |
| 7 -- notice, this list of conditions and the following disclaimer. |
| 8 -- * Redistributions in binary form must reproduce the above |
| 9 -- copyright notice, this list of conditions and the following |
| 10 -- disclaimer in the documentation and/or other materials provided |
| 11 -- with the distribution. |
| 12 -- * Neither the name of Google Inc. nor the names of its |
| 13 -- contributors may be used to endorse or promote products derived |
| 14 -- from this software without specific prior written permission. |
| 15 -- |
| 16 -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 17 -- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 18 -- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| 19 -- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| 20 -- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 21 -- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 22 -- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 23 -- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 24 -- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 25 -- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 26 -- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 |
| 28 -- This is an auxiliary tool that reads gccauses file generated by |
| 29 -- gcmole.lua and prints tree of the calls that can potentially cause a GC |
| 30 -- inside a given function. |
| 31 -- |
| 32 -- Usage: lua tools/gcmole/gccause.lua <function-name-pattern> |
| 33 -- |
| 34 |
| 35 assert(loadfile "gccauses")() |
| 36 |
| 37 local P = ... |
| 38 |
| 39 local T = {} |
| 40 |
| 41 local function TrackCause(name, lvl) |
| 42 io.write((" "):rep(lvl or 0), name, "\n") |
| 43 if GC[name] then |
| 44 local causes = GC[name] |
| 45 for i = 1, #causes do |
| 46 local f = causes[i] |
| 47 if not T[f] then |
| 48 T[f] = true |
| 49 TrackCause(f, (lvl or 0) + 1) |
| 50 end |
| 51 end |
| 52 end |
| 53 end |
| 54 |
| 55 for name, _ in pairs(GC) do |
| 56 if name:match(P) then |
| 57 T = {} |
| 58 TrackCause(name) |
| 59 end |
| 60 end |
OLD | NEW |