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

Side by Side Diff: components/safe_browsing_db/v4_local_database_manager.cc

Issue 2441923003: PVer4: Add UMA metrics for time taken to: load DB, do prefix check, (Closed)
Patch Set: Add new histograms to histograms.xml Created 4 years, 1 month 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 // This file should not be build on Android but is currently getting built. 5 // This file should not be build on Android but is currently getting built.
6 // TODO(vakh): Fix that: http://crbug.com/621647 6 // TODO(vakh): Fix that: http://crbug.com/621647
7 7
8 #include "components/safe_browsing_db/v4_local_database_manager.h" 8 #include "components/safe_browsing_db/v4_local_database_manager.h"
9 9
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/callback.h" 13 #include "base/callback.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "base/metrics/histogram_macros.h"
16 #include "components/safe_browsing_db/v4_feature_list.h" 17 #include "components/safe_browsing_db/v4_feature_list.h"
17 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
18 19
19 using content::BrowserThread; 20 using content::BrowserThread;
21 using base::TimeTicks;
20 22
21 namespace safe_browsing { 23 namespace safe_browsing {
22 24
23 namespace { 25 namespace {
24 26
25 const ThreatSeverity kLeastSeverity = 27 const ThreatSeverity kLeastSeverity =
26 std::numeric_limits<ThreatSeverity>::max(); 28 std::numeric_limits<ThreatSeverity>::max();
27 29
28 ListInfos GetListInfos() { 30 ListInfos GetListInfos() {
29 // NOTE(vakh): When adding a store here, add the corresponding store-specific 31 // NOTE(vakh): When adding a store here, add the corresponding store-specific
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 } 332 }
331 333
332 bool V4LocalDatabaseManager::GetPrefixMatches( 334 bool V4LocalDatabaseManager::GetPrefixMatches(
333 const std::unique_ptr<PendingCheck>& check, 335 const std::unique_ptr<PendingCheck>& check,
334 FullHashToStoreAndHashPrefixesMap* full_hash_to_store_and_hash_prefixes) { 336 FullHashToStoreAndHashPrefixesMap* full_hash_to_store_and_hash_prefixes) {
335 DCHECK_CURRENTLY_ON(BrowserThread::IO); 337 DCHECK_CURRENTLY_ON(BrowserThread::IO);
336 338
337 DCHECK(enabled_); 339 DCHECK(enabled_);
338 DCHECK(v4_database_); 340 DCHECK(v4_database_);
339 DCHECK_GT(ClientCallbackType::CHECK_MAX, check->client_callback_type); 341 DCHECK_GT(ClientCallbackType::CHECK_MAX, check->client_callback_type);
342 full_hash_to_store_and_hash_prefixes->clear();
340 343
344 const base::TimeTicks before = TimeTicks::Now();
341 if (check->client_callback_type == ClientCallbackType::CHECK_BROWSE_URL) { 345 if (check->client_callback_type == ClientCallbackType::CHECK_BROWSE_URL) {
342 std::unordered_set<FullHash> full_hashes; 346 std::unordered_set<FullHash> full_hashes;
343 V4ProtocolManagerUtil::UrlToFullHashes(check->url, &full_hashes); 347 V4ProtocolManagerUtil::UrlToFullHashes(check->url, &full_hashes);
344 348
345 StoreAndHashPrefixes matched_store_and_hash_prefixes; 349 StoreAndHashPrefixes matched_store_and_hash_prefixes;
346 for (const auto& full_hash : full_hashes) { 350 for (const auto& full_hash : full_hashes) {
347 matched_store_and_hash_prefixes.clear(); 351 matched_store_and_hash_prefixes.clear();
348 v4_database_->GetStoresMatchingFullHash(full_hash, check->stores_to_check, 352 v4_database_->GetStoresMatchingFullHash(full_hash, check->stores_to_check,
349 &matched_store_and_hash_prefixes); 353 &matched_store_and_hash_prefixes);
350 if (!matched_store_and_hash_prefixes.empty()) { 354 if (!matched_store_and_hash_prefixes.empty()) {
351 (*full_hash_to_store_and_hash_prefixes)[full_hash] = 355 (*full_hash_to_store_and_hash_prefixes)[full_hash] =
352 matched_store_and_hash_prefixes; 356 matched_store_and_hash_prefixes;
353 } 357 }
354 } 358 }
355 359 } else {
356 // No hash prefixes found in the local database so that resource must be 360 NOTREACHED() << "Unexpected client_callback_type encountered";
357 // safe.
358 return !full_hash_to_store_and_hash_prefixes->empty();
359 } 361 }
360 362
361 NOTREACHED() << "Unexpected client_callback_type encountered"; 363 // TODO(vakh): only log SafeBrowsing.V4GetPrefixMatches.Time once PVer3 code
362 return false; 364 // is removed.
365 base::TimeDelta diff = TimeTicks::Now() - before;
366 UMA_HISTOGRAM_TIMES("SB2.FilterCheck", diff);
367 UMA_HISTOGRAM_CUSTOM_TIMES("SafeBrowsing.V4GetPrefixMatches.Time", diff,
368 base::TimeDelta::FromMicroseconds(100),
Nathan Parker 2016/10/22 00:24:55 Does this generate a log or linear scale of bucket
vakh (use Gerrit instead) 2016/10/22 01:34:34 Done. The comments for UMA_HISTOGRAM_CUSTOM_TIMES
Scott Hess - ex-Googler 2016/10/24 19:24:22 Log scale unless you're doing something special.
369 base::TimeDelta::FromSeconds(20), 50);
370 return !full_hash_to_store_and_hash_prefixes->empty();
363 } 371 }
364 372
365 void V4LocalDatabaseManager::GetSeverestThreatTypeAndMetadata( 373 void V4LocalDatabaseManager::GetSeverestThreatTypeAndMetadata(
366 SBThreatType* result_threat_type, 374 SBThreatType* result_threat_type,
367 ThreatMetadata* metadata, 375 ThreatMetadata* metadata,
368 const std::vector<FullHashInfo>& full_hash_infos) { 376 const std::vector<FullHashInfo>& full_hash_infos) {
369 DCHECK(result_threat_type); 377 DCHECK(result_threat_type);
370 DCHECK(metadata); 378 DCHECK(metadata);
371 379
372 ThreatSeverity most_severe_yet = kLeastSeverity; 380 ThreatSeverity most_severe_yet = kLeastSeverity;
(...skipping 29 matching lines...) Expand all
402 void V4LocalDatabaseManager::OnFullHashResponse( 410 void V4LocalDatabaseManager::OnFullHashResponse(
403 std::unique_ptr<PendingCheck> pending_check, 411 std::unique_ptr<PendingCheck> pending_check,
404 const std::vector<FullHashInfo>& full_hash_infos) { 412 const std::vector<FullHashInfo>& full_hash_infos) {
405 DCHECK_CURRENTLY_ON(BrowserThread::IO); 413 DCHECK_CURRENTLY_ON(BrowserThread::IO);
406 414
407 if (!enabled_) { 415 if (!enabled_) {
408 DCHECK(pending_clients_.empty()); 416 DCHECK(pending_clients_.empty());
409 return; 417 return;
410 } 418 }
411 419
420 // TODO(vakh): Consider changing the following histogram name to be
421 // SafeBrowsing.V4GetFullHashOverNetwork.Time once PVer3 code is removed.
422 UMA_HISTOGRAM_LONG_TIMES(
423 "SB2.Network", TimeTicks::Now() - pending_check->full_hash_check_start);
412 auto it = pending_clients_.find(pending_check->client); 424 auto it = pending_clients_.find(pending_check->client);
413 if (it == pending_clients_.end()) { 425 if (it == pending_clients_.end()) {
414 // The check has since been cancelled. 426 // The check has since been cancelled.
415 return; 427 return;
416 } 428 }
417 429
418 // Find out the most severe threat, if any, to report to the client. 430 // Find out the most severe threat, if any, to report to the client.
419 GetSeverestThreatTypeAndMetadata(&pending_check->result_threat_type, 431 GetSeverestThreatTypeAndMetadata(&pending_check->result_threat_type,
420 &pending_check->url_metadata, 432 &pending_check->url_metadata,
421 full_hash_infos); 433 full_hash_infos);
422 pending_clients_.erase(it); 434 pending_clients_.erase(it);
423 RespondToClient(std::move(pending_check)); 435 RespondToClient(std::move(pending_check));
424 } 436 }
425 437
426 void V4LocalDatabaseManager::PerformFullHashCheck( 438 void V4LocalDatabaseManager::PerformFullHashCheck(
427 std::unique_ptr<PendingCheck> check, 439 std::unique_ptr<PendingCheck> check,
428 const FullHashToStoreAndHashPrefixesMap& 440 const FullHashToStoreAndHashPrefixesMap&
429 full_hash_to_store_and_hash_prefixes) { 441 full_hash_to_store_and_hash_prefixes) {
430 DCHECK_CURRENTLY_ON(BrowserThread::IO); 442 DCHECK_CURRENTLY_ON(BrowserThread::IO);
431 443
432 DCHECK(enabled_); 444 DCHECK(enabled_);
433 DCHECK(!full_hash_to_store_and_hash_prefixes.empty()); 445 DCHECK(!full_hash_to_store_and_hash_prefixes.empty());
434 446
435 pending_clients_.insert(check->client); 447 pending_clients_.insert(check->client);
436 448
449 // Set the start time for the network request (or the response from cache).
450 check->full_hash_check_start = TimeTicks::Now();
Nathan Parker 2016/10/22 00:24:55 Ah, so this will won't distinguish network calls v
vakh (use Gerrit instead) 2016/10/22 01:34:34 Done.
451
437 v4_get_hash_protocol_manager_->GetFullHashes( 452 v4_get_hash_protocol_manager_->GetFullHashes(
438 full_hash_to_store_and_hash_prefixes, 453 full_hash_to_store_and_hash_prefixes,
439 base::Bind(&V4LocalDatabaseManager::OnFullHashResponse, 454 base::Bind(&V4LocalDatabaseManager::OnFullHashResponse,
440 weak_factory_.GetWeakPtr(), base::Passed(std::move(check)))); 455 weak_factory_.GetWeakPtr(), base::Passed(std::move(check))));
441 } 456 }
442 457
443 void V4LocalDatabaseManager::ProcessQueuedChecks() { 458 void V4LocalDatabaseManager::ProcessQueuedChecks() {
444 DCHECK_CURRENTLY_ON(BrowserThread::IO); 459 DCHECK_CURRENTLY_ON(BrowserThread::IO);
445 for (auto& it : queued_checks_) { 460 for (auto& it : queued_checks_) {
446 FullHashToStoreAndHashPrefixesMap full_hash_to_store_and_hash_prefixes; 461 FullHashToStoreAndHashPrefixesMap full_hash_to_store_and_hash_prefixes;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 } 523 }
509 524
510 void V4LocalDatabaseManager::UpdateRequestCompleted( 525 void V4LocalDatabaseManager::UpdateRequestCompleted(
511 std::unique_ptr<ParsedServerResponse> parsed_server_response) { 526 std::unique_ptr<ParsedServerResponse> parsed_server_response) {
512 DCHECK_CURRENTLY_ON(BrowserThread::IO); 527 DCHECK_CURRENTLY_ON(BrowserThread::IO);
513 v4_database_->ApplyUpdate(std::move(parsed_server_response), 528 v4_database_->ApplyUpdate(std::move(parsed_server_response),
514 db_updated_callback_); 529 db_updated_callback_);
515 } 530 }
516 531
517 } // namespace safe_browsing 532 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698