/* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ART_LIBARTBASE_BASE_METRICS_METRICS_TEST_H_ #define ART_LIBARTBASE_BASE_METRICS_METRICS_TEST_H_ #include "metrics.h" #pragma clang diagnostic push #pragma clang diagnostic error "-Wconversion" namespace art { namespace metrics { namespace test { // This namespace contains functions that are helpful for testing metrics but should not be used in // production code. // A trivial MetricsBackend that does nothing for all of the members. This can be overridden by // test cases to test specific behaviors. class TestBackendBase : public MetricsBackend { public: void BeginOrUpdateSession([[maybe_unused]] const SessionData& session_data) override {} void BeginReport([[maybe_unused]] uint64_t timestamp_since_start_ms) override {} void ReportCounter([[maybe_unused]] DatumId counter_type, [[maybe_unused]] uint64_t value) override {} void ReportHistogram([[maybe_unused]] DatumId histogram_type, [[maybe_unused]] int64_t low_value_, [[maybe_unused]] int64_t high_value, [[maybe_unused]] const std::vector& buckets) override {} void EndReport() override {} }; template uint64_t CounterValue(const MetricType& counter) { uint64_t counter_value{0}; struct CounterBackend : public TestBackendBase { explicit CounterBackend(uint64_t* counter_value) : counter_value_{counter_value} {} void ReportCounter(DatumId, uint64_t value) override { *counter_value_ = value; } uint64_t* counter_value_; } backend{&counter_value}; counter.Report(&backend); return counter_value; } template std::vector GetBuckets( const MetricsHistogram& histogram) { std::vector buckets; struct HistogramBackend : public TestBackendBase { explicit HistogramBackend(std::vector* buckets) : buckets_{buckets} {} void ReportHistogram(DatumId, int64_t, int64_t, const std::vector& buckets) override { *buckets_ = buckets; } std::vector* buckets_; } backend{&buckets}; histogram.Report(&backend); return buckets; } } // namespace test } // namespace metrics } // namespace art #pragma clang diagnostic pop // -Wconversion #endif // ART_LIBARTBASE_BASE_METRICS_METRICS_TEST_H_