Move quic_client_stats to quiche/common/platform/default. Also break up quic_exported_stats for clarity, and leave a quic_client_stats API behind that points to quiche/common/platform/api/quiche_client_stats (because there are too many callers to migrate them all in this CL, besides server stats should probably be moved and migrated at the same time). PiperOrigin-RevId: 434909766
diff --git a/common/platform/api/quiche_client_stats.h b/common/platform/api/quiche_client_stats.h new file mode 100644 index 0000000..5b1b08c --- /dev/null +++ b/common/platform/api/quiche_client_stats.h
@@ -0,0 +1,88 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_COMMON_PLATFORM_API_QUICHE_CLIENT_STATS_H_ +#define QUICHE_COMMON_PLATFORM_API_QUICHE_CLIENT_STATS_H_ + +#include <string> + +#include "quiche_platform_impl/quiche_client_stats_impl.h" + +namespace quiche { + +//------------------------------------------------------------------------------ +// Enumeration histograms. +// +// Sample usage: +// // In Chrome, these values are persisted to logs. Entries should not be +// // renumbered and numeric values should never be reused. +// enum class MyEnum { +// FIRST_VALUE = 0, +// SECOND_VALUE = 1, +// ... +// FINAL_VALUE = N, +// COUNT +// }; +// QUICHE_CLIENT_HISTOGRAM_ENUM("My.Enumeration", MyEnum::SOME_VALUE, +// MyEnum::COUNT, "Number of time $foo equals to some enum value"); +// +// Note: The value in |sample| must be strictly less than |enum_size|. + +#define QUICHE_CLIENT_HISTOGRAM_ENUM(name, sample, enum_size, docstring) \ + QUICHE_CLIENT_HISTOGRAM_ENUM_IMPL(name, sample, enum_size, docstring) + +//------------------------------------------------------------------------------ +// Histogram for boolean values. + +// Sample usage: +// QUICHE_CLIENT_HISTOGRAM_BOOL("My.Boolean", bool, +// "Number of times $foo is true or false"); +#define QUICHE_CLIENT_HISTOGRAM_BOOL(name, sample, docstring) \ + QUICHE_CLIENT_HISTOGRAM_BOOL_IMPL(name, sample, docstring) + +//------------------------------------------------------------------------------ +// Timing histograms. These are used for collecting timing data (generally +// latencies). + +// These macros create exponentially sized histograms (lengths of the bucket +// ranges exponentially increase as the sample range increases). The units for +// sample and max are unspecified, but they must be the same for one histogram. + +// Sample usage: +// QUICHE_CLIENT_HISTOGRAM_TIMES("Very.Long.Timing.Histogram", time_delta, +// QuicTime::Delta::FromSeconds(1), QuicTime::Delta::FromSecond(3600 * +// 24), 100, "Time spent in doing operation."); +#define QUICHE_CLIENT_HISTOGRAM_TIMES(name, sample, min, max, bucket_count, \ + docstring) \ + QUICHE_CLIENT_HISTOGRAM_TIMES_IMPL(name, sample, min, max, bucket_count, \ + docstring) + +//------------------------------------------------------------------------------ +// Count histograms. These are used for collecting numeric data. + +// These macros default to exponential histograms - i.e. the lengths of the +// bucket ranges exponentially increase as the sample range increases. + +// All of these macros must be called with |name| as a runtime constant. + +// Any data outside the range here will be put in underflow and overflow +// buckets. Min values should be >=1 as emitted 0s will still go into the +// underflow bucket. + +// Sample usage: +// UMA_CLIENT_HISTOGRAM_CUSTOM_COUNTS("My.Histogram", 1, 100000000, 100, +// "Counters of hitting certain code."); + +#define QUICHE_CLIENT_HISTOGRAM_COUNTS(name, sample, min, max, bucket_count, \ + docstring) \ + QUICHE_CLIENT_HISTOGRAM_COUNTS_IMPL(name, sample, min, max, bucket_count, \ + docstring) + +inline void QuicheClientSparseHistogram(const std::string& name, int sample) { + QuicheClientSparseHistogramImpl(name, sample); +} + +} // namespace quiche + +#endif // QUICHE_COMMON_PLATFORM_API_QUICHE_CLIENT_STATS_H_
diff --git a/common/platform/default/quiche_platform_impl/quiche_client_stats_impl.h b/common/platform/default/quiche_platform_impl/quiche_client_stats_impl.h new file mode 100644 index 0000000..fde75f7 --- /dev/null +++ b/common/platform/default/quiche_platform_impl/quiche_client_stats_impl.h
@@ -0,0 +1,44 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_CLIENT_STATS_IMPL_H_ +#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_CLIENT_STATS_IMPL_H_ + +#include <string> + +namespace quiche { + +// Use namespace qualifier in case the macro is used outside the quiche +// namespace. + +#define QUICHE_CLIENT_HISTOGRAM_ENUM_IMPL(name, sample, enum_size, docstring) \ + do { \ + quiche::QuicheClientSparseHistogramImpl(name, static_cast<int>(sample)); \ + } while (0) + +#define QUICHE_CLIENT_HISTOGRAM_BOOL_IMPL(name, sample, docstring) \ + do { \ + (void)sample; /* Workaround for -Wunused-variable. */ \ + } while (0) + +#define QUICHE_CLIENT_HISTOGRAM_TIMES_IMPL(name, sample, min, max, \ + num_buckets, docstring) \ + do { \ + (void)sample; /* Workaround for -Wunused-variable. */ \ + } while (0) + +#define QUICHE_CLIENT_HISTOGRAM_COUNTS_IMPL(name, sample, min, max, \ + num_buckets, docstring) \ + do { \ + quiche::QuicheClientSparseHistogramImpl(name, sample); \ + } while (0) + +inline void QuicheClientSparseHistogramImpl(const std::string& /*name*/, + int /*sample*/) { + // No-op. +} + +} // namespace quiche + +#endif // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_CLIENT_STATS_IMPL_H_
diff --git a/quic/platform/api/quic_client_stats.h b/quic/platform/api/quic_client_stats.h index b780ba6..2f29cd9 100644 --- a/quic/platform/api/quic_client_stats.h +++ b/quic/platform/api/quic_client_stats.h
@@ -6,7 +6,8 @@ #define QUICHE_QUIC_PLATFORM_API_QUIC_CLIENT_STATS_H_ #include <string> -#include "net/quic/platform/impl/quic_client_stats_impl.h" + +#include "common/platform/api/quiche_client_stats.h" namespace quic { @@ -29,7 +30,7 @@ // Note: The value in |sample| must be strictly less than |enum_size|. #define QUIC_CLIENT_HISTOGRAM_ENUM(name, sample, enum_size, docstring) \ - QUIC_CLIENT_HISTOGRAM_ENUM_IMPL(name, sample, enum_size, docstring) + QUICHE_CLIENT_HISTOGRAM_ENUM(name, sample, enum_size, docstring) //------------------------------------------------------------------------------ // Histogram for boolean values. @@ -38,7 +39,7 @@ // QUIC_CLIENT_HISTOGRAM_BOOL("My.Boolean", bool, // "Number of times $foo is true or false"); #define QUIC_CLIENT_HISTOGRAM_BOOL(name, sample, docstring) \ - QUIC_CLIENT_HISTOGRAM_BOOL_IMPL(name, sample, docstring) + QUICHE_CLIENT_HISTOGRAM_BOOL(name, sample, docstring) //------------------------------------------------------------------------------ // Timing histograms. These are used for collecting timing data (generally @@ -54,8 +55,7 @@ // 24), 100, "Time spent in doing operation."); #define QUIC_CLIENT_HISTOGRAM_TIMES(name, sample, min, max, bucket_count, \ docstring) \ - QUIC_CLIENT_HISTOGRAM_TIMES_IMPL(name, sample, min, max, bucket_count, \ - docstring) + QUICHE_CLIENT_HISTOGRAM_TIMES(name, sample, min, max, bucket_count, docstring) //------------------------------------------------------------------------------ // Count histograms. These are used for collecting numeric data. @@ -75,11 +75,11 @@ #define QUIC_CLIENT_HISTOGRAM_COUNTS(name, sample, min, max, bucket_count, \ docstring) \ - QUIC_CLIENT_HISTOGRAM_COUNTS_IMPL(name, sample, min, max, bucket_count, \ - docstring) + QUICHE_CLIENT_HISTOGRAM_COUNTS(name, sample, min, max, bucket_count, \ + docstring) inline void QuicClientSparseHistogram(const std::string& name, int sample) { - QuicClientSparseHistogramImpl(name, sample); + quiche::QuicheClientSparseHistogram(name, sample); } } // namespace quic
diff --git a/quic/platform/api/quic_exported_stats.h b/quic/platform/api/quic_exported_stats.h index 28c82ec..d2d0d4a 100644 --- a/quic/platform/api/quic_exported_stats.h +++ b/quic/platform/api/quic_exported_stats.h
@@ -5,8 +5,8 @@ #ifndef QUICHE_QUIC_PLATFORM_API_QUIC_EXPORTED_STATS_H_ #define QUICHE_QUIC_PLATFORM_API_QUIC_EXPORTED_STATS_H_ -#include "net/quic/platform/impl/quic_client_stats_impl.h" -#include "net/quic/platform/impl/quic_server_stats_impl.h" +#include "quic/platform/api/quic_client_stats.h" +#include "quic/platform/api/quic_server_stats.h" namespace quic { @@ -30,10 +30,10 @@ // // Note: The value in |sample| must be strictly less than |enum_size|. -#define QUIC_HISTOGRAM_ENUM(name, sample, enum_size, docstring) \ - do { \ - QUIC_CLIENT_HISTOGRAM_ENUM_IMPL(name, sample, enum_size, docstring); \ - QUIC_SERVER_HISTOGRAM_ENUM_IMPL(name, sample, enum_size, docstring); \ +#define QUIC_HISTOGRAM_ENUM(name, sample, enum_size, docstring) \ + do { \ + QUIC_CLIENT_HISTOGRAM_ENUM(name, sample, enum_size, docstring); \ + QUIC_SERVER_HISTOGRAM_ENUM(name, sample, enum_size, docstring); \ } while (0) //------------------------------------------------------------------------------ @@ -42,10 +42,10 @@ // Sample usage: // QUIC_HISTOGRAM_BOOL("My.Boolean", bool, // "Number of times $foo is true or false"); -#define QUIC_HISTOGRAM_BOOL(name, sample, docstring) \ - do { \ - QUIC_CLIENT_HISTOGRAM_BOOL_IMPL(name, sample, docstring); \ - QUIC_SERVER_HISTOGRAM_BOOL_IMPL(name, sample, docstring); \ +#define QUIC_HISTOGRAM_BOOL(name, sample, docstring) \ + do { \ + QUIC_CLIENT_HISTOGRAM_BOOL(name, sample, docstring); \ + QUIC_SERVER_HISTOGRAM_BOOL(name, sample, docstring); \ } while (0) //------------------------------------------------------------------------------ @@ -63,10 +63,10 @@ #define QUIC_HISTOGRAM_TIMES(name, sample, min, max, bucket_count, docstring) \ do { \ - QUIC_CLIENT_HISTOGRAM_TIMES_IMPL(name, sample, min, max, bucket_count, \ - docstring); \ - QUIC_SERVER_HISTOGRAM_TIMES_IMPL(name, sample, min, max, bucket_count, \ - docstring); \ + QUIC_CLIENT_HISTOGRAM_TIMES(name, sample, min, max, bucket_count, \ + docstring); \ + QUIC_SERVER_HISTOGRAM_TIMES(name, sample, min, max, bucket_count, \ + docstring); \ } while (0) //------------------------------------------------------------------------------ @@ -85,10 +85,10 @@ #define QUIC_HISTOGRAM_COUNTS(name, sample, min, max, bucket_count, docstring) \ do { \ - QUIC_CLIENT_HISTOGRAM_COUNTS_IMPL(name, sample, min, max, bucket_count, \ - docstring); \ - QUIC_SERVER_HISTOGRAM_COUNTS_IMPL(name, sample, min, max, bucket_count, \ - docstring); \ + QUIC_CLIENT_HISTOGRAM_COUNTS(name, sample, min, max, bucket_count, \ + docstring); \ + QUIC_SERVER_HISTOGRAM_COUNTS(name, sample, min, max, bucket_count, \ + docstring); \ } while (0) } // namespace quic