diff --git a/BUILD b/BUILD
index ba8cce5ec38..4256b1fcaf8 100644
--- a/BUILD
+++ b/BUILD
@@ -1530,6 +1530,7 @@ grpc_cc_library(
"//src/core:arena_promise",
"//src/core:atomic_utils",
"//src/core:bitset",
+ "//src/core:call_final_info",
"//src/core:cancel_callback",
"//src/core:channel_args",
"//src/core:channel_args_endpoint_config",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4455b799b10..eb2eac86917 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2500,6 +2500,7 @@ add_library(grpc
src/core/lib/surface/version.cc
src/core/lib/transport/batch_builder.cc
src/core/lib/transport/bdp_estimator.cc
+ src/core/lib/transport/call_final_info.cc
src/core/lib/transport/connectivity_state.cc
src/core/lib/transport/error_utils.cc
src/core/lib/transport/handshaker.cc
@@ -3193,6 +3194,7 @@ add_library(grpc_unsecure
src/core/lib/surface/version.cc
src/core/lib/transport/batch_builder.cc
src/core/lib/transport/bdp_estimator.cc
+ src/core/lib/transport/call_final_info.cc
src/core/lib/transport/connectivity_state.cc
src/core/lib/transport/error_utils.cc
src/core/lib/transport/handshaker.cc
@@ -5179,6 +5181,7 @@ add_library(grpc_authorization_provider
src/core/lib/surface/validate_metadata.cc
src/core/lib/surface/version.cc
src/core/lib/transport/batch_builder.cc
+ src/core/lib/transport/call_final_info.cc
src/core/lib/transport/connectivity_state.cc
src/core/lib/transport/error_utils.cc
src/core/lib/transport/handshaker.cc
diff --git a/Makefile b/Makefile
index 1d547978b3d..9f76d67a533 100644
--- a/Makefile
+++ b/Makefile
@@ -1701,6 +1701,7 @@ LIBGRPC_SRC = \
src/core/lib/surface/version.cc \
src/core/lib/transport/batch_builder.cc \
src/core/lib/transport/bdp_estimator.cc \
+ src/core/lib/transport/call_final_info.cc \
src/core/lib/transport/connectivity_state.cc \
src/core/lib/transport/error_utils.cc \
src/core/lib/transport/handshaker.cc \
@@ -2244,6 +2245,7 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/surface/version.cc \
src/core/lib/transport/batch_builder.cc \
src/core/lib/transport/bdp_estimator.cc \
+ src/core/lib/transport/call_final_info.cc \
src/core/lib/transport/connectivity_state.cc \
src/core/lib/transport/error_utils.cc \
src/core/lib/transport/handshaker.cc \
diff --git a/Package.swift b/Package.swift
index 909c493af11..5bf0a78e600 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1887,6 +1887,8 @@ let package = Package(
"src/core/lib/transport/batch_builder.h",
"src/core/lib/transport/bdp_estimator.cc",
"src/core/lib/transport/bdp_estimator.h",
+ "src/core/lib/transport/call_final_info.cc",
+ "src/core/lib/transport/call_final_info.h",
"src/core/lib/transport/connectivity_state.cc",
"src/core/lib/transport/connectivity_state.h",
"src/core/lib/transport/custom_metadata.h",
diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml
index aa1179bd3e5..3a956abcf0c 100644
--- a/build_autogenerated.yaml
+++ b/build_autogenerated.yaml
@@ -1168,6 +1168,7 @@ libs:
- src/core/lib/surface/wait_for_cq_end_op.h
- src/core/lib/transport/batch_builder.h
- src/core/lib/transport/bdp_estimator.h
+ - src/core/lib/transport/call_final_info.h
- src/core/lib/transport/connectivity_state.h
- src/core/lib/transport/custom_metadata.h
- src/core/lib/transport/error_utils.h
@@ -1964,6 +1965,7 @@ libs:
- src/core/lib/surface/version.cc
- src/core/lib/transport/batch_builder.cc
- src/core/lib/transport/bdp_estimator.cc
+ - src/core/lib/transport/call_final_info.cc
- src/core/lib/transport/connectivity_state.cc
- src/core/lib/transport/error_utils.cc
- src/core/lib/transport/handshaker.cc
@@ -2601,6 +2603,7 @@ libs:
- src/core/lib/surface/wait_for_cq_end_op.h
- src/core/lib/transport/batch_builder.h
- src/core/lib/transport/bdp_estimator.h
+ - src/core/lib/transport/call_final_info.h
- src/core/lib/transport/connectivity_state.h
- src/core/lib/transport/custom_metadata.h
- src/core/lib/transport/error_utils.h
@@ -3015,6 +3018,7 @@ libs:
- src/core/lib/surface/version.cc
- src/core/lib/transport/batch_builder.cc
- src/core/lib/transport/bdp_estimator.cc
+ - src/core/lib/transport/call_final_info.cc
- src/core/lib/transport/connectivity_state.cc
- src/core/lib/transport/error_utils.cc
- src/core/lib/transport/handshaker.cc
@@ -4738,6 +4742,7 @@ libs:
- src/core/lib/surface/validate_metadata.h
- src/core/lib/surface/wait_for_cq_end_op.h
- src/core/lib/transport/batch_builder.h
+ - src/core/lib/transport/call_final_info.h
- src/core/lib/transport/connectivity_state.h
- src/core/lib/transport/custom_metadata.h
- src/core/lib/transport/error_utils.h
@@ -5061,6 +5066,7 @@ libs:
- src/core/lib/surface/validate_metadata.cc
- src/core/lib/surface/version.cc
- src/core/lib/transport/batch_builder.cc
+ - src/core/lib/transport/call_final_info.cc
- src/core/lib/transport/connectivity_state.cc
- src/core/lib/transport/error_utils.cc
- src/core/lib/transport/handshaker.cc
diff --git a/config.m4 b/config.m4
index eaafbe168f0..157bc2a173d 100644
--- a/config.m4
+++ b/config.m4
@@ -833,6 +833,7 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/surface/version.cc \
src/core/lib/transport/batch_builder.cc \
src/core/lib/transport/bdp_estimator.cc \
+ src/core/lib/transport/call_final_info.cc \
src/core/lib/transport/connectivity_state.cc \
src/core/lib/transport/error_utils.cc \
src/core/lib/transport/handshaker.cc \
diff --git a/config.w32 b/config.w32
index 787f9184edd..d36b3beb2fb 100644
--- a/config.w32
+++ b/config.w32
@@ -798,6 +798,7 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\surface\\version.cc " +
"src\\core\\lib\\transport\\batch_builder.cc " +
"src\\core\\lib\\transport\\bdp_estimator.cc " +
+ "src\\core\\lib\\transport\\call_final_info.cc " +
"src\\core\\lib\\transport\\connectivity_state.cc " +
"src\\core\\lib\\transport\\error_utils.cc " +
"src\\core\\lib\\transport\\handshaker.cc " +
diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec
index 3cae944ab45..4b54894cee7 100644
--- a/gRPC-C++.podspec
+++ b/gRPC-C++.podspec
@@ -1263,6 +1263,7 @@ Pod::Spec.new do |s|
'src/core/lib/surface/wait_for_cq_end_op.h',
'src/core/lib/transport/batch_builder.h',
'src/core/lib/transport/bdp_estimator.h',
+ 'src/core/lib/transport/call_final_info.h',
'src/core/lib/transport/connectivity_state.h',
'src/core/lib/transport/custom_metadata.h',
'src/core/lib/transport/error_utils.h',
@@ -2508,6 +2509,7 @@ Pod::Spec.new do |s|
'src/core/lib/surface/wait_for_cq_end_op.h',
'src/core/lib/transport/batch_builder.h',
'src/core/lib/transport/bdp_estimator.h',
+ 'src/core/lib/transport/call_final_info.h',
'src/core/lib/transport/connectivity_state.h',
'src/core/lib/transport/custom_metadata.h',
'src/core/lib/transport/error_utils.h',
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 64a9a422c20..f6e9adef455 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -1986,6 +1986,8 @@ Pod::Spec.new do |s|
'src/core/lib/transport/batch_builder.h',
'src/core/lib/transport/bdp_estimator.cc',
'src/core/lib/transport/bdp_estimator.h',
+ 'src/core/lib/transport/call_final_info.cc',
+ 'src/core/lib/transport/call_final_info.h',
'src/core/lib/transport/connectivity_state.cc',
'src/core/lib/transport/connectivity_state.h',
'src/core/lib/transport/custom_metadata.h',
@@ -3277,6 +3279,7 @@ Pod::Spec.new do |s|
'src/core/lib/surface/wait_for_cq_end_op.h',
'src/core/lib/transport/batch_builder.h',
'src/core/lib/transport/bdp_estimator.h',
+ 'src/core/lib/transport/call_final_info.h',
'src/core/lib/transport/connectivity_state.h',
'src/core/lib/transport/custom_metadata.h',
'src/core/lib/transport/error_utils.h',
diff --git a/grpc.gemspec b/grpc.gemspec
index 7c770a8a534..88f659135d9 100644
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -1889,6 +1889,8 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/transport/batch_builder.h )
s.files += %w( src/core/lib/transport/bdp_estimator.cc )
s.files += %w( src/core/lib/transport/bdp_estimator.h )
+ s.files += %w( src/core/lib/transport/call_final_info.cc )
+ s.files += %w( src/core/lib/transport/call_final_info.h )
s.files += %w( src/core/lib/transport/connectivity_state.cc )
s.files += %w( src/core/lib/transport/connectivity_state.h )
s.files += %w( src/core/lib/transport/custom_metadata.h )
diff --git a/grpc.gyp b/grpc.gyp
index 37f7bb50dd0..c528adf8120 100644
--- a/grpc.gyp
+++ b/grpc.gyp
@@ -1020,6 +1020,7 @@
'src/core/lib/surface/version.cc',
'src/core/lib/transport/batch_builder.cc',
'src/core/lib/transport/bdp_estimator.cc',
+ 'src/core/lib/transport/call_final_info.cc',
'src/core/lib/transport/connectivity_state.cc',
'src/core/lib/transport/error_utils.cc',
'src/core/lib/transport/handshaker.cc',
@@ -1504,6 +1505,7 @@
'src/core/lib/surface/version.cc',
'src/core/lib/transport/batch_builder.cc',
'src/core/lib/transport/bdp_estimator.cc',
+ 'src/core/lib/transport/call_final_info.cc',
'src/core/lib/transport/connectivity_state.cc',
'src/core/lib/transport/error_utils.cc',
'src/core/lib/transport/handshaker.cc',
@@ -2280,6 +2282,7 @@
'src/core/lib/surface/validate_metadata.cc',
'src/core/lib/surface/version.cc',
'src/core/lib/transport/batch_builder.cc',
+ 'src/core/lib/transport/call_final_info.cc',
'src/core/lib/transport/connectivity_state.cc',
'src/core/lib/transport/error_utils.cc',
'src/core/lib/transport/handshaker.cc',
diff --git a/package.xml b/package.xml
index 9df45c5f2ea..8bfc9459ed8 100644
--- a/package.xml
+++ b/package.xml
@@ -1871,6 +1871,8 @@
+
+
diff --git a/src/core/BUILD b/src/core/BUILD
index aea45544adb..daf063a5daf 100644
--- a/src/core/BUILD
+++ b/src/core/BUILD
@@ -6624,6 +6624,20 @@ grpc_cc_library(
],
)
+grpc_cc_library(
+ name = "call_final_info",
+ srcs = [
+ "lib/transport/call_final_info.cc",
+ ],
+ hdrs = [
+ "lib/transport/call_final_info.h",
+ ],
+ deps = [
+ "//:gpr",
+ "//:grpc_public_hdrs",
+ ],
+)
+
grpc_cc_library(
name = "parsed_metadata",
srcs = [
diff --git a/src/core/lib/channel/channel_stack.h b/src/core/lib/channel/channel_stack.h
index 1a17bb90847..32c67017b3c 100644
--- a/src/core/lib/channel/channel_stack.h
+++ b/src/core/lib/channel/channel_stack.h
@@ -72,6 +72,7 @@
#include "src/core/lib/iomgr/polling_entity.h"
#include "src/core/lib/promise/arena_promise.h"
#include "src/core/lib/resource_quota/arena.h"
+#include "src/core/lib/transport/call_final_info.h"
#include "src/core/lib/transport/transport.h"
struct grpc_channel_element_args {
@@ -90,16 +91,6 @@ struct grpc_call_element_args {
grpc_core::Arena* arena;
grpc_core::CallCombiner* call_combiner;
};
-struct grpc_call_stats {
- grpc_transport_stream_stats transport_stream_stats;
- gpr_timespec latency; // From call creating to enqueing of received status
-};
-/// Information about the call upon completion.
-struct grpc_call_final_info {
- grpc_call_stats stats;
- grpc_status_code final_status = GRPC_STATUS_OK;
- const char* error_string = nullptr;
-};
// Channel filters specify:
// 1. the amount of memory needed in the channel & call (via the sizeof_XXX
diff --git a/src/core/lib/transport/call_final_info.cc b/src/core/lib/transport/call_final_info.cc
new file mode 100644
index 00000000000..88be823abf5
--- /dev/null
+++ b/src/core/lib/transport/call_final_info.cc
@@ -0,0 +1,38 @@
+// Copyright 2024 gRPC authors.
+//
+// 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.
+
+#include
+
+#include "src/core/lib/transport/call_final_info.h"
+
+#include
+
+static void move64bits(uint64_t* from, uint64_t* to) {
+ *to += *from;
+ *from = 0;
+}
+
+void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats* from,
+ grpc_transport_one_way_stats* to) {
+ move64bits(&from->framing_bytes, &to->framing_bytes);
+ move64bits(&from->data_bytes, &to->data_bytes);
+ move64bits(&from->header_bytes, &to->header_bytes);
+}
+
+void grpc_transport_move_stats(grpc_transport_stream_stats* from,
+ grpc_transport_stream_stats* to) {
+ grpc_transport_move_one_way_stats(&from->incoming, &to->incoming);
+ grpc_transport_move_one_way_stats(&from->outgoing, &to->outgoing);
+ to->latency = std::exchange(from->latency, gpr_inf_future(GPR_TIMESPAN));
+}
diff --git a/src/core/lib/transport/call_final_info.h b/src/core/lib/transport/call_final_info.h
new file mode 100644
index 00000000000..8f7165f05f7
--- /dev/null
+++ b/src/core/lib/transport/call_final_info.h
@@ -0,0 +1,54 @@
+// Copyright 2024 gRPC authors.
+//
+// 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 GRPC_SRC_CORE_LIB_TRANSPORT_CALL_FINAL_INFO_H
+#define GRPC_SRC_CORE_LIB_TRANSPORT_CALL_FINAL_INFO_H
+
+#include
+
+#include
+
+#include
+#include
+
+struct grpc_transport_one_way_stats {
+ uint64_t framing_bytes = 0;
+ uint64_t data_bytes = 0;
+ uint64_t header_bytes = 0;
+};
+
+struct grpc_transport_stream_stats {
+ grpc_transport_one_way_stats incoming;
+ grpc_transport_one_way_stats outgoing;
+ gpr_timespec latency = gpr_inf_future(GPR_TIMESPAN);
+};
+
+void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats* from,
+ grpc_transport_one_way_stats* to);
+
+void grpc_transport_move_stats(grpc_transport_stream_stats* from,
+ grpc_transport_stream_stats* to);
+
+struct grpc_call_stats {
+ grpc_transport_stream_stats transport_stream_stats;
+ gpr_timespec latency; // From call creating to enqueing of received status
+};
+/// Information about the call upon completion.
+struct grpc_call_final_info {
+ grpc_call_stats stats;
+ grpc_status_code final_status = GRPC_STATUS_OK;
+ const char* error_string = nullptr;
+};
+
+#endif // GRPC_SRC_CORE_LIB_TRANSPORT_CALL_FINAL_INFO_H
diff --git a/src/core/lib/transport/transport.cc b/src/core/lib/transport/transport.cc
index bad5c4b8590..b355644d1ad 100644
--- a/src/core/lib/transport/transport.cc
+++ b/src/core/lib/transport/transport.cc
@@ -86,25 +86,6 @@ void grpc_stream_ref_init(grpc_stream_refcount* refcount, int /*initial_refs*/,
: nullptr);
}
-static void move64bits(uint64_t* from, uint64_t* to) {
- *to += *from;
- *from = 0;
-}
-
-void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats* from,
- grpc_transport_one_way_stats* to) {
- move64bits(&from->framing_bytes, &to->framing_bytes);
- move64bits(&from->data_bytes, &to->data_bytes);
- move64bits(&from->header_bytes, &to->header_bytes);
-}
-
-void grpc_transport_move_stats(grpc_transport_stream_stats* from,
- grpc_transport_stream_stats* to) {
- grpc_transport_move_one_way_stats(&from->incoming, &to->incoming);
- grpc_transport_move_one_way_stats(&from->outgoing, &to->outgoing);
- to->latency = std::exchange(from->latency, gpr_inf_future(GPR_TIMESPAN));
-}
-
namespace grpc_core {
void Transport::SetPollingEntity(grpc_stream* stream,
grpc_polling_entity* pollset_or_pollset_set) {
diff --git a/src/core/lib/transport/transport.h b/src/core/lib/transport/transport.h
index 5a7e09bdb43..62a4085458c 100644
--- a/src/core/lib/transport/transport.h
+++ b/src/core/lib/transport/transport.h
@@ -61,6 +61,7 @@
#include "src/core/lib/promise/status_flag.h"
#include "src/core/lib/resource_quota/arena.h"
#include "src/core/lib/slice/slice_buffer.h"
+#include "src/core/lib/transport/call_final_info.h"
#include "src/core/lib/transport/connectivity_state.h"
#include "src/core/lib/transport/metadata_batch.h"
#include "src/core/lib/transport/transport_fwd.h"
@@ -679,24 +680,6 @@ inline void grpc_stream_unref(grpc_stream_refcount* refcount) {
grpc_slice grpc_slice_from_stream_owned_buffer(grpc_stream_refcount* refcount,
void* buffer, size_t length);
-struct grpc_transport_one_way_stats {
- uint64_t framing_bytes = 0;
- uint64_t data_bytes = 0;
- uint64_t header_bytes = 0;
-};
-
-struct grpc_transport_stream_stats {
- grpc_transport_one_way_stats incoming;
- grpc_transport_one_way_stats outgoing;
- gpr_timespec latency = gpr_inf_future(GPR_TIMESPAN);
-};
-
-void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats* from,
- grpc_transport_one_way_stats* to);
-
-void grpc_transport_move_stats(grpc_transport_stream_stats* from,
- grpc_transport_stream_stats* to);
-
// This struct (which is present in both grpc_transport_stream_op_batch
// and grpc_transport_op_batch) is a convenience to allow filters or
// transports to schedule a closure related to a particular batch without
diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py
index b6f72dccf97..021c7350538 100644
--- a/src/python/grpcio/grpc_core_dependencies.py
+++ b/src/python/grpcio/grpc_core_dependencies.py
@@ -807,6 +807,7 @@ CORE_SOURCE_FILES = [
'src/core/lib/surface/version.cc',
'src/core/lib/transport/batch_builder.cc',
'src/core/lib/transport/bdp_estimator.cc',
+ 'src/core/lib/transport/call_final_info.cc',
'src/core/lib/transport/connectivity_state.cc',
'src/core/lib/transport/error_utils.cc',
'src/core/lib/transport/handshaker.cc',
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index 8d399e8d873..608c24cf634 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -2888,6 +2888,8 @@ src/core/lib/transport/batch_builder.cc \
src/core/lib/transport/batch_builder.h \
src/core/lib/transport/bdp_estimator.cc \
src/core/lib/transport/bdp_estimator.h \
+src/core/lib/transport/call_final_info.cc \
+src/core/lib/transport/call_final_info.h \
src/core/lib/transport/connectivity_state.cc \
src/core/lib/transport/connectivity_state.h \
src/core/lib/transport/custom_metadata.h \
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index 095b92ed667..fcfa3664029 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -2669,6 +2669,8 @@ src/core/lib/transport/batch_builder.cc \
src/core/lib/transport/batch_builder.h \
src/core/lib/transport/bdp_estimator.cc \
src/core/lib/transport/bdp_estimator.h \
+src/core/lib/transport/call_final_info.cc \
+src/core/lib/transport/call_final_info.h \
src/core/lib/transport/connectivity_state.cc \
src/core/lib/transport/connectivity_state.h \
src/core/lib/transport/custom_metadata.h \