<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
	$pageTitle 		= "Linux Tools - Function Callgraph";
	$pageKeywords	= "linux, eclipse, downloads";
	$pageAuthor		= "Charley Wang";

	# Paste your HTML content between the EOHTML markers!
	$html = <<<EOHTML

<div id="midcolumn">
		<h1>Linux Tools Project - Function Callgraph</h1>

		<div>
		<h2>Overview</h2>
		<p>The Linux Tools Project Function Callgraph plugin aims to provide an easy-to-use tool for C/C++ function and timing visualization.
		The Callgraph plugin uses the powerful SystemTap language as a back-end, allowing it to monitor the status of a program -- function
		calls, returns, times and even user-space variables. The resulting data is displayed using Zest to create a visually pleasing graph
		of your entire program, or whatever parts of it you suggest. The graph shows timing information, and can be used for optimization.
		<br/>
		In Aggregate Mode, you can see a grid of all functions used in your program, coloured and sized according to the number of calls 
		and the amount of time taken by each function. If you hold ctrl and double-click on a function, you will be taken to the point in 
		code where that function was defined.  
		</p>
		</div>
		<br/>

		<div>
		<h2>Extensibility</h2>
		<ul>
			<li>With the Eclipse-Callgraph projects installed, you can create a a new launch for any kind of project by extending a single class: SystemTapLaunchShortcut.</li>
    		<li>The only function that needs to be defined is the setScriptPath variable -- your script will automatically select a text parser and viewer by default.</li>
    		<li>By setting parameters in your Launch class, you can modify many of the parameters in the resulting command-line call to SystemTap. You can even change the STAP_PATH to use a different command-line tool altogether!</li>
		</ul>
		</div>
		
		<br/>
		<div>
		<h2>Future Plans</h2>
		<ul>
			<li>Integrate with SystemTapGUI for server-based launching and more graphing options.</li>
       	</ul>
		</div>
		<br/>

		<div>
		<h2>Try it out</h2>
		 Please use our update site as described <a href="http://wiki.eclipse.org/Linux_Tools_Project/PluginInstallHelp">here</a>. <br/>
		 You can also check the project plugins out of Git directly from eclipse.org at git://git.eclipse.org/gitroot/linuxtools/org.eclipse.linuxtools.git.
		</div>
		<br/><br/>
		<h2>Screenshots</h2>
			<h4>Callgraph rendering of a binary, TreeView</h4>
		    <img src="../../new/0.4/images-0.4/callgraph.png" alt="Tree view screenshot"/>
			<h4>Callgraph rendering of a binary, Aggregate View</h4>
		    <img src="../../new/0.4/images-0.4/callgraph-link.png" alt="Aggregate view screenshot"/>
	</div>
EOHTML;


	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
