/**
*
*/
package com.mobilesorcery.sdk.profiling.ui.views;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Locale;
import org.eclipse.jface.viewers.ITableColorProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.TreeColumn;
import com.mobilesorcery.sdk.profiling.IInvocation;
import com.mobilesorcery.sdk.profiling.IProfilingSession;
class ProfilingLabelProvider extends LabelProvider implements ITableLabelProvider, ITableColorProvider {
public static final String FUNCTION_COL = "fn";
public static final String CALLS_COL = "c";
public static final String SELF_TIME_COL = "st";
public static final String SELF_TIME_PERC_COL = "stp";
public static final String AGG_TIME_COL = "at";
public static final String PERCENTAGE_TIME_COL = "pt";
//private final static NumberFormat NUMBER_FORMAT_MS = new DecimalFormat("###,###,##0.000", DecimalFormatSymbols.getInstance(Locale.US));
private final static NumberFormat NUMBER_FORMAT_US = new DecimalFormat("###,###,##0", DecimalFormatSymbols.getInstance(Locale.US));
private HashMap<Integer, Object> columns = new HashMap<Integer, Object>();
private IProfilingSession session;
public ProfilingLabelProvider() {
}
public String getColumnText(Object obj, int index) {
IInvocation invocation = (IInvocation) obj;
Object column = columns.get(index);
if (SELF_TIME_COL == column) {
return formatTime(invocation.getSelfTime());
} else if (CALLS_COL == column) {
return "" + invocation.getCount();
} else if (AGG_TIME_COL == column) {
return formatTime(invocation.getAggregateTime());
}
return getText(obj);
}
public Image getColumnImage(Object element, int ix) {
return null;
}
private String formatTime(float timeInMs) {
return NUMBER_FORMAT_US.format(1000 * timeInMs) + " \u00B5s";
}
public void setColumns(TreeColumn[] columns) {
for (int i = 0; i < columns.length; i++) {
this.columns.put(i, columns[i].getData());
}
}
public Color getBackground(Object obj, int ix) {
return null;
}
public Color getForeground(Object obj, int ix) {
return session.getFilter().accept((IInvocation) obj) ? null : Display.getCurrent().getSystemColor(SWT.COLOR_GRAY);
}
public void setSession(IProfilingSession session) {
this.session = session;
}
}