test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Public Attributes | Private Member Functions
cmsRelvalreport.Profile Class Reference

Public Member Functions

def __init__
 
def make_profile
 
def make_report
 

Public Attributes

 command
 
 profile_name
 
 profiler
 

Private Member Functions

def _profile_edmsize
 
def _profile_igprof
 
def _profile_Memcheck_Valgrind
 
def _profile_None
 
def _profile_SimpleMem_Parser
 
def _profile_Timereport_Parser
 
def _profile_Timing_Parser
 
def _profile_valgrindfce
 
def _save_output
 

Detailed Description

Class that represents the procedure of performance report creation

Definition at line 269 of file cmsRelvalreport.py.

Constructor & Destructor Documentation

def cmsRelvalreport.Profile.__init__ (   self,
  command,
  profiler,
  profile_name 
)

Definition at line 273 of file cmsRelvalreport.py.

274  def __init__(self,command,profiler,profile_name):
275  self.command=command
276  self.profile_name=profile_name
277  self.profiler=profiler

Member Function Documentation

def cmsRelvalreport.Profile._profile_edmsize (   self)
private
Launch edm size profiler

Definition at line 356 of file cmsRelvalreport.py.

References runall.testit.command, cmsswPreprocessor.CmsswPreprocessor.command, WorkFlow.WorkFlowBlock.command, cmsRelvalreport.Profile.command, ConfigBuilder.ConfigBuilder.command, cmsRelvalreport.execute(), cmsRelvalreport.Profile.profile_name, and cmsRelvalreport.Profile.profiler.

Referenced by cmsRelvalreport.Profile.make_profile().

357  def _profile_edmsize(self):
358  '''
359  Launch edm size profiler
360  '''
361  # In this case we replace the name to be clear
362  input_rootfile=self.command
363 
364  # Skim the content if requested!
365  if '.' in self.profiler:
366 
367  clean_profiler_name,options=self.profiler.split('.')
368  content,nevts=options.split(',')
369  outfilename='%s_%s.root'%(os.path.basename(self.command)[:-6],content)
370  oldpypath=os.environ['PYTHONPATH']
371  os.environ['PYTHONPATH']+=':%s' %MAKESKIMDRIVERDIR
372  execute('%s -i %s -o %s --outputcommands %s -n %s' %(MAKESKIMDRIVER,
373  self.command,
374  outfilename,
375  content,
376  nevts))
377  os.environ['PYTHONPATH']=oldpypath
378  #execute('rm %s' %outfilename)
379  self.command=outfilename
380  self.profiler=clean_profiler_name
381 
382 
383  profiler_line='edmEventSize -o %s -d %s'\
384  %(self.profile_name,self.command)
385 
386  return execute(profiler_line)
def cmsRelvalreport.Profile._profile_igprof (   self)
private
IgProf profiler launcher.

Definition at line 328 of file cmsRelvalreport.py.

References runall.testit.command, cmsswPreprocessor.CmsswPreprocessor.command, WorkFlow.WorkFlowBlock.command, cmsRelvalreport.Profile.command, ConfigBuilder.ConfigBuilder.command, cmsRelvalreport.execute(), cmsRelvalreport.Profile.profile_name, and cmsRelvalreport.Profile.profiler.

Referenced by cmsRelvalreport.Profile.make_profile().

329  def _profile_igprof(self):
330  '''
331  IgProf profiler launcher.
332  '''
333  profiler_line=''
334 
335  igprof_options='igprof -d -t %s ' \
336  %EXECUTABLE # IgProf profile not general only for CMSRUN!
337 
338  # To handle Igprof memory and performance profiler in one function
339  if self.profiler=='IgProf_perf':
340  igprof_options+='-pp '
341  elif self.profiler=='IgProf_mem':
342  igprof_options+='-mp '
343  else:
344  raise 'Unknown IgProf flavour: %s !'
345  igprof_options+='-z -o %s' %(self.profile_name)
346 
347  # If we are using cmsDriver we should use the prefix switch
348  if EXECUTABLE=='cmsRun' and self.command.find('cmsDriver.py')!=-1:
349  profiler_line='%s --prefix "%s"' %(self.command,igprof_options)
350  else:
351  profiler_line='%s %s' %(igprof_options, self.command)
352 
353  return execute(profiler_line)
def cmsRelvalreport.Profile._profile_Memcheck_Valgrind (   self)
private
Valgrind Memcheck profile launcher

Definition at line 389 of file cmsRelvalreport.py.

References runall.testit.command, cmsswPreprocessor.CmsswPreprocessor.command, WorkFlow.WorkFlowBlock.command, cmsRelvalreport.Profile.command, ConfigBuilder.ConfigBuilder.command, cmsRelvalreport.execute(), and cmsRelvalreport.Profile.profile_name.

Referenced by cmsRelvalreport.Profile.make_profile().

390  def _profile_Memcheck_Valgrind(self):
391  '''
392  Valgrind Memcheck profile launcher
393  '''
394  profiler_line=''
395  #Adding cms suppression of useless messages (cmsvgsupp)
396  #Removing leak-checking (done with igprof)
397  #'--leak-check=no '+\ (no is the default)
398  #'--show-reachable=yes '+\
399  #'--track-fds=yes '
400  #Adding xml logging
401  xmlFileName = self.profile_name.replace(",","-")[:-4] + ".xml"
402  valgrind_options='time valgrind --track-origins=yes '+\
403  '--tool=memcheck `cmsvgsupp` '+\
404  '--num-callers=20 '+\
405  '--xml=yes '+\
406  '--xml-file=%s '%xmlFileName
407 
408  # If we are using cmsDriver we should use the prefix switch
409  if EXECUTABLE=='cmsRun' and self.command.find('cmsDriver.py')!=-1:
410  #Replacing 2>&1 |tee with >& in the shell command to preserve the return code significance:
411  # using tee return would be 0 even if the command failed before the pipe:
412  profiler_line='%s --prefix "%s" >& %s' %(self.command,valgrind_options,self.profile_name)
413 
414  else:
415  profiler_line='%s %s >& %s' %(valgrind_options,self.command,self.profile_name)
416  #'--trace-children=yes '+\
417  exec_status = execute(profiler_line)
418 
419  # compact the xml by removing the Leak_* errors
420  if not exec_status:
421  newFileName = xmlFileName.replace('valgrind.xml', 'vlgd.xml')
422  compactCmd = 'xsltproc --output %s %s/test/filterOutValgrindLeakErrors.xsl %s' %(newFileName, valperf, xmlFileName)
423  execute(compactCmd)
424 
return exec_status
def cmsRelvalreport.Profile._profile_None (   self)
private
Just Run the command!

Definition at line 456 of file cmsRelvalreport.py.

References runall.testit.command, cmsswPreprocessor.CmsswPreprocessor.command, WorkFlow.WorkFlowBlock.command, cmsRelvalreport.Profile.command, ConfigBuilder.ConfigBuilder.command, cmsRelvalreport.execute(), and cmsRelvalreport.Profile.make_report().

Referenced by cmsRelvalreport.Profile.make_profile().

457  def _profile_None(self):
458  '''
459  Just Run the command!
460  '''
461  return execute(self.command)
def cmsRelvalreport.Profile._profile_SimpleMem_Parser (   self)
private

Definition at line 432 of file cmsRelvalreport.py.

References cmsRelvalreport.Profile._save_output().

Referenced by cmsRelvalreport.Profile.make_profile().

433  def _profile_SimpleMem_Parser(self):
434  return self._save_output()
def cmsRelvalreport.Profile._profile_Timereport_Parser (   self)
private

Definition at line 427 of file cmsRelvalreport.py.

References cmsRelvalreport.Profile._save_output().

Referenced by cmsRelvalreport.Profile.make_profile().

428  def _profile_Timereport_Parser(self):
429  return self._save_output()
def cmsRelvalreport.Profile._profile_Timing_Parser (   self)
private

Definition at line 437 of file cmsRelvalreport.py.

References cmsRelvalreport.Profile._save_output().

Referenced by cmsRelvalreport.Profile.make_profile().

438  def _profile_Timing_Parser(self):
439  return self._save_output()
def cmsRelvalreport.Profile._profile_valgrindfce (   self)
private
Valgrind profile launcher.

Definition at line 305 of file cmsRelvalreport.py.

References runall.testit.command, cmsswPreprocessor.CmsswPreprocessor.command, WorkFlow.WorkFlowBlock.command, cmsRelvalreport.Profile.command, ConfigBuilder.ConfigBuilder.command, cmsRelvalreport.execute(), and cmsRelvalreport.Profile.profile_name.

Referenced by cmsRelvalreport.Profile.make_profile().

306  def _profile_valgrindfce(self):
307  '''
308  Valgrind profile launcher.
309  '''
310  # ValgrindFCE needs a special library to run
311  os.environ["VALGRIND_LIB"]=VFCE_LIB
312 
313  profiler_line=''
314  valgrind_options= 'time valgrind '+\
315  '--tool=callgrind '+\
316  '--fce=%s ' %(self.profile_name)
317 
318  # If we are using cmsDriver we should use the prefix switch
319  if EXECUTABLE=='cmsRun' and self.command.find('cmsDriver.py')!=-1:
320  profiler_line='%s --prefix "%s"' %(self.command,valgrind_options)
321 
322  else:
323  profiler_line='%s %s' %(valgrind_options,self.command)
324  #'--trace-children=yes '+\
325 
326  return execute(profiler_line)
def cmsRelvalreport.Profile._save_output (   self)
private
Save the output of cmsRun on a file!

Definition at line 442 of file cmsRelvalreport.py.

References runall.testit.command, cmsswPreprocessor.CmsswPreprocessor.command, WorkFlow.WorkFlowBlock.command, cmsRelvalreport.Profile.command, ConfigBuilder.ConfigBuilder.command, cmsRelvalreport.execute(), and cmsRelvalreport.Profile.profile_name.

Referenced by cmsRelvalreport.Profile._profile_SimpleMem_Parser(), cmsRelvalreport.Profile._profile_Timereport_Parser(), and cmsRelvalreport.Profile._profile_Timing_Parser().

443  def _save_output(self):
444  '''
445  Save the output of cmsRun on a file!
446  '''
447 # # a first maquillage about the profilename:
448 # if self.profile_name[-4:]!='.log':
449 # self.profile_name+='.log'
450  #Replacing 2>&1 |tee with >& in the shell command to preserve the return code significance:
451  # using tee return would be 0 even if the command failed before the pipe:
452  profiler_line='%s >& %s' %(self.command,self.profile_name)
453  return execute(profiler_line)
def cmsRelvalreport.Profile.make_profile (   self)
Launch the right function according to the profiler name.

Definition at line 280 of file cmsRelvalreport.py.

References cmsRelvalreport.Profile._profile_edmsize(), cmsRelvalreport.Profile._profile_igprof(), cmsRelvalreport.Profile._profile_Memcheck_Valgrind(), cmsRelvalreport.Profile._profile_None(), cmsRelvalreport.Profile._profile_SimpleMem_Parser(), cmsRelvalreport.Profile._profile_Timereport_Parser(), cmsRelvalreport.Profile._profile_Timing_Parser(), cmsRelvalreport.Profile._profile_valgrindfce(), and cmsRelvalreport.Profile.profiler.

281  def make_profile(self):
282  '''
283  Launch the right function according to the profiler name.
284  '''
285  if self.profiler=='ValgrindFCE':
286  return self._profile_valgrindfce()
287  elif self.profiler.find('IgProf')!=-1:
288  return self._profile_igprof()
289  elif self.profiler.find('Edm_Size')!=-1:
290  return self._profile_edmsize()
291  elif self.profiler=='Memcheck_Valgrind':
292  return self._profile_Memcheck_Valgrind()
293  elif self.profiler=='Timereport_Parser':
294  return self._profile_Timereport_Parser()
295  elif self.profiler=='Timing_Parser':
296  return self._profile_Timing_Parser()
297  elif self.profiler=='SimpleMem_Parser':
298  return self._profile_SimpleMem_Parser()
299  elif self.profiler=='':
300  return self._profile_None()
301  elif self.profiler=='None': #adding this for the case of candle ASCII file non-profiling commands
302  return self._profile_None()
303  else:
raise 'No %s profiler found!'
def cmsRelvalreport.Profile.make_report (   self,
  fill_db = False,
  db_name = None,
  tmp_dir = None,
  outdir = None,
  IgProf_option = None,
  metastring = None 
)
Make a performance report with CMSSW scripts for CMSSW internal profiling (Timing/SimpleMemoryCheck) and Memcheck, PR2 for edmEventSize and Callgrind (NOTE PR2 is not supported anymore and is not currently in the CMSSW external, running froma privat AFS!), igprof-analyse for all IgProf profiling.

Definition at line 470 of file cmsRelvalreport.py.

References cmsRelvalreport.execute(), alcazmumu_cfi.filter, cmsRelvalreport.Profile.profile_name, cmsRelvalreport.Profile.profiler, python.rootplot.root2matplotlib.replace(), and split.

Referenced by cmsRelvalreport.Profile._profile_None().

471  metastring=None):
472  '''
473  Make a performance report with CMSSW scripts for CMSSW internal profiling (Timing/SimpleMemoryCheck) and Memcheck, PR2 for edmEventSize and Callgrind (NOTE PR2 is not supported anymore and is not currently in the CMSSW external, running froma privat AFS!), igprof-analyse for all IgProf profiling.
474  '''
475 
476  if outdir==None or outdir==self.profile_name:
477  outdir=self.profile_name+'_outdir'
478 
479  #Create the directory where the report will be stored:
480  if not os.path.exists(outdir) and not fill_db and not IgProf_option:
481  #Added an IgProf condition to avoid the creation of a directory that we will not need anymore, since we will put all info in the filenames
482  execute('mkdir %s' %outdir)
483 
484  if fill_db:
485  db_option='-a'
486  if not os.path.exists(db_name):
487  db_option='-A'
488 
489  # temp in the local dir for PR
490  tmp_switch=''
491  if tmp_dir!='':
492  execute('mkdir %s' %tmp_dir)
493  tmp_switch=' -t %s' %tmp_dir
494 
495  #Handle the various profilers:
496 
497  #####################################################################
498 
499  # Profiler is ValgrindFCE:
500  if self.profiler=='ValgrindFCE':
501  perfreport_command=''
502  # Switch for filling the db
503  if not fill_db:
504  os.environ["PERFREPORT_PATH"]='%s/' %PERFREPORT2_PATH
505  perfreport_command='%s %s -ff -i %s -o %s' %(PR2,
506  tmp_switch,
507  self.profile_name,
508  outdir)
509  else:
510  os.environ["PERFREPORT_PATH"]='%s/' %PERFREPORT3_PATH
511  perfreport_command='%s %s -n5000 -u%s -ff -m \'scram_cmssw_version_string,%s\' -i %s %s -o %s' \
512  %(PR3,
513  tmp_switch,
514  PR3_PRODUCER_PLUGIN,
515  metastring,
516  self.profile_name,
517  db_option,
518  db_name)
519  return execute(perfreport_command)
520 
521  #####################################################################
522 
523  # Profiler is IgProf:
524  if self.profiler.find('IgProf')!=-1:
525  #First the case of IgProf PERF and MEM reporting:
526  if not 'ANALYSE' in IgProf_option:
527  #Switch to the use of igprof-analyse instead of PerfReport!
528  #Will use the ANALYSE case for regressions between early event dumps and late event dumps of the profiles
529  #Following Andreas suggestion, add the number of events for the EndOfJob report
530  NumberOfEvents=self.command.split()[3] #FIXME: this is quite hardcoded... but should be stable...
531  sqlite_outputfile=self.profile_name.split(".")[0].replace(IgProfProfiles[IgProf_option[0]],IgProf_option[0])+'___'+NumberOfEvents+'_EndOfJob.sql3'
532  logger("Executing the report of the IgProf end of job profile")
533  exit=execute('igprof-analyse --sqlite -d -v -g -r %s %s | sqlite3 %s'%(IgProf_option[0],self.profile_name,sqlite_outputfile))
534  return exit
535  #Then the "ANALYSE" case that we want to use to add to the same directories (Perf, MemTotal, MemLive)
536  #also some other analyses and in particular:
537  #1-the first 7 lines of the ASCII analysis of the IgProf profile dumps (total of the counters)
538  #2-the dump at different event numbers,
539  #3-the diff between the first and last dump,
540  #4-the counters grouped by library using regexp at the last dump:
541  else: #We use IgProf Analysis
542  #Set the IgProfCounter from the ANALYSE.MEM_TOT style IgProf_option
543  #print IgProf_option
544  IgProfCounter=IgProf_option[1]
545  #Add here the handling of the new IgProf.N.gz files so that they will get preserved and not overwritten:
546  logger("Looking for IgProf intermediate event profile dumps")
547  #Check if there are IgProf.N.gz dump files:
548  IgProfDumps=glob.glob("IgProf.*.gz")
549  #in case there are none check if they have already been mv'd to another name to avoid overwriting
550  #(MEM_LIVE usually re-uses MEM_TOTAL, so the IgProf.N.gz files will already have a MemTotal name...)
551  if not IgProfDumps:
552  localFiles=os.listdir('.')
553  IgProfDumpProfilesPrevious=re.compile(r"\w+.\d+.gz")
554  IgProfDumps=filter(lambda x: IgProfDumpProfilesPrevious.search(x),localFiles)
555  #Now if there are dumps execute the following analyses:
556  if IgProfDumps:
557  IgProfDumps.sort()
558  logger("Found the following IgProf intermediate event profile dumps:")
559  logger(IgProfDumps)
560  FirstDumpEvent=9999999
561  LastDumpEvent=0
562  exit=0
563  for dump in IgProfDumps:
564  if "___" in dump:
565  DumpEvent=dump.split(".")[0].split("___")[-1]
566  else:
567  DumpEvent=dump.split(".")[1]
568  #New naming convention using ___ as separator
569  DumpedProfileName=self.profile_name[:-3]+"___"+DumpEvent+".gz"
570  if dump.startswith("IgProf"):
571  execute('mv %s %s'%(dump,DumpedProfileName))
572  #Keep a tab of the first and last dump event for the diff analysis
573  if int(DumpEvent) < FirstDumpEvent:
574  FirstDumpEvent = int(DumpEvent)
575  if int(DumpEvent) > LastDumpEvent:
576  LastDumpEvent = int(DumpEvent)
577  #Eliminating the ASCII analysis to get the totals, Giulio will provide this information in igprof-navigator with a special query
578  #First type of analysis: dump first 7 lines of ASCII analysis:
579  #logger("Executing the igprof-analyse analysis to dump the ASCII 7 lines output with the totals for the IgProf counter")
580  #exit=execute('%s -o%s -i%s -t%s' %(IGPROFANALYS,outdir,DumpedProfileName,"ASCII"))
581  #Second type of analysis: dump the report in sqlite format to be ready to be browsed with igprof-navigator
582  logger("Executing the igprof-analyse analysis saving into igprof-navigator browseable SQLite3 format")
583  #exit=exit+execute('%s -o%s -i%s -t%s' %(IGPROFANALYS,outdir,DumpedProfileName,"SQLite3"))
584  #Execute all types of analyses available with the current profile (using the dictionary IgProfProfile):
585  #To avoid this we should use a further input in SimulationCandles.txt IgProfMem.ANALYSE.MEM_TOTAL maybe the cleanest solution.
586  #for IgProfile in IgProfCounters.keys():
587  # if DumpedProfileName.find(IgProfile)>0:
588  # for counter in IgProfCounters[IgProfile]:
589  #Check that the file does not exist:
590  #if not os.path.exists(DumpedProfileName.split(".")[0].replace(IgProfProfiles[counter],counter)+".sql3"):
591  exit=exit+execute('%s -c%s -i%s -t%s' %(IGPROFANALYS,IgProfCounter,DumpedProfileName,"SQLite3"))
592  #else:
593  # print "File %s already exists will not process profile"%DumpedProfileName.split(".")[0].replace(IgProfProfiles[counter],counter)+".sql3"
594  #FIXME:
595  #Issue with multiple profiles in the same dir: assuming Perf and Mem will always be in separate dirs
596  #Potential ssue with multiple steps?
597  #Adapting to new igprof naming scheme:
598  FirstDumpProfile=self.profile_name[:-3]+"___"+str(FirstDumpEvent)+".gz"
599  LastDumpProfile=self.profile_name[:-3]+"___"+str(LastDumpEvent)+".gz"
600  #Third type of analysis: execute the diff analysis:
601  #Check there are at least 2 IgProf intermediate event dump profiles to do a regression!
602  if len(IgProfDumps)>1:
603  logger("Executing the igprof-analyse regression between the first IgProf profile dump and the last one")
604  #for IgProfile in IgProfCounters.keys():
605  # if DumpedProfileName.find(IgProfile)>0:
606  # IgProfCounter=IgProfCounters[IgProfile]
607  exit=exit+execute('%s -c%s -i%s -r%s' %(IGPROFANALYS,IgProfCounter,LastDumpProfile,FirstDumpProfile))
608  else:
609  logger("CANNOT execute any regressions: not enough IgProf intermediate event profile dumps!")
610  #Fourth type of analysis: execute the grouped by library igprof-analyse:
611  logger("Executing the igprof-analyse analysis merging the results by library via regexp and saving the result in igprof-navigator browseable SQLite3 format")
612  #for IgProfile in IgProfCounters.keys():
613  # if DumpedProfileName.find(IgProfile)>0:
614  # IgProfCounter=IgProfCounters[IgProfile]
615  exit=exit+execute('%s -c%s -i%s --library' %(IGPROFANALYS,IgProfCounter,LastDumpProfile))
616  #If they are not there at all (no dumps)
617  else:
618  logger("No IgProf intermediate event profile dumps found!")
619  exit=0
620 
621  return exit
622 
623 
624  #####################################################################
625 
626  # Profiler is EdmSize:
627  if 'Edm_Size' in self.profiler:
628  perfreport_command=''
629  if not fill_db:
630  os.environ["PERFREPORT_PATH"]='%s/' \
631  %PERFREPORT2_PATH
632  perfreport_command='%s %s -fe -i %s -o %s' \
633  %(PR2,
634  tmp_switch,
635  self.profile_name,
636  outdir)
637  else:
638  os.environ["PERFREPORT_PATH"]='%s/' \
639  %PERFREPORT3_PATH
640  perfreport_command='%s %s -n5000 -u%s -fe -i %s -a -o %s' \
641  %(PR3,
642  tmp_switch,
643  PR3_PRODUCER_PLUGIN,
644  self.profile_name,
645  db_name)
646 
647  return execute(perfreport_command)
648 
649  #FIXME: probably need to move this somewhere else now that we use return statements
650  if tmp_dir!='':
651  execute('rm -r %s' %tmp_dir)
652 
653  #####################################################################
654 
655  # Profiler is Valgrind Memcheck
656  if self.profiler=='Memcheck_Valgrind':
657  # Three pages will be produced:
658  os.environ['PERL5LIB']=PERL5_LIB
659  report_coordinates=(VMPARSER,self.profile_name,outdir)
660  # Copy the Valgrind Memcheck parser style file in the outdir
661  copyStyleFile='cp -pR %s %s'%(VMPARSERSTYLE,outdir)
662  execute(copyStyleFile)
663  report_commands=('%s --preset +prod,-prod1 %s > %s/edproduce.html'\
664  %report_coordinates,
665  '%s --preset +prod1 %s > %s/esproduce.html'\
666  %report_coordinates,
667  '%s -t beginJob %s > %s/beginjob.html'\
668  %report_coordinates)
669  exit=0
670  for command in report_commands:
671  exit= exit + execute(command)
672  return exit
673  #####################################################################
674 
675  # Profiler is TimeReport parser
676 
677  if self.profiler=='Timereport_Parser':
678  return execute('%s %s %s' %(TIMEREPORTPARSER,self.profile_name,outdir))
679 
680  #####################################################################
681 
682  # Profiler is Timing Parser
683 
684  if self.profiler=='Timing_Parser':
685  return execute('%s -i %s -o %s' %(TIMINGPARSER,self.profile_name,outdir))
686 
687 
688  #####################################################################
689 
690  # Profiler is Simple memory parser
691 
692  if self.profiler=='SimpleMem_Parser':
693  return execute('%s -i %s -o %s' %(SIMPLEMEMPARSER,self.profile_name,outdir))
694 
695  #####################################################################
696 
697  # no profiler
698 
699  if self.profiler=='' or self.profiler=='None': #Need to catch the None case, since otherwise we get no return code (crash for pre-requisite step running).
700  return 0 #Used to be pass, but we need a return 0 to handle exit code properly!
Definition: logger.py:1
double split
Definition: MVATrainer.cc:139

Member Data Documentation

cmsRelvalreport.Profile.command

Definition at line 274 of file cmsRelvalreport.py.

Referenced by cmsRelvalreport.Profile._profile_edmsize(), cmsRelvalreport.Profile._profile_igprof(), cmsRelvalreport.Profile._profile_Memcheck_Valgrind(), cmsRelvalreport.Profile._profile_None(), cmsRelvalreport.Profile._profile_valgrindfce(), and cmsRelvalreport.Profile._save_output().

cmsRelvalreport.Profile.profile_name

Definition at line 275 of file cmsRelvalreport.py.

Referenced by cmsRelvalreport.Profile._profile_edmsize(), cmsRelvalreport.Profile._profile_igprof(), cmsRelvalreport.Profile._profile_Memcheck_Valgrind(), cmsRelvalreport.Profile._profile_valgrindfce(), cmsRelvalreport.Profile._save_output(), and cmsRelvalreport.Profile.make_report().

cmsRelvalreport.Profile.profiler

Definition at line 276 of file cmsRelvalreport.py.

Referenced by cmsRelvalreport.Profile._profile_edmsize(), cmsRelvalreport.Profile._profile_igprof(), cmsRelvalreport.Profile.make_profile(), and cmsRelvalreport.Profile.make_report().