@@ -108,6 +108,8 @@ const { |
108 | 108 | IDX_STATS_STREAM_MAX_OFFSET_ACK, |
109 | 109 | IDX_STATS_STREAM_MAX_OFFSET_RECV, |
110 | 110 | IDX_STATS_STREAM_FINAL_SIZE, |
| 111 | + IDX_STATS_STREAM_BYTES_ACCUMULATED, |
| 112 | + IDX_STATS_STREAM_MAX_BYTES_ACCUMULATED, |
111 | 113 | IDX_STATS_STREAM_COUNT, |
112 | 114 | } = internalBinding('quic'); |
113 | 115 |
|
@@ -166,6 +168,8 @@ assert(IDX_STATS_STREAM_MAX_OFFSET !== undefined); |
166 | 168 | assert(IDX_STATS_STREAM_MAX_OFFSET_ACK !== undefined); |
167 | 169 | assert(IDX_STATS_STREAM_MAX_OFFSET_RECV !== undefined); |
168 | 170 | assert(IDX_STATS_STREAM_FINAL_SIZE !== undefined); |
| 171 | +assert(IDX_STATS_STREAM_BYTES_ACCUMULATED !== undefined); |
| 172 | +assert(IDX_STATS_STREAM_MAX_BYTES_ACCUMULATED !== undefined); |
169 | 173 | assert(IDX_STATS_STREAM_COUNT !== undefined); |
170 | 174 | assert(IDX_STATS_SESSION_COUNT !== undefined); |
171 | 175 |
|
@@ -889,6 +893,18 @@ class QuicStreamStats { |
889 | 893 | return this.#handle[this.#offset + IDX_STATS_STREAM_FINAL_SIZE]; |
890 | 894 | } |
891 | 895 |
|
| 896 | + /** @type {bigint} Current bytes in the receive accumulation buffer. */ |
| 897 | + get bytesAccumulated() { |
| 898 | + assertIsQuicStreamStats(this); |
| 899 | + return this.#handle[this.#offset + IDX_STATS_STREAM_BYTES_ACCUMULATED]; |
| 900 | + } |
| 901 | + |
| 902 | + /** @type {bigint} Peak bytes accumulated over the stream's lifetime. */ |
| 903 | + get maxBytesAccumulated() { |
| 904 | + assertIsQuicStreamStats(this); |
| 905 | + return this.#handle[this.#offset + IDX_STATS_STREAM_MAX_BYTES_ACCUMULATED]; |
| 906 | + } |
| 907 | + |
892 | 908 | toString() { |
893 | 909 | return JSONStringify(this.toJSON()); |
894 | 910 | } |
@@ -907,6 +923,8 @@ class QuicStreamStats { |
907 | 923 | maxOffsetAcknowledged, |
908 | 924 | maxOffsetReceived, |
909 | 925 | finalSize, |
| 926 | + bytesAccumulated, |
| 927 | + maxBytesAccumulated, |
910 | 928 | } = this; |
911 | 929 | return { |
912 | 930 | __proto__: null, |
@@ -924,6 +942,8 @@ class QuicStreamStats { |
924 | 942 | maxOffsetAcknowledged: `${maxOffsetAcknowledged}`, |
925 | 943 | maxOffsetReceived: `${maxOffsetReceived}`, |
926 | 944 | finalSize: `${finalSize}`, |
| 945 | + bytesAccumulated: `${bytesAccumulated}`, |
| 946 | + maxBytesAccumulated: `${maxBytesAccumulated}`, |
927 | 947 | }; |
928 | 948 | } |
929 | 949 |
|
@@ -950,6 +970,8 @@ class QuicStreamStats { |
950 | 970 | maxOffsetAcknowledged, |
951 | 971 | maxOffsetReceived, |
952 | 972 | finalSize, |
| 973 | + bytesAccumulated, |
| 974 | + maxBytesAccumulated, |
953 | 975 | } = this; |
954 | 976 |
|
955 | 977 | return `QuicStreamStats ${inspect({ |
@@ -965,6 +987,8 @@ class QuicStreamStats { |
965 | 987 | maxOffsetAcknowledged, |
966 | 988 | maxOffsetReceived, |
967 | 989 | finalSize, |
| 990 | + bytesAccumulated, |
| 991 | + maxBytesAccumulated, |
968 | 992 | }, opts)}`; |
969 | 993 | } |
970 | 994 |
|
@@ -990,7 +1014,7 @@ class QuicStreamStats { |
990 | 1014 | // Creates an immediately disconnected QuicStreamStats object. Used when |
991 | 1015 | // lazily creating stats for a stream that has already been destroyed. |
992 | 1016 | static [kCreateDisconnected]() { |
993 | | - const count = IDX_STATS_STREAM_FINAL_SIZE + 1; |
| 1017 | + const count = IDX_STATS_STREAM_COUNT; |
994 | 1018 | const stats = new QuicStreamStats(kPrivateConstructor, new BigUint64Array(count), 0); |
995 | 1019 | stats.#disconnected = true; |
996 | 1020 | return stats; |
|