MCPcopy Create free account
hub / github.com/apache/impala / IncrementBy

Method IncrementBy

be/src/util/hdr-histogram.cc:147–179  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

145}
146
147void HdrHistogram::IncrementBy(int64_t value, int64_t count) {
148 DCHECK_GE(value, 0);
149 DCHECK_GE(count, 0);
150
151 // Dissect the value into bucket and sub-bucket parts, and derive index into
152 // counts array:
153 int bucket_index = BucketIndex(value);
154 int sub_bucket_index = SubBucketIndex(value, bucket_index);
155 int counts_index = CountsArrayIndex(bucket_index, sub_bucket_index);
156
157 // Increment bucket & total.
158 NoBarrier_AtomicIncrement(&counts_[counts_index], count);
159 NoBarrier_AtomicIncrement(&total_count_, count);
160 NoBarrier_AtomicIncrement(&total_sum_, value * count);
161
162 // Update min, if needed.
163 {
164 Atomic64 min_val;
165 while (PREDICT_FALSE(value < (min_val = MinValue()))) {
166 Atomic64 old_val = NoBarrier_CompareAndSwap(&min_value_, min_val, value);
167 if (PREDICT_TRUE(old_val == min_val)) break; // CAS success.
168 }
169 }
170
171 // Update max, if needed.
172 {
173 Atomic64 max_val;
174 while (PREDICT_FALSE(value > (max_val = MaxValue()))) {
175 Atomic64 old_val = NoBarrier_CompareAndSwap(&max_value_, max_val, value);
176 if (PREDICT_TRUE(old_val == max_val)) break; // CAS success.
177 }
178 }
179}
180
181void HdrHistogram::IncrementWithExpectedInterval(int64_t value,
182 int64_t expected_interval_between_samples) {

Callers 1

TEST_FFunction · 0.45

Calls 2

NoBarrier_CompareAndSwapFunction · 0.85

Tested by 1

TEST_FFunction · 0.36