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

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

Issue 2905403002: plumb network upload into the task manager (Closed)
Patch Set: fixed negative byte totals Created 3 years, 6 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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 void TaskManagerImpl::GetTerminationStatus(TaskId task_id, 229 void TaskManagerImpl::GetTerminationStatus(TaskId task_id,
230 base::TerminationStatus* out_status, 230 base::TerminationStatus* out_status,
231 int* out_error_code) const { 231 int* out_error_code) const {
232 GetTaskByTaskId(task_id)->GetTerminationStatus(out_status, out_error_code); 232 GetTaskByTaskId(task_id)->GetTerminationStatus(out_status, out_error_code);
233 } 233 }
234 234
235 int64_t TaskManagerImpl::GetNetworkUsage(TaskId task_id) const { 235 int64_t TaskManagerImpl::GetNetworkUsage(TaskId task_id) const {
236 return GetTaskByTaskId(task_id)->network_usage(); 236 return GetTaskByTaskId(task_id)->network_usage();
237 } 237 }
238 238
239 int64_t TaskManagerImpl::GetTotalNetworkUsage(TaskId task_id) const {
240 return GetTaskByTaskId(task_id)->total_network_usage();
241 }
242
239 int64_t TaskManagerImpl::GetProcessTotalNetworkUsage(TaskId task_id) const { 243 int64_t TaskManagerImpl::GetProcessTotalNetworkUsage(TaskId task_id) const {
240 return GetTaskGroupByTaskId(task_id)->per_process_network_usage(); 244 return GetTaskGroupByTaskId(task_id)->per_process_network_usage();
241 } 245 }
242 246
247 int64_t TaskManagerImpl::GetTotalProcessTotalNetworkUsage(
248 TaskId task_id) const {
249 return GetTaskGroupByTaskId(task_id)->total_per_process_network_usage();
250 }
251
243 int64_t TaskManagerImpl::GetSqliteMemoryUsed(TaskId task_id) const { 252 int64_t TaskManagerImpl::GetSqliteMemoryUsed(TaskId task_id) const {
244 return GetTaskByTaskId(task_id)->GetSqliteMemoryUsed(); 253 return GetTaskByTaskId(task_id)->GetSqliteMemoryUsed();
245 } 254 }
246 255
247 bool TaskManagerImpl::GetV8Memory(TaskId task_id, 256 bool TaskManagerImpl::GetV8Memory(TaskId task_id,
248 int64_t* allocated, 257 int64_t* allocated,
249 int64_t* used) const { 258 int64_t* used) const {
250 const Task* task = GetTaskByTaskId(task_id); 259 const Task* task = GetTaskByTaskId(task_id);
251 if (!task->ReportsV8Memory()) 260 if (!task->ReportsV8Memory())
252 return false; 261 return false;
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 sorted_task_ids_.clear(); 454 sorted_task_ids_.clear();
446 } 455 }
447 456
448 void TaskManagerImpl::TaskUnresponsive(Task* task) { 457 void TaskManagerImpl::TaskUnresponsive(Task* task) {
449 DCHECK(task); 458 DCHECK(task);
450 NotifyObserversOnTaskUnresponsive(task->task_id()); 459 NotifyObserversOnTaskUnresponsive(task->task_id());
451 } 460 }
452 461
453 // static 462 // static
454 void TaskManagerImpl::OnMultipleBytesReadUI( 463 void TaskManagerImpl::OnMultipleBytesReadUI(
455 std::vector<BytesReadParam>* params) { 464 std::vector<BytesTransferedParam>* params) {
456 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 465 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
457 DCHECK(params); 466 DCHECK(params);
458 467
459 for (BytesReadParam& param : *params) { 468 for (BytesTransferedParam& param : *params) {
460 if (!GetInstance()->UpdateTasksWithBytesRead(param)) { 469 if (!GetInstance()->UpdateTasksWithBytesRead(param)) {
461 // We can't match a task to the notification. That might mean the 470 // We can't match a task to the notification. That might mean the
462 // tab that started a download was closed, or the request may have had 471 // tab that started a download was closed, or the request may have had
463 // no originating task associated with it in the first place. 472 // no originating task associated with it in the first place.
464 // We attribute orphaned/unaccounted activity to the Browser process. 473 // We attribute orphaned/unaccounted activity to the Browser process.
465 DCHECK(param.origin_pid || (param.child_id != -1)); 474 DCHECK(param.origin_pid || (param.child_id != -1));
466 475
467 param.origin_pid = 0; 476 param.origin_pid = 0;
468 param.child_id = param.route_id = -1; 477 param.child_id = param.route_id = -1;
469 478
470 GetInstance()->UpdateTasksWithBytesRead(param); 479 GetInstance()->UpdateTasksWithBytesRead(param);
471 } 480 }
472 } 481 }
473 } 482 }
474 483
484 // static
485 void TaskManagerImpl::OnMultipleBytesSentUI(
ncarter (slow) 2017/06/08 23:37:18 Once BytesTransferedParam holds both send and read
cburn 2017/06/14 18:04:37 Done. Named it OnMultipleBytesTransfered to try to
486 std::vector<BytesTransferedParam>* params) {
487 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
488 DCHECK(params);
489
490 for (BytesTransferedParam& param : *params) {
491 if (!GetInstance()->UpdateTasksWithBytesSent(param)) {
492 // We can't match a task to the notification. That might mean the
493 // tab that started a download was closed, or the request may have had
494 // no originating task associated with it in the first place.
495 // We attribute orphaned/unaccounted activity to the Browser process.
496 DCHECK(param.origin_pid || (param.child_id != -1));
497
498 param.origin_pid = 0;
499 param.child_id = param.route_id = -1;
500
501 GetInstance()->UpdateTasksWithBytesSent(param);
502 }
503 }
504 }
505
475 void TaskManagerImpl::OnVideoMemoryUsageStatsUpdate( 506 void TaskManagerImpl::OnVideoMemoryUsageStatsUpdate(
476 const gpu::VideoMemoryUsageStats& gpu_memory_stats) { 507 const gpu::VideoMemoryUsageStats& gpu_memory_stats) {
477 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 508 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
478 509
479 gpu_memory_stats_ = gpu_memory_stats; 510 gpu_memory_stats_ = gpu_memory_stats;
480 } 511 }
481 512
482 void TaskManagerImpl::Refresh() { 513 void TaskManagerImpl::Refresh() {
483 if (IsResourceRefreshEnabled(REFRESH_TYPE_GPU_MEMORY)) { 514 if (IsResourceRefreshEnabled(REFRESH_TYPE_GPU_MEMORY)) {
484 content::GpuDataManager::GetInstance()->RequestVideoMemoryUsageStatsUpdate( 515 content::GpuDataManager::GetInstance()->RequestVideoMemoryUsageStatsUpdate(
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 int route_id) const { 559 int route_id) const {
529 for (const auto& task_provider : task_providers_) { 560 for (const auto& task_provider : task_providers_) {
530 Task* task = 561 Task* task =
531 task_provider->GetTaskOfUrlRequest(origin_pid, child_id, route_id); 562 task_provider->GetTaskOfUrlRequest(origin_pid, child_id, route_id);
532 if (task) 563 if (task)
533 return task; 564 return task;
534 } 565 }
535 return nullptr; 566 return nullptr;
536 } 567 }
537 568
538 bool TaskManagerImpl::UpdateTasksWithBytesRead(const BytesReadParam& param) { 569 bool TaskManagerImpl::UpdateTasksWithBytesRead(
ncarter (slow) 2017/06/08 23:37:18 Merge this function with TaskManagerImpl::UpdateTa
cburn 2017/06/14 18:04:38 Done. I went with UpdateTasksWithBytesTransfered t
570 const BytesTransferedParam& param) {
539 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 571 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
540 572
541 Task* task = 573 Task* task =
542 GetTaskByPidOrRoute(param.origin_pid, param.child_id, param.route_id); 574 GetTaskByPidOrRoute(param.origin_pid, param.child_id, param.route_id);
543 if (task) { 575 if (task) {
544 task->OnNetworkBytesRead(param.byte_count); 576 task->OnNetworkBytesRead(param.byte_count);
ncarter (slow) 2017/06/08 23:37:18 This might be the natural spot to split off into s
cburn 2017/06/14 18:04:38 Done.
545 return true; 577 return true;
546 } 578 }
547 579
548 // Couldn't match the bytes to any existing task. 580 // Couldn't match the bytes to any existing task.
549 return false; 581 return false;
550 } 582 }
551 583
584 bool TaskManagerImpl::UpdateTasksWithBytesSent(
585 const BytesTransferedParam& param) {
586 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
587
588 Task* task =
589 GetTaskByPidOrRoute(param.origin_pid, param.child_id, param.route_id);
590 if (task) {
591 task->OnNetworkBytesSent(param.byte_count);
592 return true;
593 }
594
595 // Couldn't match the bytes to any existing task.
596 return false;
597 }
598
552 TaskGroup* TaskManagerImpl::GetTaskGroupByTaskId(TaskId task_id) const { 599 TaskGroup* TaskManagerImpl::GetTaskGroupByTaskId(TaskId task_id) const {
553 auto it = task_groups_by_task_id_.find(task_id); 600 auto it = task_groups_by_task_id_.find(task_id);
554 DCHECK(it != task_groups_by_task_id_.end()); 601 DCHECK(it != task_groups_by_task_id_.end());
555 return it->second; 602 return it->second;
556 } 603 }
557 604
558 Task* TaskManagerImpl::GetTaskByTaskId(TaskId task_id) const { 605 Task* TaskManagerImpl::GetTaskByTaskId(TaskId task_id) const {
559 return GetTaskGroupByTaskId(task_id)->GetTaskById(task_id); 606 return GetTaskGroupByTaskId(task_id)->GetTaskById(task_id);
560 } 607 }
561 608
562 void TaskManagerImpl::OnTaskGroupBackgroundCalculationsDone() { 609 void TaskManagerImpl::OnTaskGroupBackgroundCalculationsDone() {
563 // TODO(afakhry): There should be a better way for doing this! 610 // TODO(afakhry): There should be a better way for doing this!
564 bool are_all_processes_data_ready = true; 611 bool are_all_processes_data_ready = true;
565 for (const auto& groups_itr : task_groups_by_proc_id_) { 612 for (const auto& groups_itr : task_groups_by_proc_id_) {
566 are_all_processes_data_ready &= 613 are_all_processes_data_ready &=
567 groups_itr.second->AreBackgroundCalculationsDone(); 614 groups_itr.second->AreBackgroundCalculationsDone();
568 } 615 }
569 if (are_all_processes_data_ready) { 616 if (are_all_processes_data_ready) {
570 NotifyObserversOnRefreshWithBackgroundCalculations(GetTaskIdsList()); 617 NotifyObserversOnRefreshWithBackgroundCalculations(GetTaskIdsList());
571 for (const auto& groups_itr : task_groups_by_proc_id_) 618 for (const auto& groups_itr : task_groups_by_proc_id_)
572 groups_itr.second->ClearCurrentBackgroundCalculationsFlags(); 619 groups_itr.second->ClearCurrentBackgroundCalculationsFlags();
573 } 620 }
574 } 621 }
575 622
576 } // namespace task_manager 623 } // namespace task_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698