17304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- Copyright 2011 the V8 project authors. All rights reserved. 27304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- Redistribution and use in source and binary forms, with or without 37304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- modification, are permitted provided that the following conditions are 47304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- met: 57304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- 67304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- * Redistributions of source code must retain the above copyright 77304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- notice, this list of conditions and the following disclaimer. 87304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- * Redistributions in binary form must reproduce the above 97304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- copyright notice, this list of conditions and the following 107304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- disclaimer in the documentation and/or other materials provided 117304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- with the distribution. 127304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- * Neither the name of Google Inc. nor the names of its 137304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- contributors may be used to endorse or promote products derived 147304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- from this software without specific prior written permission. 157304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- 167304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 257304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 267304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 287304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- This is an auxiliary tool that reads gccauses file generated by 297304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- gcmole.lua and prints tree of the calls that can potentially cause a GC 307304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- inside a given function. 317304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- 327304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- Usage: lua tools/gcmole/gccause.lua <function-name-pattern> 337304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org-- 347304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 357304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orgassert(loadfile "gccauses")() 367304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 377304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orglocal P = ... 387304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 397304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orglocal T = {} 407304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 417304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orglocal function TrackCause(name, lvl) 427304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org io.write((" "):rep(lvl or 0), name, "\n") 437304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org if GC[name] then 447304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org local causes = GC[name] 457304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org for i = 1, #causes do 467304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org local f = causes[i] 477304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org if not T[f] then 487304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org T[f] = true 497304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org TrackCause(f, (lvl or 0) + 1) 507304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org end 51c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 52c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if f == '<GC>' then break end 537304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org end 547304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org end 557304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orgend 567304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 577304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orgfor name, _ in pairs(GC) do 587304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org if name:match(P) then 597304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org T = {} 607304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org TrackCause(name) 617304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org end 627304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orgend 63