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

Side by Side Diff: chrome/browser/task_manager/sampling/task_manager_impl.cc

Issue 2964543002: TaskManager: use an unordered_map for tracking network usage (Closed)
Patch Set: fixed nits from lgtm Created 3 years, 5 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "chrome/browser/task_manager/sampling/task_manager_impl.h" 5 #include "chrome/browser/task_manager/sampling/task_manager_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <unordered_map> 9 #include <unordered_map>
10 #include <unordered_set> 10 #include <unordered_set>
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 // Invalidate the cached sorted IDs by clearing the list. 448 // Invalidate the cached sorted IDs by clearing the list.
449 sorted_task_ids_.clear(); 449 sorted_task_ids_.clear();
450 } 450 }
451 451
452 void TaskManagerImpl::TaskUnresponsive(Task* task) { 452 void TaskManagerImpl::TaskUnresponsive(Task* task) {
453 DCHECK(task); 453 DCHECK(task);
454 NotifyObserversOnTaskUnresponsive(task->task_id()); 454 NotifyObserversOnTaskUnresponsive(task->task_id());
455 } 455 }
456 456
457 // static 457 // static
458 void TaskManagerImpl::OnMultipleBytesTransferredUI( 458 void TaskManagerImpl::OnMultipleBytesTransferredUI(BytesTransferredMap params) {
459 std::vector<BytesTransferredParam>* params) {
460 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 459 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
461 DCHECK(params); 460 for (const auto& entry : params) {
461 const BytesTransferredKey& process_info = entry.first;
462 const BytesTransferredParam& bytes_transferred = entry.second;
462 463
463 for (BytesTransferredParam& param : *params) { 464 if (!GetInstance()->UpdateTasksWithBytesTransferred(process_info,
464 if (!GetInstance()->UpdateTasksWithBytesTransferred(param)) { 465 bytes_transferred)) {
465 // We can't match a task to the notification. That might mean the 466 // We can't match a task to the notification. That might mean the
466 // tab that started a download was closed, or the request may have had 467 // tab that started a download was closed, or the request may have had
467 // no originating task associated with it in the first place. 468 // no originating task associated with it in the first place.
468 // We attribute orphaned/unaccounted activity to the Browser process. 469 // We attribute orphaned/unaccounted activity to the Browser process.
469 DCHECK(param.origin_pid || (param.child_id != -1)); 470 DCHECK(process_info.origin_pid || (process_info.child_id != -1));
470 471 // Since the key is meant to be immutable we create a fake key for the
471 param.origin_pid = 0; 472 // purpose of attributing the orphaned/unaccounted activity to the Browser
472 param.child_id = param.route_id = -1; 473 // process.
473 GetInstance()->UpdateTasksWithBytesTransferred(param); 474 int dummy_origin_pid = 0;
475 int dummy_child_id = -1;
476 int dummy_route_id = -1;
477 BytesTransferredKey dummy_key = {dummy_origin_pid, dummy_child_id,
478 dummy_route_id};
479 GetInstance()->UpdateTasksWithBytesTransferred(dummy_key,
480 bytes_transferred);
474 } 481 }
475 } 482 }
476 } 483 }
477 484
478 void TaskManagerImpl::OnVideoMemoryUsageStatsUpdate( 485 void TaskManagerImpl::OnVideoMemoryUsageStatsUpdate(
479 const gpu::VideoMemoryUsageStats& gpu_memory_stats) { 486 const gpu::VideoMemoryUsageStats& gpu_memory_stats) {
480 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 487 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
481 488
482 gpu_memory_stats_ = gpu_memory_stats; 489 gpu_memory_stats_ = gpu_memory_stats;
483 } 490 }
(...skipping 16 matching lines...) Expand all
500 507
501 void TaskManagerImpl::StartUpdating() { 508 void TaskManagerImpl::StartUpdating() {
502 if (is_running_) 509 if (is_running_)
503 return; 510 return;
504 511
505 is_running_ = true; 512 is_running_ = true;
506 513
507 for (const auto& provider : task_providers_) 514 for (const auto& provider : task_providers_)
508 provider->SetObserver(this); 515 provider->SetObserver(this);
509 516
510 io_thread_helper_manager_.reset(new IoThreadHelperManager); 517 io_thread_helper_manager_.reset(new IoThreadHelperManager(
518 base::BindRepeating(&TaskManagerImpl::OnMultipleBytesTransferredUI)));
511 } 519 }
512 520
513 void TaskManagerImpl::StopUpdating() { 521 void TaskManagerImpl::StopUpdating() {
514 if (!is_running_) 522 if (!is_running_)
515 return; 523 return;
516 524
517 is_running_ = false; 525 is_running_ = false;
518 526
519 io_thread_helper_manager_.reset(); 527 io_thread_helper_manager_.reset();
520 528
(...skipping 11 matching lines...) Expand all
532 for (const auto& task_provider : task_providers_) { 540 for (const auto& task_provider : task_providers_) {
533 Task* task = 541 Task* task =
534 task_provider->GetTaskOfUrlRequest(origin_pid, child_id, route_id); 542 task_provider->GetTaskOfUrlRequest(origin_pid, child_id, route_id);
535 if (task) 543 if (task)
536 return task; 544 return task;
537 } 545 }
538 return nullptr; 546 return nullptr;
539 } 547 }
540 548
541 bool TaskManagerImpl::UpdateTasksWithBytesTransferred( 549 bool TaskManagerImpl::UpdateTasksWithBytesTransferred(
550 const BytesTransferredKey& key,
542 const BytesTransferredParam& param) { 551 const BytesTransferredParam& param) {
543 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 552 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
544 553
545 Task* task = 554 Task* task = GetTaskByPidOrRoute(key.origin_pid, key.child_id, key.route_id);
546 GetTaskByPidOrRoute(param.origin_pid, param.child_id, param.route_id);
547 if (task) { 555 if (task) {
548 task->OnNetworkBytesRead(param.byte_read_count); 556 task->OnNetworkBytesRead(param.byte_read_count);
549 task->OnNetworkBytesSent(param.byte_sent_count); 557 task->OnNetworkBytesSent(param.byte_sent_count);
550 return true; 558 return true;
551 } 559 }
552 560
553 // Couldn't match the bytes to any existing task. 561 // Couldn't match the bytes to any existing task.
554 return false; 562 return false;
555 } 563 }
556 564
(...skipping 15 matching lines...) Expand all
572 groups_itr.second->AreBackgroundCalculationsDone(); 580 groups_itr.second->AreBackgroundCalculationsDone();
573 } 581 }
574 if (are_all_processes_data_ready) { 582 if (are_all_processes_data_ready) {
575 NotifyObserversOnRefreshWithBackgroundCalculations(GetTaskIdsList()); 583 NotifyObserversOnRefreshWithBackgroundCalculations(GetTaskIdsList());
576 for (const auto& groups_itr : task_groups_by_proc_id_) 584 for (const auto& groups_itr : task_groups_by_proc_id_)
577 groups_itr.second->ClearCurrentBackgroundCalculationsFlags(); 585 groups_itr.second->ClearCurrentBackgroundCalculationsFlags();
578 } 586 }
579 } 587 }
580 588
581 } // namespace task_manager 589 } // namespace task_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698