code: def get_gdf(stop=True):
      
      ret = ['nodedef>name VARCHAR, label VARCHAR, hits INTEGER, ' + \
              'calls_frac DOUBLE, total_time_frac DOUBLE, ' + \
              'total_time DOUBLE, color VARCHAR, width DOUBLE']
      for func, hits in func_count.items():
          calls_frac, total_time_frac, total_time = _frac_calculation(func, hits)
          col = settings['node_colour'](calls_frac, total_time_frac)
          color = ','.join([str(round(float(c) * 255)) for c in col.split()])
          ret.append('%s,%s,%s,%s,%s,%s,\'%s\',%s' % (func, func, hits, \
                      calls_frac, total_time_frac, total_time, color, \
                      math.log(hits * 10)))
      ret.append('edgedef>node1 VARCHAR, node2 VARCHAR, color VARCHAR')
      for fr_key, fr_val in call_dict.items():
          if fr_key == '':
              continue
          for to_key, to_val in fr_val.items():
              calls_frac, total_time_frac, total_time = \
                  _frac_calculation(to_key, to_val)
              col = settings['edge_colour'](calls_frac, total_time_frac)
              color = ','.join([str(round(float(c) * 255)) for c in col.split()])
              ret.append('%s,%s,\'%s\'' % (fr_key, to_key, color))
      ret = '\n'.join(ret)
      return ret
docs: Returns a string containing a GDF file. Setting stop to True will cause
      the trace to stop.