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

Unified Diff: chrome/browser/task_manager/sampling/task_manager_io_thread_helper.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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/task_manager/sampling/task_manager_io_thread_helper.cc
diff --git a/chrome/browser/task_manager/sampling/task_manager_io_thread_helper.cc b/chrome/browser/task_manager/sampling/task_manager_io_thread_helper.cc
index ae0166762d8d73d1407e48ed7fe0246422266962..1352a3eddc15814c3cfc54c0c5dc4884964df04c 100644
--- a/chrome/browser/task_manager/sampling/task_manager_io_thread_helper.cc
+++ b/chrome/browser/task_manager/sampling/task_manager_io_thread_helper.cc
@@ -63,6 +63,15 @@ void TaskManagerIoThreadHelper::OnRawBytesRead(const net::URLRequest& request,
g_io_thread_helper->OnNetworkBytesRead(request, bytes_read);
}
+// static
+void TaskManagerIoThreadHelper::OnRawBytesSent(const net::URLRequest& request,
+ int64_t bytes_sent) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ if (g_io_thread_helper)
+ g_io_thread_helper->OnNetworkBytesSent(request, bytes_sent);
+}
+
TaskManagerIoThreadHelper::TaskManagerIoThreadHelper() : weak_factory_(this) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
}
@@ -76,8 +85,8 @@ void TaskManagerIoThreadHelper::OnMultipleBytesReadIO() {
DCHECK(!bytes_read_buffer_.empty());
- std::vector<BytesReadParam>* bytes_read_buffer =
- new std::vector<BytesReadParam>();
+ std::vector<BytesTransferedParam>* bytes_read_buffer =
+ new std::vector<BytesTransferedParam>();
bytes_read_buffer_.swap(*bytes_read_buffer);
content::BrowserThread::PostTask(
@@ -121,7 +130,60 @@ void TaskManagerIoThreadHelper::OnNetworkBytesRead(
}
ncarter (slow) 2017/06/08 23:37:19 There's a potential optimization here we can consi
cburn 2017/06/14 18:04:38 Done.
bytes_read_buffer_.push_back(
- BytesReadParam(origin_pid, child_id, route_id, bytes_read));
+ BytesTransferedParam(origin_pid, child_id, route_id, bytes_read));
+}
+
+void TaskManagerIoThreadHelper::OnMultipleBytesSentIO() {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ DCHECK(!bytes_sent_buffer_.empty());
+
+ std::vector<BytesTransferedParam>* bytes_sent_buffer =
+ new std::vector<BytesTransferedParam>();
+ bytes_sent_buffer_.swap(*bytes_sent_buffer);
ncarter (slow) 2017/06/08 23:37:19 Because this whole dance with the vectors, swappin
cburn 2017/06/14 18:04:38 Done.
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&TaskManagerImpl::OnMultipleBytesSentUI,
+ base::Owned(bytes_sent_buffer)));
+}
+
+void TaskManagerIoThreadHelper::OnNetworkBytesSent(
+ const net::URLRequest& request,
+ int64_t bytes_sent) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ // Only net::URLRequestJob instances created by the ResourceDispatcherHost
+ // have an associated ResourceRequestInfo and a render frame associated.
+ // All other jobs will have -1 returned for the render process child and
+ // routing ids - the jobs may still match a resource based on their origin id,
+ // otherwise BytesRead() will attribute the activity to the Browser resource.
+ const content::ResourceRequestInfo* info =
+ content::ResourceRequestInfo::ForRequest(&request);
+ int child_id = -1;
+ int route_id = -1;
+ if (info)
+ info->GetAssociatedRenderFrame(&child_id, &route_id);
+
+ // Get the origin PID of the request's originator. This will only be set for
+ // plugins - for renderer or browser initiated requests it will be zero.
+ int origin_pid = info ? info->GetOriginPID() : 0;
+
+ if (bytes_sent_buffer_.empty()) {
+ // Schedule a task to process the received bytes requests a second from now.
+ // We're trying to calculate the tasks' network usage speed as bytes per
+ // second so we collect as many requests during one seconds before the below
+ // delayed TaskManagerIoThreadHelper::OnMultipleBytesReadIO() process them
+ // after one second from now.
+ content::BrowserThread::PostDelayedTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&TaskManagerIoThreadHelper::OnMultipleBytesSentIO,
+ weak_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(1));
+ }
+
+ bytes_sent_buffer_.push_back(
+ BytesTransferedParam(origin_pid, child_id, route_id, bytes_sent));
}
} // namespace task_manager

Powered by Google App Engine
This is Rietveld 408576698