blob: 8d73683f1e502bce89b48b3866b63e1d87034b19 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <unistd.h>
#include <cobalt-client/cpp/types-internal.h>
#include <fbl/auto_lock.h>
#include <fbl/mutex.h>
#include <fbl/vector.h>
namespace cobalt_client {
namespace internal {
class FakeLogger : public Logger {
public:
struct HistEntry {
RemoteMetricInfo metric_info;
fbl::Vector<HistogramBucket> buckets;
};
struct CountEntry {
RemoteMetricInfo metric_info;
int64_t count;
};
FakeLogger() = default;
bool Log(const RemoteMetricInfo& metric_info, const HistogramBucket* bucket,
size_t num_buckets) {
if (!should_fail_) {
size_t index = logged_histograms_.size();
logged_histograms_.push_back({metric_info, {}});
for (size_t i = 0; i < num_buckets; i++) {
logged_histograms_[index].buckets.push_back(bucket[i]);
}
}
return !should_fail_;
}
bool Log(const RemoteMetricInfo& metric_info, int64_t count) {
if (!should_fail_) {
logged_counts_.push_back({metric_info, count});
}
return !should_fail_;
}
const fbl::Vector<HistEntry>& logged_histograms() const { return logged_histograms_; }
const fbl::Vector<CountEntry>& logged_counts() const { return logged_counts_; }
void set_should_fail(bool should_fail) { should_fail_ = should_fail; }
const fbl::Vector<HistogramBucket> GetHistogram(const RemoteMetricInfo& info) const {
fbl::Vector<HistogramBucket> histogram;
for (auto& hist_entry : logged_histograms_) {
if (info == hist_entry.metric_info) {
if (histogram.is_empty()) {
histogram.reserve(hist_entry.buckets.size());
for (size_t i = 0; i < hist_entry.buckets.size(); ++i) {
histogram.push_back({.index = static_cast<uint32_t>(i), .count = 0});
}
}
for (auto& bucket : hist_entry.buckets) {
histogram[bucket.index].count += bucket.count;
}
}
}
return histogram;
}
RemoteCounter::Type GetCounter(const RemoteMetricInfo& info) const {
RemoteCounter::Type count = 0;
for (auto& count_entry : logged_counts_) {
if (info == count_entry.metric_info) {
count += count_entry.count;
}
}
return count;
}
private:
bool should_fail_ = false;
fbl::Vector<HistEntry> logged_histograms_;
fbl::Vector<CountEntry> logged_counts_;
};
} // namespace internal
} // namespace cobalt_client