MCPcopy Create free account
hub / github.com/OpenDDS/OpenDDS / update

Method update

performance-tests/bench/common/PropertyStatBlock.cpp:278–316  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

276}
277
278void PropertyStatBlock::update(double value, const Builder::TimeStamp& time)
279{
280 const double prev_mean = mean_->value.double_prop();
281 const double prev_var_x_sample_count = var_x_sample_count_->value.double_prop();
282
283 size_t next_median_buffer_index = static_cast<size_t>(sample_count_->value.ull_prop() % median_buffer_.size());
284
285 if (sample_count_->value.ull_prop() < median_buffer_.size()) {
286 median_sample_count_->value.ull_prop(median_sample_count_->value.ull_prop() + 1);
287 }
288 sample_count_->value.ull_prop(sample_count_->value.ull_prop() + 1);
289
290 if (value < min_->value.double_prop()) {
291 min_->value.double_prop(value);
292 }
293
294 if (max_->value.double_prop() < value) {
295 max_->value.double_prop(value);
296 }
297
298 // sample_count should always be >= 1 by this point
299 OPENDDS_ASSERT(sample_count_->value.ull_prop() >= 1);
300
301 if (sample_count_->value.ull_prop() == 1) {
302 mean_->value.double_prop(value);
303 // variance remains 0 until we have 2 samples, so don't touch var_x_sample_count_ here
304 } else {
305 // Incremental mean calculation (doesn't require storing all the data)
306 mean_->value.double_prop(prev_mean + ((value - prev_mean) / static_cast<double>(sample_count_->value.ull_prop())));
307 // Incremental (variance * sample_count) calculation (doesn't require storing all the data, can be used to easily find variance / standard deviation)
308 var_x_sample_count_->value.double_prop(prev_var_x_sample_count + ((value - prev_mean) * (value - mean_->value.double_prop())));
309 }
310
311 median_buffer_[next_median_buffer_index] = value;
312
313 if (timestamp_buffer_.size()) {
314 timestamp_buffer_[next_median_buffer_index] = time == Builder::ZERO ? Builder::get_sys_time() : time;
315 }
316}
317
318void PropertyStatBlock::finalize()
319{

Callers 8

receiverFunction · 0.45
TESTFunction · 0.45
receiverFunction · 0.45
check_for_iperfMethod · 0.45
run_spawned_processesMethod · 0.45
on_valid_dataMethod · 0.45

Calls 2

get_sys_timeFunction · 0.85
sizeMethod · 0.45

Tested by

no test coverage detected