docs: def _iterOutFiles(self):
          """
          Yields path, data, mimetype for each file involved on or produced by
          profiling.
          """
          out = StringIO()
          self.callgrind(out, relative_path=True)
          yield (
              'cachegrind.out.pprofile',
              out.getvalue(),
              'application/x-kcachegrind',
          )
          for name, lines in self.iterSource():
              lines = ''.join(lines)
              if lines:
                  if isinstance(lines, unicode):
                      lines = lines.encode('utf-8')
                  yield (
                      os.path.normpath(
                          os.path.splitdrive(name)[1]
                      ).lstrip(_ALLSEP),
                      lines,
                      'text/x-python',
                  )
          sql_name_template = 'query_%%0%ii-%%i_hits_%%6fs.sql' % len(
              str(len(self.sql_dict)),
          )
          for index, (query, time_list) in enumerate(
              sorted(
                  self.sql_dict.iteritems(),
                  key=lambda x: (sum(x[1]), len(x[1])),
                  reverse=True,
              ),
          ):
              yield (
                  sql_name_template % (
                      index,
                      len(time_list),
                      sum(time_list),
                  ),
                  b'\n'.join(b'-- %10.6fs' % x for x in time_list) + b'\n' + query,
                  'application/sql',
              )
          if self.zodb_dict:
              yield (
                  'ZODB_setstate.txt',
                  '\n\n'.join(
                      (
                          '%s (%fs)\n' % (
                              db_name,
                              sum(sum(x) for x in oid_dict.itervalues()),
                          )
                      ) + '\n'.join(
                          '%s (%i): %s' % (
                              oid.encode('hex'),
                              len(time_list),
                              ', '.join('%fs' % x for x in time_list),
                          )
                          for oid, time_list in oid_dict.iteritems()
                      )
                      for db_name, oid_dict in self.zodb_dict.iteritems()
                  ),
                  'text/plain',
              )
          if self.traverse_dict:
              yield (
                  'unrestrictedTraverse_pathlist.txt',
                  tabulate(
                      ('self', 'path', 'hit', 'total duration'),
                      sorted(
                          (
                              (context, path, len(duration_list), sum(duration_list))
                              for (context, path), duration_list in self.traverse_dict.iteritems()
                          ),
                          key=lambda x: x[3],
                          reverse=True,
                      ),
                  ),
                  'text/plain',
              )