Sha256: 05f6f9f2b925d720ae6975de0d940edab292aa77e2f0dda4fae4c33b4fffd909

Contents?: true

Size: 1.37 KB

Versions: 1

Compression:

Stored size: 1.37 KB

Contents

module MemDump
    def self.common_ancestors(dump, class_name, threshold: 0.1)
        selected_records  = Hash.new
        remaining_records = Array.new
        dump.each_record do |r|
            if class_name === r['class']
                selected_records[r['address']] = r
            else
                remaining_records << r
            end
        end

        remaining_records = Array.new
        selected_records = Hash.new
        selected_root = root_address
        dump.each_record do |r|
            address = (r['address'] || r['root'])
            if selected_root == address
                selected_records[address] = r
                selected_root = nil;
            else
                remaining_records << r
            end
        end

        count = 0
        while count != selected_records.size
            count = selected_records.size
            remaining_records.delete_if do |r|
                references = r['references']
                if references && references.any? { |a| selected_records.has_key?(a) }
                    address = (r['address'] || r['root'])
                    selected_records[address] = r
                end
            end
        end

        selected_records.values.reverse.each do |r|
            if refs = r['references']
                refs.delete_if { |a| !selected_records.has_key?(a) }
            end
        end
    end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
memdump-0.2.0 lib/memdump/common_ancestor.rb