/*******************************************************************************
* Copyright (c) 2009 STMicroelectronics.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Xavier Raynaud <xavier.raynaud@st.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.gprof.view.histogram;
import java.util.LinkedList;
import org.eclipse.cdt.core.IBinaryParser.IBinaryObject;
import org.eclipse.cdt.core.IBinaryParser.ISymbol;
import org.eclipse.core.resources.IProject;
import org.eclipse.linuxtools.internal.gprof.Messages;
import org.eclipse.linuxtools.internal.gprof.parser.GmonDecoder;
import org.eclipse.linuxtools.internal.gprof.symbolManager.Bucket;
import org.eclipse.linuxtools.internal.gprof.symbolManager.CallGraphNode;
/**
* Root node of histogram
*
* @author Xavier Raynaud <xavier.raynaud@st.com>
*/
public class HistRoot extends AbstractTreeElement {
private final LinkedList<HistFile> children = new LinkedList<>();
/** The decoded gmon to display */
public final GmonDecoder decoder;
/**
* Constructor
* @param decoder
*/
public HistRoot(GmonDecoder decoder) {
super(null);
this.decoder = decoder;
}
private HistFile getChild(String p) {
for (HistFile f : this.children) {
if (p != null) {
if (p.equals(f.sourcePath)) {
return f;
}
} else if (f.sourcePath == null) {
return f;
}
}
HistFile f = new HistFile(this, p);
this.children.add(f);
return f;
}
/**
* Add a bucket to the tree representation of the gmon file
* @param b a bucket
* @param s a symbol (the bucket belong to this symbol)
* @param program the program
*/
public void addBucket(Bucket b, ISymbol s, IBinaryObject program) {
String path = decoder.getFileName(s);
HistFile hf = getChild(path);
hf.addBucket(b, s, program);
}
/**
* Add a callgraph node to the tree representation of the gmon file
* @param node
*/
public void addCallGraphNode(CallGraphNode node) {
ISymbol s = node.getSymbol();
String path = decoder.getFileName(s);
HistFile hf = getChild(path);
hf.addCallGraphNode(node);
}
@Override
public LinkedList<? extends TreeElement> getChildren() {
return this.children;
}
@Override
public String getName() {
return Messages.HistRoot_Summary;
}
@Override
public int getCalls() {
return -1;
}
public IProject getProject() {
return decoder.getProject();
}
}