MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / writeReportSamples

Function writeReportSamples

app/src/Sessions/ReportData.cpp:443–488  ·  view source on GitHub ↗

* @brief Writes either the raw samples or a fixed-budget decimated series. */

Source from the content-addressed store, hash-verified

441 * @brief Writes either the raw samples or a fixed-budget decimated series.
442 */
443static void writeReportSamples(const DSP::AxisData& x,
444 const DSP::AxisData& y,
445 std::size_t count,
446 int maxSamples,
447 Sessions::DatasetSeries& series)
448{
449 Q_ASSERT(count > 0);
450 Q_ASSERT(maxSamples >= 2);
451 Q_ASSERT(count <= x.size() && count <= y.size());
452
453 const std::size_t budget = static_cast<std::size_t>(maxSamples);
454 if (count <= budget) {
455 std::vector<std::size_t> indices;
456 indices.reserve(count);
457 for (std::size_t i = 0; i < count; ++i)
458 indices.push_back(i);
459
460 writeSelectedSamples(x, y, indices, series);
461 return;
462 }
463
464 const std::size_t bucketCount = std::max<std::size_t>(1, budget / 4);
465 const std::size_t baseTarget = budget / bucketCount;
466 const std::size_t remainder = budget % bucketCount;
467 Q_ASSERT(bucketCount > 0);
468 Q_ASSERT(baseTarget > 0);
469
470 std::vector<std::size_t> indices;
471 indices.reserve(budget);
472
473 for (std::size_t bucket = 0; bucket < bucketCount; ++bucket) {
474 const std::size_t begin = (bucket * count) / bucketCount;
475 const std::size_t end = ((bucket + 1) * count) / bucketCount;
476 if (begin >= end)
477 continue;
478
479 const int target = static_cast<int>(baseTarget + (bucket < remainder ? 1 : 0));
480 appendBucketSamples(y, begin, end, target, indices);
481 }
482
483 if (indices.size() < budget)
484 appendBudgetFillSamples(count, budget, indices);
485
486 std::sort(indices.begin(), indices.end());
487 writeSelectedSamples(x, y, indices, series);
488}
489
490/**
491 * @brief Enumerates numeric parameters for @p sessionId in column order.

Callers 1

loadChartSeriesMethod · 0.85

Calls 6

writeSelectedSamplesFunction · 0.85
appendBucketSamplesFunction · 0.85
appendBudgetFillSamplesFunction · 0.85
sortFunction · 0.85
beginMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected