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

Side by Side Diff: net/cert/multi_threaded_cert_verifier.cc

Issue 225583009: Add Net.CertVerifier_First_Job_Latency metric. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sleevi comments. Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « net/cert/multi_threaded_cert_verifier.h ('k') | 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/cert/multi_threaded_cert_verifier.h" 5 #include "net/cert/multi_threaded_cert_verifier.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 341
342 void AddRequest(CertVerifierRequest* request) { 342 void AddRequest(CertVerifierRequest* request) {
343 request->net_log().AddEvent( 343 request->net_log().AddEvent(
344 NetLog::TYPE_CERT_VERIFIER_REQUEST_BOUND_TO_JOB, 344 NetLog::TYPE_CERT_VERIFIER_REQUEST_BOUND_TO_JOB,
345 net_log_.source().ToEventParametersCallback()); 345 net_log_.source().ToEventParametersCallback());
346 346
347 requests_.push_back(request); 347 requests_.push_back(request);
348 } 348 }
349 349
350 void HandleResult( 350 void HandleResult(
351 const MultiThreadedCertVerifier::CachedResult& verify_result) { 351 const MultiThreadedCertVerifier::CachedResult& verify_result,
352 bool is_first_job) {
352 worker_ = NULL; 353 worker_ = NULL;
353 net_log_.EndEvent(NetLog::TYPE_CERT_VERIFIER_JOB); 354 net_log_.EndEvent(NetLog::TYPE_CERT_VERIFIER_JOB);
355 base::TimeDelta latency = base::TimeTicks::Now() - start_time_;
354 UMA_HISTOGRAM_CUSTOM_TIMES("Net.CertVerifier_Job_Latency", 356 UMA_HISTOGRAM_CUSTOM_TIMES("Net.CertVerifier_Job_Latency",
355 base::TimeTicks::Now() - start_time_, 357 latency,
356 base::TimeDelta::FromMilliseconds(1), 358 base::TimeDelta::FromMilliseconds(1),
357 base::TimeDelta::FromMinutes(10), 359 base::TimeDelta::FromMinutes(10),
358 100); 360 100);
361 if (is_first_job) {
362 UMA_HISTOGRAM_CUSTOM_TIMES("Net.CertVerifier_First_Job_Latency",
363 latency,
364 base::TimeDelta::FromMilliseconds(1),
365 base::TimeDelta::FromMinutes(10),
366 100);
367 }
359 PostAll(verify_result); 368 PostAll(verify_result);
360 } 369 }
361 370
362 private: 371 private:
363 void PostAll(const MultiThreadedCertVerifier::CachedResult& verify_result) { 372 void PostAll(const MultiThreadedCertVerifier::CachedResult& verify_result) {
364 std::vector<CertVerifierRequest*> requests; 373 std::vector<CertVerifierRequest*> requests;
365 requests_.swap(requests); 374 requests_.swap(requests);
366 375
367 for (std::vector<CertVerifierRequest*>::iterator 376 for (std::vector<CertVerifierRequest*>::iterator
368 i = requests.begin(); i != requests.end(); i++) { 377 i = requests.begin(); i != requests.end(); i++) {
(...skipping 15 matching lines...) Expand all
384 393
385 const base::TimeTicks start_time_; 394 const base::TimeTicks start_time_;
386 std::vector<CertVerifierRequest*> requests_; 395 std::vector<CertVerifierRequest*> requests_;
387 CertVerifierWorker* worker_; 396 CertVerifierWorker* worker_;
388 const BoundNetLog net_log_; 397 const BoundNetLog net_log_;
389 }; 398 };
390 399
391 MultiThreadedCertVerifier::MultiThreadedCertVerifier( 400 MultiThreadedCertVerifier::MultiThreadedCertVerifier(
392 CertVerifyProc* verify_proc) 401 CertVerifyProc* verify_proc)
393 : cache_(kMaxCacheEntries), 402 : cache_(kMaxCacheEntries),
403 first_job_(NULL),
394 requests_(0), 404 requests_(0),
395 cache_hits_(0), 405 cache_hits_(0),
396 inflight_joins_(0), 406 inflight_joins_(0),
397 verify_proc_(verify_proc), 407 verify_proc_(verify_proc),
398 trust_anchor_provider_(NULL) { 408 trust_anchor_provider_(NULL) {
399 CertDatabase::GetInstance()->AddObserver(this); 409 CertDatabase::GetInstance()->AddObserver(this);
400 } 410 }
401 411
402 MultiThreadedCertVerifier::~MultiThreadedCertVerifier() { 412 MultiThreadedCertVerifier::~MultiThreadedCertVerifier() {
403 STLDeleteValues(&inflight_); 413 STLDeleteValues(&inflight_);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 BoundNetLog::Make(net_log.net_log(), NetLog::SOURCE_CERT_VERIFIER_JOB)); 477 BoundNetLog::Make(net_log.net_log(), NetLog::SOURCE_CERT_VERIFIER_JOB));
468 if (!worker->Start()) { 478 if (!worker->Start()) {
469 delete job; 479 delete job;
470 delete worker; 480 delete worker;
471 *out_req = NULL; 481 *out_req = NULL;
472 // TODO(wtc): log to the NetLog. 482 // TODO(wtc): log to the NetLog.
473 LOG(ERROR) << "CertVerifierWorker couldn't be started."; 483 LOG(ERROR) << "CertVerifierWorker couldn't be started.";
474 return ERR_INSUFFICIENT_RESOURCES; // Just a guess. 484 return ERR_INSUFFICIENT_RESOURCES; // Just a guess.
475 } 485 }
476 inflight_.insert(std::make_pair(key, job)); 486 inflight_.insert(std::make_pair(key, job));
487 if (requests_ == 1) {
488 // Cleared in HandleResult.
489 first_job_ = job;
490 }
477 } 491 }
478 492
479 CertVerifierRequest* request = 493 CertVerifierRequest* request =
480 new CertVerifierRequest(callback, verify_result, net_log); 494 new CertVerifierRequest(callback, verify_result, net_log);
481 job->AddRequest(request); 495 job->AddRequest(request);
482 *out_req = request; 496 *out_req = request;
483 return ERR_IO_PENDING; 497 return ERR_IO_PENDING;
484 } 498 }
485 499
486 void MultiThreadedCertVerifier::CancelRequest(RequestHandle req) { 500 void MultiThreadedCertVerifier::CancelRequest(RequestHandle req) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 CacheValidityPeriod(now, now + base::TimeDelta::FromSeconds(kTTLSecs))); 558 CacheValidityPeriod(now, now + base::TimeDelta::FromSeconds(kTTLSecs)));
545 559
546 std::map<RequestParams, CertVerifierJob*>::iterator j; 560 std::map<RequestParams, CertVerifierJob*>::iterator j;
547 j = inflight_.find(key); 561 j = inflight_.find(key);
548 if (j == inflight_.end()) { 562 if (j == inflight_.end()) {
549 NOTREACHED(); 563 NOTREACHED();
550 return; 564 return;
551 } 565 }
552 CertVerifierJob* job = j->second; 566 CertVerifierJob* job = j->second;
553 inflight_.erase(j); 567 inflight_.erase(j);
568 bool is_first_job = false;
569 if (first_job_ == job) {
570 is_first_job = true;
571 first_job_ = NULL;
572 }
554 573
555 job->HandleResult(cached_result); 574 job->HandleResult(cached_result, is_first_job);
556 delete job; 575 delete job;
557 } 576 }
558 577
559 void MultiThreadedCertVerifier::OnCACertChanged( 578 void MultiThreadedCertVerifier::OnCACertChanged(
560 const X509Certificate* cert) { 579 const X509Certificate* cert) {
561 DCHECK(CalledOnValidThread()); 580 DCHECK(CalledOnValidThread());
562 581
563 ClearCache(); 582 ClearCache();
564 } 583 }
565 584
566 } // namespace net 585 } // namespace net
OLDNEW
« no previous file with comments | « net/cert/multi_threaded_cert_verifier.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698