Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: net/quic/chromium/quic_stream_factory.cc

Issue 2238393002: QUIC - Measure how long the cert verification job has taken when we race (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/chromium/quic_stream_factory.h" 5 #include "net/quic/chromium/quic_stream_factory.h"
6 6
7 #include <openssl/aead.h> 7 #include <openssl/aead.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <tuple> 10 #include <tuple>
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 CertVerifierJob* job_; 222 CertVerifierJob* job_;
223 }; 223 };
224 224
225 CertVerifierJob(const QuicServerId& server_id, 225 CertVerifierJob(const QuicServerId& server_id,
226 int cert_verify_flags, 226 int cert_verify_flags,
227 const BoundNetLog& net_log) 227 const BoundNetLog& net_log)
228 : server_id_(server_id), 228 : server_id_(server_id),
229 verify_callback_(nullptr), 229 verify_callback_(nullptr),
230 verify_context_(base::WrapUnique( 230 verify_context_(base::WrapUnique(
231 new ProofVerifyContextChromium(cert_verify_flags, net_log))), 231 new ProofVerifyContextChromium(cert_verify_flags, net_log))),
232 start_time_(base::TimeTicks::Now()),
232 net_log_(net_log), 233 net_log_(net_log),
233 weak_factory_(this) {} 234 weak_factory_(this) {}
234 235
235 ~CertVerifierJob() { 236 ~CertVerifierJob() {
236 if (verify_callback_) 237 if (verify_callback_)
237 verify_callback_->Cancel(); 238 verify_callback_->Cancel();
238 } 239 }
239 240
240 // Starts verification of certs cached in the |crypto_config|. 241 // Starts verification of certs cached in the |crypto_config|.
241 QuicAsyncStatus Run(QuicCryptoClientConfig* crypto_config, 242 QuicAsyncStatus Run(QuicCryptoClientConfig* crypto_config,
242 const CompletionCallback& callback) { 243 const CompletionCallback& callback) {
243 QuicCryptoClientConfig::CachedState* cached = 244 QuicCryptoClientConfig::CachedState* cached =
244 crypto_config->LookupOrCreate(server_id_); 245 crypto_config->LookupOrCreate(server_id_);
245 ProofVerifierCallbackImpl* verify_callback = 246 ProofVerifierCallbackImpl* verify_callback =
246 new ProofVerifierCallbackImpl(this); 247 new ProofVerifierCallbackImpl(this);
247 QuicAsyncStatus status = crypto_config->proof_verifier()->VerifyCertChain( 248 QuicAsyncStatus status = crypto_config->proof_verifier()->VerifyCertChain(
248 server_id_.host(), cached->certs(), verify_context_.get(), 249 server_id_.host(), cached->certs(), verify_context_.get(),
249 &verify_error_details_, &verify_details_, 250 &verify_error_details_, &verify_details_,
250 std::unique_ptr<ProofVerifierCallback>(verify_callback)); 251 std::unique_ptr<ProofVerifierCallback>(verify_callback));
251 if (status == QUIC_PENDING) { 252 if (status == QUIC_PENDING) {
252 verify_callback_ = verify_callback; 253 verify_callback_ = verify_callback;
253 callback_ = callback; 254 callback_ = callback;
254 } 255 }
255 return status; 256 return status;
256 } 257 }
257 258
258 void OnComplete() { 259 void OnComplete() {
260 UMA_HISTOGRAM_TIMES("Net.QuicSession.CertVerifierJob.CompleteTime",
261 base::TimeTicks::Now() - start_time_);
259 if (!callback_.is_null()) 262 if (!callback_.is_null())
260 callback_.Run(OK); 263 callback_.Run(OK);
261 } 264 }
262 265
263 const QuicServerId& server_id() const { return server_id_; } 266 const QuicServerId& server_id() const { return server_id_; }
264 267
265 private: 268 private:
266 QuicServerId server_id_; 269 QuicServerId server_id_;
267 ProofVerifierCallbackImpl* verify_callback_; 270 ProofVerifierCallbackImpl* verify_callback_;
268 std::unique_ptr<ProofVerifyContext> verify_context_; 271 std::unique_ptr<ProofVerifyContext> verify_context_;
269 std::unique_ptr<ProofVerifyDetails> verify_details_; 272 std::unique_ptr<ProofVerifyDetails> verify_details_;
270 std::string verify_error_details_; 273 std::string verify_error_details_;
274 base::TimeTicks start_time_;
271 const BoundNetLog net_log_; 275 const BoundNetLog net_log_;
272 CompletionCallback callback_; 276 CompletionCallback callback_;
273 base::WeakPtrFactory<CertVerifierJob> weak_factory_; 277 base::WeakPtrFactory<CertVerifierJob> weak_factory_;
274 278
275 DISALLOW_COPY_AND_ASSIGN(CertVerifierJob); 279 DISALLOW_COPY_AND_ASSIGN(CertVerifierJob);
276 }; 280 };
277 281
278 // Responsible for creating a new QUIC session to the specified server, and 282 // Responsible for creating a new QUIC session to the specified server, and
279 // for notifying any associated requests when complete. 283 // for notifying any associated requests when complete.
280 class QuicStreamFactory::Job { 284 class QuicStreamFactory::Job {
(...skipping 1757 matching lines...) Expand 10 before | Expand all | Expand 10 after
2038 // Since the session was active, there's no longer an 2042 // Since the session was active, there's no longer an
2039 // HttpStreamFactoryImpl::Job running which can mark it broken, unless the TCP 2043 // HttpStreamFactoryImpl::Job running which can mark it broken, unless the TCP
2040 // job also fails. So to avoid not using QUIC when we otherwise could, we mark 2044 // job also fails. So to avoid not using QUIC when we otherwise could, we mark
2041 // it as recently broken, which means that 0-RTT will be disabled but we'll 2045 // it as recently broken, which means that 0-RTT will be disabled but we'll
2042 // still race. 2046 // still race.
2043 http_server_properties_->MarkAlternativeServiceRecentlyBroken( 2047 http_server_properties_->MarkAlternativeServiceRecentlyBroken(
2044 alternative_service); 2048 alternative_service);
2045 } 2049 }
2046 2050
2047 } // namespace net 2051 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698