LATENCY_BUDGET

 

struct LatencyBudgetQosPolicy {

Duration_t duration;

};

 

 

struct BudgetExceededStatus {

long total_count;

long total_count_change;

DDS::InstanceHandle_t last_instance_handle;

};

 

void on_budget_exceeded(

in DDS::DataReader reader,

in BudgetExceededStatus status);

 

 

class DataReaderListenerImpl

: public virtual

OpenDDS::DCPS::LocalObject<OpenDDS::DCPS::DataReaderListener>

 

 

on_subscription_disconnected()

on_subscription_reconnected()

on_subscription_lost()

on_connection_deleted()

 

 

struct LatencyStatistics {

GUID_t publication;

unsigned long n;

double maximum;

double minimum;

double mean;

double variance;

};

 

typedef sequence<LatencyStatistics> LatencyStatisticsSeq;

 

local interface DataReaderEx : DDS::DataReader {

/// Obtain a sequence of statistics summaries.

void get_latency_stats( inout LatencyStatisticsSeq stats);

 

/// Clear any intermediate statistical values.

void reset_latency_stats();

 

/// Statistics gathering enable state.

attribute boolean statistics_enabled;

};

 

 

DDS::DataReader_var reader;

// ...

 

// To start collecting new data.

dynamic_cast<OpenDDS::DCPS::DataReaderImpl*>(reader.in())->

reset_latency_stats();

dynamic_cast<OpenDDS::DCPS::DataReaderImpl*>(reader.in())->

statistics_enabled(true);

 

// ...

 

// To collect data.

OpenDDS::DCPS::LatencyStatisticsSeq stats;

dynamic_cast<OpenDDS::DCPS::DataReaderImpl*>(reader.in())->

get_latency_stats(stats);

for (unsigned long i = 0; i < stats.length(); ++i)

{

std::cout << "stats[" << i << "]:" << std::endl;

std::cout << " n = " << stats[i].n << std::endl;

std::cout << " max = " << stats[i].maximum << std::endl;

std::cout << " min = " << stats[i].minimum << std::endl;

std::cout << " mean = " << stats[i].mean << std::endl;

std::cout << " variance = " << stats[i].variance << std::endl;

}