Index: third_party/grpc/src/core/statistics/census_log.h |
diff --git a/third_party/grpc/src/core/statistics/census_log.h b/third_party/grpc/src/core/statistics/census_log.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..356437c346e948aed78cfe346e2127e2da1dec5d |
--- /dev/null |
+++ b/third_party/grpc/src/core/statistics/census_log.h |
@@ -0,0 +1,91 @@ |
+/* |
+ * |
+ * Copyright 2015, Google Inc. |
+ * All rights reserved. |
+ * |
+ * Redistribution and use in source and binary forms, with or without |
+ * modification, are permitted provided that the following conditions are |
+ * met: |
+ * |
+ * * Redistributions of source code must retain the above copyright |
+ * notice, this list of conditions and the following disclaimer. |
+ * * Redistributions in binary form must reproduce the above |
+ * copyright notice, this list of conditions and the following disclaimer |
+ * in the documentation and/or other materials provided with the |
+ * distribution. |
+ * * Neither the name of Google Inc. nor the names of its |
+ * contributors may be used to endorse or promote products derived from |
+ * this software without specific prior written permission. |
+ * |
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ * |
+ */ |
+ |
+#ifndef GRPC_INTERNAL_CORE_STATISTICS_CENSUS_LOG_H |
+#define GRPC_INTERNAL_CORE_STATISTICS_CENSUS_LOG_H |
+ |
+#include <stddef.h> |
+ |
+/* Maximum record size, in bytes. */ |
+#define CENSUS_LOG_2_MAX_RECORD_SIZE 14 /* 2^14 = 16KB */ |
+#define CENSUS_LOG_MAX_RECORD_SIZE (1 << CENSUS_LOG_2_MAX_RECORD_SIZE) |
+ |
+/* Initialize the statistics logging subsystem with the given log size. A log |
+ size of 0 will result in the smallest possible log for the platform |
+ (approximately CENSUS_LOG_MAX_RECORD_SIZE * gpr_cpu_num_cores()). If |
+ discard_old_records is non-zero, then new records will displace older ones |
+ when the log is full. This function must be called before any other |
+ census_log functions. |
+*/ |
+void census_log_initialize(size_t size_in_mb, int discard_old_records); |
+ |
+/* Shutdown the logging subsystem. Caller must ensure that: |
+ - no in progress or future call to any census_log functions |
+ - no incomplete records |
+*/ |
+void census_log_shutdown(void); |
+ |
+/* Allocates and returns a 'size' bytes record and marks it in use. A |
+ subsequent census_log_end_write() marks the record complete. The |
+ 'bytes_written' census_log_end_write() argument must be <= |
+ 'size'. Returns NULL if out-of-space AND: |
+ - log is configured to keep old records OR |
+ - all blocks are pinned by incomplete records. |
+*/ |
+void *census_log_start_write(size_t size); |
+ |
+void census_log_end_write(void *record, size_t bytes_written); |
+ |
+/* census_log_read_next() iterates over blocks with data and for each block |
+ returns a pointer to the first unread byte. The number of bytes that can be |
+ read are returned in 'bytes_available'. Reader is expected to read all |
+ available data. Reading the data consumes it i.e. it cannot be read again. |
+ census_log_read_next() returns NULL if the end is reached i.e last block |
+ is read. census_log_init_reader() starts the iteration or aborts the |
+ current iteration. |
+*/ |
+void census_log_init_reader(void); |
+const void *census_log_read_next(size_t *bytes_available); |
+ |
+/* Returns estimated remaining space across all blocks, in bytes. If log is |
+ configured to discard old records, returns total log space. Otherwise, |
+ returns space available in empty blocks (partially filled blocks are |
+ treated as full). |
+*/ |
+size_t census_log_remaining_space(void); |
+ |
+/* Returns the number of times gprc_stats_log_start_write() failed due to |
+ out-of-space. */ |
+int census_log_out_of_space_count(void); |
+ |
+#endif /* GRPC_INTERNAL_CORE_STATISTICS_CENSUS_LOG_H */ |