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

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

Issue 6383002: Attribute orphaned or anonymous network usage to the Browser resources. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Fix Windows build issue comparing signed value to unsigned. Created 9 years, 11 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 | « no previous file | no next file » | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/task_manager.h" 5 #include "chrome/browser/task_manager/task_manager.h"
6 6
7 #include "app/l10n_util.h" 7 #include "app/l10n_util.h"
8 #include "app/resource_bundle.h" 8 #include "app/resource_bundle.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/i18n/number_formatting.h" 10 #include "base/i18n/number_formatting.h"
(...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 // linking a network notification back to the object that initiated it. 838 // linking a network notification back to the object that initiated it.
839 TaskManager::Resource* resource = NULL; 839 TaskManager::Resource* resource = NULL;
840 for (ResourceProviderList::iterator iter = providers_.begin(); 840 for (ResourceProviderList::iterator iter = providers_.begin();
841 iter != providers_.end(); ++iter) { 841 iter != providers_.end(); ++iter) {
842 resource = (*iter)->GetResource(param.origin_child_id, 842 resource = (*iter)->GetResource(param.origin_child_id,
843 param.render_process_host_child_id, 843 param.render_process_host_child_id,
844 param.routing_id); 844 param.routing_id);
845 if (resource) 845 if (resource)
846 break; 846 break;
847 } 847 }
848
848 if (resource == NULL) { 849 if (resource == NULL) {
849 // We may not have that resource anymore (example: close a tab while a 850 // We can't match a resource to the notification. That might mean the
850 // a network resource is being retrieved), in which case we just ignore the 851 // tab that started a download was closed, or the request may have had
851 // notification. 852 // no originating resource associated with it in the first place.
853 // We attribute orphaned/unaccounted activity to the Browser process.
854 int browser_pid = base::GetCurrentProcId();
855 CHECK(param.origin_child_id != browser_pid);
856 param.origin_child_id = browser_pid;
857 param.render_process_host_child_id = param.routing_id = -1;
858 BytesRead(param);
852 return; 859 return;
853 } 860 }
854 861
855 // We do support network usage, mark the resource as such so it can report 0 862 // We do support network usage, mark the resource as such so it can report 0
856 // instead of N/A. 863 // instead of N/A.
857 if (!resource->SupportNetworkUsage()) 864 if (!resource->SupportNetworkUsage())
858 resource->SetSupportNetworkUsage(); 865 resource->SetSupportNetworkUsage();
859 866
860 ResourceValueMap::const_iterator iter_res = 867 ResourceValueMap::const_iterator iter_res =
861 current_byte_count_map_.find(resource); 868 current_byte_count_map_.find(resource);
(...skipping 18 matching lines...) Expand all
880 const net::URLRequestStatus& status) { 887 const net::URLRequestStatus& status) {
881 } 888 }
882 889
883 void TaskManagerModel::OnJobRedirect(net::URLRequestJob* job, 890 void TaskManagerModel::OnJobRedirect(net::URLRequestJob* job,
884 const GURL& location, 891 const GURL& location,
885 int status_code) { 892 int status_code) {
886 } 893 }
887 894
888 void TaskManagerModel::OnBytesRead(net::URLRequestJob* job, const char* buf, 895 void TaskManagerModel::OnBytesRead(net::URLRequestJob* job, const char* buf,
889 int byte_count) { 896 int byte_count) {
897 // Only net::URLRequestJob instances created by the ResourceDispatcherHost
898 // have a render view associated. All other jobs will have -1 returned for
899 // the render process child and routing ids - the jobs may still match a
900 // resource based on their origin id, otherwise BytesRead() will attribute
901 // the activity to the Browser resource.
890 int render_process_host_child_id = -1, routing_id = -1; 902 int render_process_host_child_id = -1, routing_id = -1;
891 if (!ResourceDispatcherHost::RenderViewForRequest(job->request(), 903 ResourceDispatcherHost::RenderViewForRequest(job->request(),
892 &render_process_host_child_id, 904 &render_process_host_child_id,
893 &routing_id)) { 905 &routing_id);
894 // Only net::URLRequestJob instances created by the ResourceDispatcherHost
895 // have a render view associated. Jobs from components such as the
896 // SearchProvider for autocomplete, have no associated view, so we can't
897 // correctly attribute the bandwidth they consume.
898 // TODO(wez): All jobs' resources should ideally be accountable, even if
899 // only by contributing to the Browser process' stats.
900 return;
901 }
902 906
903 // This happens in the IO thread, post it to the UI thread. 907 // This happens in the IO thread, post it to the UI thread.
904 int origin_child_id = 908 int origin_child_id =
905 chrome_browser_net::GetOriginProcessUniqueIDForRequest(job->request()); 909 chrome_browser_net::GetOriginProcessUniqueIDForRequest(job->request());
906 BrowserThread::PostTask( 910 BrowserThread::PostTask(
907 BrowserThread::UI, FROM_HERE, 911 BrowserThread::UI, FROM_HERE,
908 NewRunnableMethod( 912 NewRunnableMethod(
909 this, 913 this,
910 &TaskManagerModel::BytesRead, 914 &TaskManagerModel::BytesRead,
911 BytesReadParam(origin_child_id, 915 BytesReadParam(origin_child_id,
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 MetricsMap::const_iterator iter = metrics_map_.find(handle); 1038 MetricsMap::const_iterator iter = metrics_map_.find(handle);
1035 if (iter == metrics_map_.end()) 1039 if (iter == metrics_map_.end())
1036 return false; 1040 return false;
1037 1041
1038 if (!iter->second->GetMemoryBytes(&usage->first, &usage->second)) 1042 if (!iter->second->GetMemoryBytes(&usage->first, &usage->second))
1039 return false; 1043 return false;
1040 1044
1041 memory_usage_map_.insert(std::make_pair(handle, *usage)); 1045 memory_usage_map_.insert(std::make_pair(handle, *usage));
1042 return true; 1046 return true;
1043 } 1047 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698