packages feed

hs-mesos-0.20.0.0: ext/types/performance_statistics.cpp

#include <iostream>
#include "types.h"

using namespace mesos;

PerfStatisticsPtr toPerfStatistics(
	double timestamp,
	double duration,
	unsigned long* cycles,
	unsigned long* stalledCyclesFrontend,
	unsigned long* stalledCyclesBackend,
	unsigned long* instructions,
	unsigned long* cacheReferences,
	unsigned long* cacheMisses,
	unsigned long* branches,
	unsigned long* branchMisses,
	unsigned long* busCycles,
	unsigned long* refCycles,
	double* cpuClock,
	double* taskClock,
	unsigned long* pageFaults,
	unsigned long* minorFaults,
	unsigned long* majorFaults,
	unsigned long* contextSwitches,
	unsigned long* cpuMigrations,
	unsigned long* alignmentFaults,
	unsigned long* emulationFaults,
	unsigned long* l1DcacheLoads,
	unsigned long* l1DcacheLoadMisses,
	unsigned long* l1DcacheStores,
	unsigned long* l1DcacheStoreMisses,
	unsigned long* l1DcachePrefetches,
	unsigned long* l1DcachePrefetchMisses,
	unsigned long* l1IcacheLoads,
	unsigned long* l1IcacheLoadMisses,
	unsigned long* l1IcachePrefetches,
	unsigned long* l1IcachePrefetchMisses,
	unsigned long* llcLoads,
	unsigned long* llcLoadMisses,
	unsigned long* llcStores,
	unsigned long* llcStoreMisses,
	unsigned long* llcPrefetches,
	unsigned long* llcPrefetchMisses,
	unsigned long* dtlbLoads,
	unsigned long* dtlbLoadMisses,
	unsigned long* dtlbStores,
	unsigned long* dtlbStoreMisses,
	unsigned long* dtlbPrefetches,
	unsigned long* dtlbPrefetchMisses,
	unsigned long* itlbLoads,
	unsigned long* itlbLoadMisses,
	unsigned long* branchLoads,
	unsigned long* branchLoadMisses,
	unsigned long* nodeLoads,
	unsigned long* nodeLoadMisses,
	unsigned long* nodeStores,
	unsigned long* nodeStoreMisses,
	unsigned long* nodePrefetches,
	unsigned long* nodePrefetchMisses
	)
{
	PerfStatisticsPtr perf = new PerfStatistics();
    
	perf->set_timestamp(timestamp);
	perf->set_duration(duration);

	if (cycles != NULL)
	{
		perf->set_cycles(*cycles);
	}

	if (stalledCyclesFrontend != NULL)
	{
		perf->set_stalled_cycles_frontend(*stalledCyclesFrontend);
	}

	if (stalledCyclesBackend != NULL)
	{
		perf->set_stalled_cycles_backend(*stalledCyclesBackend);
	}

	if (instructions != NULL)
	{
		perf->set_instructions(*instructions);
	}

	if (cacheReferences != NULL)
	{
		perf->set_cache_references(*cacheReferences);
	}

	if (cacheMisses != NULL)
	{
		perf->set_cache_misses(*cacheMisses);
	}

	if (branches != NULL)
	{
		perf->set_branches(*branches);
	}

	if (branchMisses != NULL)
	{
		perf->set_branch_misses(*branchMisses);
	}

	if (busCycles != NULL)
	{
		perf->set_bus_cycles(*busCycles);
	}

	if (refCycles != NULL)
	{
		perf->set_ref_cycles(*refCycles);
	}

	if (cpuClock != NULL)
	{
		perf->set_cpu_clock(*cpuClock);
	}

	if (taskClock != NULL)
	{
		perf->set_task_clock(*taskClock);
	}

	if (pageFaults != NULL)
	{
		perf->set_page_faults(*pageFaults);
	}

	if (minorFaults != NULL)
	{
		perf->set_minor_faults(*minorFaults);
	}

	if (majorFaults != NULL)
	{
		perf->set_major_faults(*majorFaults);
	}

	if (contextSwitches != NULL)
	{
		perf->set_context_switches(*contextSwitches);
	}

	if (cpuMigrations != NULL)
	{
		perf->set_cpu_migrations(*cpuMigrations);
	}

	if (alignmentFaults != NULL)
	{
		perf->set_alignment_faults(*alignmentFaults);
	}

	if (emulationFaults != NULL)
	{
		perf->set_emulation_faults(*emulationFaults);
	}

	if (l1DcacheLoads != NULL)
	{
		perf->set_l1_dcache_loads(*l1DcacheLoads);
	}

	if (l1DcacheLoadMisses != NULL)
	{
		perf->set_l1_dcache_load_misses(*l1DcacheLoadMisses);
	}

	if (l1DcacheStores != NULL)
	{
		perf->set_l1_dcache_stores(*l1DcacheStores);
	}

	if (l1DcacheStoreMisses != NULL)
	{
		perf->set_l1_dcache_store_misses(*l1DcacheStoreMisses);
	}

	if (l1DcachePrefetches != NULL)
	{
		perf->set_l1_dcache_prefetches(*l1DcachePrefetches);
	}

	if (l1DcachePrefetchMisses != NULL)
	{
		perf->set_l1_dcache_prefetch_misses(*l1DcachePrefetchMisses);
	}

	if (l1IcacheLoads != NULL)
	{
		perf->set_l1_icache_loads(*l1IcacheLoads);
	}

	if (l1IcacheLoadMisses != NULL)
	{
		perf->set_l1_icache_load_misses(*l1IcacheLoadMisses);
	}

	if (l1IcachePrefetches != NULL)
	{
		perf->set_l1_icache_prefetches(*l1IcachePrefetches);
	}

	if (l1IcachePrefetchMisses != NULL)
	{
		perf->set_l1_icache_prefetch_misses(*l1IcachePrefetchMisses);
	}

	if (llcLoads != NULL)
	{
		perf->set_llc_loads(*llcLoads);
	}

	if (llcLoadMisses != NULL)
	{
		perf->set_llc_load_misses(*llcLoadMisses);
	}

	if (llcStores != NULL)
	{
		perf->set_llc_stores(*llcStores);
	}

	if (llcStoreMisses != NULL)
	{
		perf->set_llc_store_misses(*llcStoreMisses);
	}

	if (llcPrefetches != NULL)
	{
		perf->set_llc_prefetches(*llcPrefetches);
	}

	if (llcPrefetchMisses != NULL)
	{
		perf->set_llc_prefetch_misses(*llcPrefetchMisses);
	}

	if (dtlbLoads != NULL)
	{
		perf->set_dtlb_loads(*dtlbLoads);
	}

	if (dtlbLoadMisses != NULL)
	{
		perf->set_dtlb_load_misses(*dtlbLoadMisses);
	}

	if (dtlbStores != NULL)
	{
		perf->set_dtlb_stores(*dtlbStores);
	}

	if (dtlbStoreMisses != NULL)
	{
		perf->set_dtlb_store_misses(*dtlbStoreMisses);
	}

	if (dtlbPrefetches != NULL)
	{
		perf->set_dtlb_prefetches(*dtlbPrefetches);
	}

	if (dtlbPrefetchMisses != NULL)
	{
		perf->set_dtlb_prefetch_misses(*dtlbPrefetchMisses);
	}

	if (itlbLoads != NULL)
	{
		perf->set_itlb_loads(*itlbLoads);
	}

	if (itlbLoadMisses != NULL)
	{
		perf->set_itlb_load_misses(*itlbLoadMisses);
	}

	if (branchLoads != NULL)
	{
		perf->set_branch_loads(*branchLoads);
	}

	if (branchLoadMisses != NULL)
	{
		perf->set_branch_load_misses(*branchLoadMisses);
	}

	if (nodeLoads != NULL)
	{
		perf->set_node_loads(*nodeLoads);
	}

	if (nodeLoadMisses != NULL)
	{
		perf->set_node_load_misses(*nodeLoadMisses);
	}

	if (nodeStores != NULL)
	{
		perf->set_node_stores(*nodeStores);
	}

	if (nodeStoreMisses != NULL)
	{
		perf->set_node_store_misses(*nodeStoreMisses);
	}

	if (nodePrefetches != NULL)
	{
		perf->set_node_prefetches(*nodePrefetches);
	}

	if (nodePrefetchMisses != NULL)
	{
		perf->set_node_prefetch_misses(*nodePrefetchMisses);
	}

	return perf;
}

void fromPerfStatistics(PerfStatisticsPtr perf,
	double* timestamp,
	double* duration,
	unsigned long* cycles,
	bool* cyclesSet,
	unsigned long* stalledCyclesFrontend,
	bool* stalledCyclesFrontendSet,
	unsigned long* stalledCyclesBackend,
	bool* stalledCyclesBackendSet,
	unsigned long* instructions,
	bool* instructionsSet,
	unsigned long* cacheReferences,
	bool* cacheReferencesSet,
	unsigned long* cacheMisses,
	bool* cacheMissesSet,
	unsigned long* branches,
	bool* branchesSet,
	unsigned long* branchMisses,
	bool* branchMissesSet,
	unsigned long* busCycles,
	bool* busCyclesSet,
	unsigned long* refCycles,
	bool* refCyclesSet,
	double* cpuClock,
	bool* cpuClockSet,
	double* taskClock,
	bool* taskClockSet,
	unsigned long* pageFaults,
	bool* pageFaultsSet,
	unsigned long* minorFaults,
	bool* minorFaultsSet,
	unsigned long* majorFaults,
	bool* majorFaultsSet,
	unsigned long* contextSwitches,
	bool* contextSwitchesSet,
	unsigned long* cpuMigrations,
	bool* cpuMigrationsSet,
	unsigned long* alignmentFaults,
	bool* alignmentFaultsSet,
	unsigned long* emulationFaults,
	bool* emulationFaultsSet,
	unsigned long* l1DcacheLoads,
	bool* l1DcacheLoadsSet,
	unsigned long* l1DcacheLoadMisses,
	bool* l1DcacheLoadMissesSet,
	unsigned long* l1DcacheStores,
	bool* l1DcacheStoresSet,
	unsigned long* l1DcacheStoreMisses,
	bool* l1DcacheStoreMissesSet,
	unsigned long* l1DcachePrefetches,
	bool* l1DcachePrefetchesSet,
	unsigned long* l1DcachePrefetchMisses,
	bool* l1DcachePrefetchMissesSet,
	unsigned long* l1IcacheLoads,
	bool* l1IcacheLoadsSet,
	unsigned long* l1IcacheLoadMisses,
	bool* l1IcacheLoadMissesSet,
	unsigned long* l1IcachePrefetches,
	bool* l1IcachePrefetchesSet,
	unsigned long* l1IcachePrefetchMisses,
	bool* l1IcachePrefetchMissesSet,
	unsigned long* llcLoads,
	bool* llcLoadsSet,
	unsigned long* llcLoadMisses,
	bool* llcLoadMissesSet,
	unsigned long* llcStores,
	bool* llcStoresSet,
	unsigned long* llcStoreMisses,
	bool* llcStoreMissesSet,
	unsigned long* llcPrefetches,
	bool* llcPrefetchesSet,
	unsigned long* llcPrefetchMisses,
	bool* llcPrefetchMissesSet,
	unsigned long* dtlbLoads,
	bool* dtlbLoadsSet,
	unsigned long* dtlbLoadMisses,
	bool* dtlbLoadMissesSet,
	unsigned long* dtlbStores,
	bool* dtlbStoresSet,
	unsigned long* dtlbStoreMisses,
	bool* dtlbStoreMissesSet,
	unsigned long* dtlbPrefetches,
	bool* dtlbPrefetchesSet,
	unsigned long* dtlbPrefetchMisses,
	bool* dtlbPrefetchMissesSet,
	unsigned long* itlbLoads,
	bool* itlbLoadsSet,
	unsigned long* itlbLoadMisses,
	bool* itlbLoadMissesSet,
			unsigned long* branchLoads,
			bool* branchLoadsSet,
			unsigned long* branchLoadMisses,
			bool* branchLoadMissesSet,
			unsigned long* nodeLoads,
			bool* nodeLoadsSet,
			unsigned long* nodeLoadMisses,
			bool* nodeLoadMissesSet,
			unsigned long* nodeStores,
			bool* nodeStoresSet,
			unsigned long* nodeStoreMisses,
			bool* nodeStoreMissesSet,
			unsigned long* nodePrefetches,
			bool* nodePrefetchesSet,
			unsigned long* nodePrefetchMisses,
			bool* nodePrefetchMissesSet)
{
	*timestamp = perf->timestamp();
	*duration = perf->duration();

	if (perf->has_cycles())
	{
		*cyclesSet = true;
		*cycles = perf->cycles();
	}

	if (perf->has_stalled_cycles_frontend())
	{
		*stalledCyclesFrontendSet = true;
		*stalledCyclesFrontend = perf->stalled_cycles_frontend();
	}

	if (perf->has_stalled_cycles_backend())
	{
		*stalledCyclesBackendSet = true;
		*stalledCyclesBackend = perf->stalled_cycles_backend();
	}

	if (perf->has_instructions())
	{
		*instructionsSet = true;
		*instructions = perf->instructions();
	}

	if (perf->has_cache_references())
	{
		*cacheReferencesSet = true;
		*cacheReferences = perf->cache_references();
	}

	if (perf->has_cache_misses())
	{
		*cacheMissesSet = true;
		*cacheMisses = perf->cache_misses();
	}

	if (perf->has_branches())
	{
		*branchesSet = true;
		*branches = perf->branches();
	}

	if (perf->has_branch_misses())
	{
		*branchMissesSet = true;
		*branchMisses = perf->branch_misses();
	}

	if (perf->has_bus_cycles())
	{
		*busCyclesSet = true;
		*busCycles = perf->bus_cycles();
	}

	if (perf->has_ref_cycles())
	{
		*refCyclesSet = true;
		*refCycles = perf->ref_cycles();
	}

	if (perf->has_cpu_clock())
	{
		*cpuClockSet = true;
		*cpuClock = perf->cpu_clock();
	}

	if (perf->has_task_clock())
	{
		*taskClockSet = true;
		*taskClock = perf->task_clock();
	}

	if (perf->has_page_faults())
	{
		*pageFaultsSet = true;
		*pageFaults = perf->page_faults();
	}

	if (perf->has_minor_faults())
	{
		*minorFaultsSet = true;
		*minorFaults = perf->minor_faults();
	}

	if (perf->has_major_faults())
	{
		*majorFaultsSet = true;
		*majorFaults = perf->major_faults();
	}

	if (perf->has_context_switches())
	{
		*contextSwitchesSet = true;
		*contextSwitches = perf->context_switches();
	}

	if (perf->has_cpu_migrations())
	{
		*cpuMigrationsSet = true;
		*cpuMigrations = perf->cpu_migrations();
	}

	if (perf->has_alignment_faults())
	{
		*alignmentFaultsSet = true;
		*alignmentFaults = perf->alignment_faults();
	}

	if (perf->has_emulation_faults())
	{
		*emulationFaultsSet = true;
		*emulationFaults = perf->emulation_faults();
	}

	if (perf->has_l1_dcache_loads())
	{
		*l1DcacheLoadsSet = true;
		*l1DcacheLoads = perf->l1_dcache_loads();
	}

	if (perf->has_l1_dcache_load_misses())
	{
		*l1DcacheLoadMissesSet = true;
		*l1DcacheLoadMisses = perf->l1_dcache_load_misses();
	}

	if (perf->has_l1_dcache_stores())
	{
		*l1DcacheStoresSet = true;
		*l1DcacheStores = perf->l1_dcache_stores();
	}

	if (perf->has_l1_dcache_store_misses())
	{
		*l1DcacheStoreMissesSet = true;
		*l1DcacheStoreMisses = perf->l1_dcache_store_misses();
	}

	if (perf->has_l1_dcache_prefetches())
	{
		*l1DcachePrefetchesSet = true;
		*l1DcachePrefetches = perf->l1_dcache_prefetches();
	}

	if (perf->has_l1_dcache_prefetch_misses())
	{
		*l1DcachePrefetchMissesSet = true;
		*l1DcachePrefetchMisses = perf->l1_dcache_prefetch_misses();
	}

	if (perf->has_l1_icache_loads())
	{
		*l1IcacheLoadsSet = true;
		*l1IcacheLoads = perf->l1_icache_loads();
	}

	if (perf->has_l1_icache_load_misses())
	{
		*l1IcacheLoadMissesSet = true;
		*l1IcacheLoadMisses = perf->l1_icache_load_misses();
	}

	if (perf->has_l1_icache_prefetches())
	{
		*l1IcachePrefetchesSet = true;
		*l1IcachePrefetches = perf->l1_icache_prefetches();
	}

	if (perf->has_l1_icache_prefetch_misses())
	{
		*l1IcachePrefetchMissesSet = true;
		*l1IcachePrefetchMisses = perf->l1_icache_prefetch_misses();
	}

	if (perf->has_llc_loads())
	{
		*llcLoadsSet = true;
		*llcLoads = perf->llc_loads();
	}

	if (perf->has_llc_load_misses())
	{
		*llcLoadMissesSet = true;
		*llcLoadMisses = perf->llc_load_misses();
	}

	if (perf->has_llc_stores())
	{
		*llcStoresSet = true;
		*llcStores = perf->llc_stores();
	}

	if (perf->has_llc_store_misses())
	{
		*llcStoreMissesSet = true;
		*llcStoreMisses = perf->llc_store_misses();
	}

	if (perf->has_llc_prefetches())
	{
		*llcPrefetchesSet = true;
		*llcPrefetches = perf->llc_prefetches();
	}

	if (perf->has_llc_prefetch_misses())
	{
		*llcPrefetchMissesSet = true;
		*llcPrefetchMisses = perf->llc_prefetch_misses();
	}

	if (perf->has_dtlb_loads())
	{
		*dtlbLoadsSet = true;
		*dtlbLoads = perf->dtlb_loads();
	}

	if (perf->has_dtlb_load_misses())
	{
		*dtlbLoadMissesSet = true;
		*dtlbLoadMisses = perf->dtlb_load_misses();
	}

	if (perf->has_dtlb_stores())
	{
		*dtlbStoresSet = true;
		*dtlbStores = perf->dtlb_stores();
	}

	if (perf->has_dtlb_store_misses())
	{
		*dtlbStoreMissesSet = true;
		*dtlbStoreMisses = perf->dtlb_store_misses();
	}

	if (perf->has_dtlb_prefetches())
	{
		*dtlbPrefetchesSet = true;
		*dtlbPrefetches = perf->dtlb_prefetches();
	}

	if (perf->has_dtlb_prefetch_misses())
	{
		*dtlbPrefetchMissesSet = true;
		*dtlbPrefetchMisses = perf->dtlb_prefetch_misses();
	}

	if (perf->has_itlb_loads())
	{
		*itlbLoadsSet = true;
		*itlbLoads = perf->itlb_loads();
	}

	if (perf->has_itlb_load_misses())
	{
		*itlbLoadMissesSet = true;
		*itlbLoadMisses = perf->itlb_load_misses();
	}

	if (perf->has_branch_loads())
	{
		*branchLoadsSet = true;
		*branchLoads = perf->branch_loads();
	}

	if (perf->has_branch_load_misses())
	{
		*branchLoadMissesSet = true;
		*branchLoadMisses = perf->branch_load_misses();
	}

	if (perf->has_node_loads())
	{
		*nodeLoadsSet = true;
		*nodeLoads = perf->node_loads();
	}

	if (perf->has_node_load_misses())
	{
		*nodeLoadMissesSet = true;
		*nodeLoadMisses = perf->node_load_misses();
	}

	if (perf->has_node_stores())
	{
		*nodeStoresSet = true;
		*nodeStores = perf->node_stores();
	}

	if (perf->has_node_store_misses())
	{
		*nodeStoreMissesSet = true;
		*nodeStoreMisses = perf->node_store_misses();
	}

	if (perf->has_node_prefetches())
	{
		*nodePrefetchesSet = true;
		*nodePrefetches = perf->node_prefetches();
	}

	if (perf->has_node_prefetch_misses())
	{
		*nodePrefetchMissesSet = true;
		*nodePrefetchMisses = perf->node_prefetch_misses();
	}
}

void destroyPerfStatistics(PerfStatisticsPtr perf)
{
  delete perf;
}