package rocks.inspectit.ui.rcp.details.generator.impl;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.all.communication.IAggregatedData;
import rocks.inspectit.shared.all.communication.data.InvocationSequenceData;
import rocks.inspectit.shared.all.communication.data.TimerData;
import rocks.inspectit.ui.rcp.details.DetailsCellContent;
import rocks.inspectit.ui.rcp.details.DetailsTable;
import rocks.inspectit.ui.rcp.details.generator.IDetailsGenerator;
import rocks.inspectit.ui.rcp.formatter.NumberFormatter;
import rocks.inspectit.ui.rcp.repository.RepositoryDefinition;
/**
* Generator that displays the duration info from the {@link TimerData} and it's subclasses.
*
* @author Ivan Senic
*
*/
public class DurationDetailsGenerator implements IDetailsGenerator {
/**
* {@inheritDoc}
* <p>
* Display for non-aggregated {@link TimerData} or {@link InvocationSequenceData}.
*/
@Override
public boolean canGenerateFor(DefaultData defaultData) {
return (defaultData instanceof TimerData) && !(defaultData instanceof IAggregatedData);
}
/**
* {@inheritDoc}
*/
@Override
public DetailsTable generate(DefaultData defaultData, RepositoryDefinition repositoryDefinition, Composite parent, FormToolkit toolkit) {
TimerData timerData = (TimerData) defaultData;
DetailsTable table = new DetailsTable(parent, toolkit, "Duration Info", 1);
// then the total duration
DetailsCellContent[] total = new DetailsCellContent[] { new DetailsCellContent(NumberFormatter.formatDouble(timerData.getDuration())) };
table.addContentRow("Total (ms):", null, total);
if (timerData.isCpuMetricDataAvailable()) {
// then the total duration
DetailsCellContent[] cpu = new DetailsCellContent[] { new DetailsCellContent(NumberFormatter.formatDouble(timerData.getCpuDuration())) };
table.addContentRow("CPU (ms):", null, cpu);
}
if (timerData.isExclusiveTimeDataAvailable()) {
// then the exclusive
DetailsCellContent[] exclusive = new DetailsCellContent[] { new DetailsCellContent(NumberFormatter.formatDouble(timerData.getExclusiveDuration())) };
table.addContentRow("Exclusive (ms):", null, exclusive);
}
return table;
}
}