Commit c97a51a3 authored by Yutaka Hirano's avatar Yutaka Hirano Committed by Commit Bot

Record QuicTransport use counters manually

We're introducing a new interface, WebTransport, which will replace
QuicTransport. WebTransport may also cover HTTP3Transport, so record
use counters rather than relying on MeasureAs.

Bug: 1123413
Change-Id: I17c22599eb82463756851a8d781eb6bebef50ac3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2399165
Auto-Submit: Yutaka Hirano <yhirano@chromium.org>
Commit-Queue: Adam Rice <ricea@chromium.org>
Reviewed-by: default avatarAdam Rice <ricea@chromium.org>
Cr-Commit-Position: refs/heads/master@{#805523}
parent f65be9c7
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_dtls_fingerprint.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_dtls_fingerprint.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/csp/content_security_policy.h" #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
#include "third_party/blink/renderer/core/frame/web_feature.h"
#include "third_party/blink/renderer/core/streams/readable_stream.h" #include "third_party/blink/renderer/core/streams/readable_stream.h"
#include "third_party/blink/renderer/core/streams/readable_stream_default_controller_with_script_scope.h" #include "third_party/blink/renderer/core/streams/readable_stream_default_controller_with_script_scope.h"
#include "third_party/blink/renderer/core/streams/underlying_sink_base.h" #include "third_party/blink/renderer/core/streams/underlying_sink_base.h"
...@@ -347,6 +348,7 @@ QuicTransport* QuicTransport::Create(ScriptState* script_state, ...@@ -347,6 +348,7 @@ QuicTransport* QuicTransport::Create(ScriptState* script_state,
ExceptionState& exception_state) { ExceptionState& exception_state) {
DVLOG(1) << "QuicTransport::Create() url=" << url; DVLOG(1) << "QuicTransport::Create() url=" << url;
DCHECK(options); DCHECK(options);
ExecutionContext::From(script_state)->CountUse(WebFeature::kQuicTransport);
auto* transport = auto* transport =
MakeGarbageCollected<QuicTransport>(PassKey(), script_state, url); MakeGarbageCollected<QuicTransport>(PassKey(), script_state, url);
transport->Init(url, *options, exception_state); transport->Init(url, *options, exception_state);
...@@ -372,6 +374,7 @@ ScriptPromise QuicTransport::createSendStream(ScriptState* script_state, ...@@ -372,6 +374,7 @@ ScriptPromise QuicTransport::createSendStream(ScriptState* script_state,
ExceptionState& exception_state) { ExceptionState& exception_state) {
DVLOG(1) << "QuicTransport::createSendStream() this=" << this; DVLOG(1) << "QuicTransport::createSendStream() this=" << this;
GetExecutionContext()->CountUse(WebFeature::kQuicTransportStreamApis);
if (!quic_transport_.is_bound()) { if (!quic_transport_.is_bound()) {
// TODO(ricea): Should we wait if we're still connecting? // TODO(ricea): Should we wait if we're still connecting?
exception_state.ThrowDOMException(DOMExceptionCode::kNetworkError, exception_state.ThrowDOMException(DOMExceptionCode::kNetworkError,
...@@ -398,11 +401,17 @@ ScriptPromise QuicTransport::createSendStream(ScriptState* script_state, ...@@ -398,11 +401,17 @@ ScriptPromise QuicTransport::createSendStream(ScriptState* script_state,
return resolver->Promise(); return resolver->Promise();
} }
ReadableStream* QuicTransport::receiveStreams() {
GetExecutionContext()->CountUse(WebFeature::kQuicTransportStreamApis);
return received_streams_;
}
ScriptPromise QuicTransport::createBidirectionalStream( ScriptPromise QuicTransport::createBidirectionalStream(
ScriptState* script_state, ScriptState* script_state,
ExceptionState& exception_state) { ExceptionState& exception_state) {
DVLOG(1) << "QuicTransport::createBidirectionalStream() this=" << this; DVLOG(1) << "QuicTransport::createBidirectionalStream() this=" << this;
GetExecutionContext()->CountUse(WebFeature::kQuicTransportStreamApis);
if (!quic_transport_.is_bound()) { if (!quic_transport_.is_bound()) {
// TODO(ricea): We should wait if we are still connecting. // TODO(ricea): We should wait if we are still connecting.
exception_state.ThrowDOMException(DOMExceptionCode::kNetworkError, exception_state.ThrowDOMException(DOMExceptionCode::kNetworkError,
...@@ -442,6 +451,21 @@ ScriptPromise QuicTransport::createBidirectionalStream( ...@@ -442,6 +451,21 @@ ScriptPromise QuicTransport::createBidirectionalStream(
return resolver->Promise(); return resolver->Promise();
} }
ReadableStream* QuicTransport::receiveBidirectionalStreams() {
GetExecutionContext()->CountUse(WebFeature::kQuicTransportStreamApis);
return received_bidirectional_streams_;
}
WritableStream* QuicTransport::sendDatagrams() {
GetExecutionContext()->CountUse(WebFeature::kQuicTransportDatagramApis);
return outgoing_datagrams_;
}
ReadableStream* QuicTransport::receiveDatagrams() {
GetExecutionContext()->CountUse(WebFeature::kQuicTransportDatagramApis);
return received_datagrams_;
}
void QuicTransport::close(const WebTransportCloseInfo* close_info) { void QuicTransport::close(const WebTransportCloseInfo* close_info) {
DVLOG(1) << "QuicTransport::close() this=" << this; DVLOG(1) << "QuicTransport::close() this=" << this;
// TODO(ricea): Send |close_info| to the network service. // TODO(ricea): Send |close_info| to the network service.
......
...@@ -60,15 +60,13 @@ class MODULES_EXPORT QuicTransport final ...@@ -60,15 +60,13 @@ class MODULES_EXPORT QuicTransport final
// QuicTransport IDL implementation. // QuicTransport IDL implementation.
ScriptPromise createSendStream(ScriptState*, ExceptionState&); ScriptPromise createSendStream(ScriptState*, ExceptionState&);
ReadableStream* receiveStreams() { return received_streams_; } ReadableStream* receiveStreams();
ScriptPromise createBidirectionalStream(ScriptState*, ExceptionState&); ScriptPromise createBidirectionalStream(ScriptState*, ExceptionState&);
ReadableStream* receiveBidirectionalStreams() { ReadableStream* receiveBidirectionalStreams();
return received_bidirectional_streams_;
}
WritableStream* sendDatagrams() { return outgoing_datagrams_; } WritableStream* sendDatagrams();
ReadableStream* receiveDatagrams() { return received_datagrams_; } ReadableStream* receiveDatagrams();
void close(const WebTransportCloseInfo*); void close(const WebTransportCloseInfo*);
ScriptPromise ready() { return ready_; } ScriptPromise ready() { return ready_; }
ScriptPromise closed() { return closed_; } ScriptPromise closed() { return closed_; }
......
...@@ -8,27 +8,27 @@ ...@@ -8,27 +8,27 @@
Exposed=(Window,Worker), Exposed=(Window,Worker),
RuntimeEnabled=QuicTransport RuntimeEnabled=QuicTransport
] interface QuicTransport { ] interface QuicTransport {
[CallWith=ScriptState, RaisesException, MeasureAs=QuicTransport] constructor(USVString url, optional QuicTransportOptions options = {}); [CallWith=ScriptState, RaisesException] constructor(USVString url, optional QuicTransportOptions options = {});
// QuicTransport is the first, and at this moment only, transport which is // QuicTransport is the first, and at this moment only, transport which is
// implemented. In the (draft) spec there are many mix-in interfaces which // implemented. In the (draft) spec there are many mix-in interfaces which
// QuicTransport includes, but we define all their methods/attributes here // QuicTransport includes, but we define all their methods/attributes here
// for simplicity. // for simplicity.
// From UnidirectionalStreamsTransport // From UnidirectionalStreamsTransport
[CallWith=ScriptState, RaisesException, MeasureAs=QuicTransportStreamApis] Promise<SendStream> [CallWith=ScriptState, RaisesException] Promise<SendStream>
createSendStream(); createSendStream();
// TODO(ricea): This should probably be changed to an attribute in the // TODO(ricea): This should probably be changed to an attribute in the
// standard. // standard.
[MeasureAs=QuicTransportStreamApis] ReadableStream receiveStreams(); ReadableStream receiveStreams();
// From BidirectionalStreamsTransport // From BidirectionalStreamsTransport
[CallWith=ScriptState, RaisesException, MeasureAs=QuicTransportStreamApis] Promise<BidirectionalStream> [CallWith=ScriptState, RaisesException] Promise<BidirectionalStream>
createBidirectionalStream(); createBidirectionalStream();
[MeasureAs=QuicTransportStreamApis] ReadableStream receiveBidirectionalStreams(); ReadableStream receiveBidirectionalStreams();
// From DatagramTransport mixin // From DatagramTransport mixin
[MeasureAs=QuicTransportDatagramApis] WritableStream sendDatagrams(); WritableStream sendDatagrams();
[MeasureAs=QuicTransportDatagramApis] ReadableStream receiveDatagrams(); ReadableStream receiveDatagrams();
// From WebTransport mixin // From WebTransport mixin
void close(optional WebTransportCloseInfo closeInfo = {}); void close(optional WebTransportCloseInfo closeInfo = {});
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment