Calltree
=========

	* rec separation for ELF objects, files, C++ classes ?

	* user supplied cost (corrections) with arbitrary cost types
	  - as user request
	  - as config option

	* trace followed conditionals   DONE
	  Should trace normal jumps, too!

	* Dump info for skipped functions

	* Add to header:
		- current Calltree options ("desc: Option:" )  DONE
		- ELF mapping info ("desc: Mapping:")
		- thread number if separate ("thread:")  DONE
		- part number  DONE
		- PID number DONE
		- trigger line moved ("desc: Trigger:")   DONE

	* Symbol length arbitrary       HALF DONE: extended to 4096

	* Cache simulation optional     DONE. optimizations ?

	* Config options per function   DONE using prefix tree.

	* Bugs
          - For signal handlers, there's no "event counters at last dump".

	  - Multithreaded progs with --dump-threads=no:
            Function active counter is NOT per thread!   DONE
	  - Rec.level independent from caller   DONE
	  - Multithreading (dump-threads)       DONE
	  - Skipped functions!                  DONE
	  - Redirect JCC for skipped functions to get the calls
	    in the annotated source             DONE
	  - cachegrind.out in cwd at program start
            WORKAROUND with --base option (no cwd() available)
	    DONE in Valgrind CVS HEAD

KCachegrind
===========

 Bugs:

	* Search breaks at start (see below: 1)
	* File/Open... always gives empty window (see below: 3)
	* Reload prints "Recursion detected", virtual cost types lost
	* Remove class name from Cycles (see below: 2)
	* Make "Parameter Removal" optional:
	  Wrong for overloaded methods, but only one called (which one??!?)

 Wish

	* Context menu for ListView items: "Back"
	* "Copy" for ListViews: Plain Text into Clipboard
	* DnD for functions
	* DnD for TreeMap
	* Panel Focus
	* Config for cost corrections
	* Add/Diff Mode
	* Show real cost splitting of virtual cost in pixmap


 Done
	
	* Call Count Column in Flat Profile
	* Cycle Detection optionally	


 Support for Cachegrind 0.3

	* Loader: "bb=<address>": Specify address of next basic block
          This changes semantic of first number of cost line to addr offset
	* Loader: "ln=<line>": Specify source line for next cost lines
          This is needed when "bb=" is used
	* Invoke "objdump" for assembler annotations
	* Group recursive invocations of same function (postfix "/<number>")
	* Group invocations of same functions with different caller
          Postfix: "/<caller>"
	* Dock with BBs in the context of different functions
	* Window with loader info: Key/Value list for loaded parts

      [ * Loader: "mp=<start> <size> <offset> <object name>" ]


Footnotes:

1) Search breaks at start

Wrong group type set: Patch for "bool TopLevel::setGroupType(QString s)"

   gt = (_data) ? _data->costType(s) : TraceData::costType(s);

+  // only allow Function/Object/File/Class as grouptype
+  switch(gt) {
+  case TraceCost::Object:
+  case TraceCost::File:
+  case TraceCost::Class:
+    break;
+  default:
+    gt = TraceCost::Function;
+  }

   return setGroupType(gt);
 }



2) No Class names on cycles:

In TraceFunction::prettyName():

+  // cycle members
+  if (_cycle) {
+    if (_cycle != this)
+      res = QString("%1 <cycle %2>").arg(res).arg(_cycle->cycleNo());
+    else
+      res = QString("<cycle %2>").arg(_cycle->cycleNo());
+  }


3) Load only opens empty window

In TopLevel::loadTrace(QString file):

     // In new window
+    TopLevel* t = new TopLevel();
     t->show();
+    t->loadDelayed(file);
