Home | History | Annotate | Download | only in gcmole
      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 
     52 	 if f == '<GC>' then break end
     53       end
     54    end
     55 end
     56 
     57 for name, _ in pairs(GC) do
     58    if name:match(P) then
     59       T = {}
     60       TrackCause(name)
     61    end
     62 end
     63