Skip to content

Commit e216555

Browse files
authored
[SDK] Optimize Metric Processing for Single Collector with Delta Temporality (#3236)
1 parent 031307b commit e216555

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

sdk/src/metrics/state/temporal_metric_storage.cc

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,35 @@ bool TemporalMetricStorage::buildMetrics(CollectorHandle *collector,
5151
AggregationTemporality aggregation_temporarily =
5252
collector->GetAggregationTemporality(instrument_descriptor_.type_);
5353

54+
// Fast path for single collector with delta temporality and counter, updown-counter, histogram
55+
// This path doesn't need to aggregated-with/contribute-to the unreported_metric_, as there is
56+
// no other reader configured to collect those data.
57+
if (collectors.size() == 1 && aggregation_temporarily == AggregationTemporality::kDelta)
58+
{
59+
// If no metrics, early return
60+
if (delta_metrics->Size() == 0)
61+
{
62+
return true;
63+
}
64+
// Create MetricData directly
65+
MetricData metric_data;
66+
metric_data.instrument_descriptor = instrument_descriptor_;
67+
metric_data.aggregation_temporality = AggregationTemporality::kDelta;
68+
metric_data.start_ts = sdk_start_ts;
69+
metric_data.end_ts = collection_ts;
70+
71+
// Direct conversion of delta metrics to point data
72+
delta_metrics->GetAllEnteries(
73+
[&metric_data](const MetricAttributes &attributes, Aggregation &aggregation) {
74+
PointDataAttributes point_data_attr;
75+
point_data_attr.point_data = aggregation.ToPoint();
76+
point_data_attr.attributes = attributes;
77+
metric_data.point_data_attr_.emplace_back(std::move(point_data_attr));
78+
return true;
79+
});
80+
return callback(metric_data);
81+
}
82+
5483
if (delta_metrics->Size())
5584
{
5685
for (auto &col : collectors)

0 commit comments

Comments
 (0)