summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-20 09:16:46 +0000
committerpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-20 09:16:46 +0000
commit83475ff148f4f1500c9c6834b68d0b2970655a0f (patch)
treedb160bc6dbebda7dbc4dedcfef697c13484fb842 /chrome
parent916b78c371bdc95769d001c192ab6016cc0ae6c4 (diff)
downloadchromium_src-83475ff148f4f1500c9c6834b68d0b2970655a0f.zip
chromium_src-83475ff148f4f1500c9c6834b68d0b2970655a0f.tar.gz
chromium_src-83475ff148f4f1500c9c6834b68d0b2970655a0f.tar.bz2
DevTools: provide load timing for sync resources.
Review URL: http://codereview.chromium.org/3458004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@59916 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/net/load_timing_observer.cc25
-rw-r--r--chrome/browser/net/load_timing_observer.h7
-rw-r--r--chrome/browser/renderer_host/async_resource_handler.cc27
-rw-r--r--chrome/browser/renderer_host/async_resource_handler.h2
-rw-r--r--chrome/browser/renderer_host/resource_dispatcher_host.cc7
-rw-r--r--chrome/browser/renderer_host/sync_resource_handler.cc23
-rw-r--r--chrome/browser/renderer_host/sync_resource_handler.h6
-rw-r--r--chrome/common/resource_dispatcher.cc5
8 files changed, 70 insertions, 32 deletions
diff --git a/chrome/browser/net/load_timing_observer.cc b/chrome/browser/net/load_timing_observer.cc
index 7b292d0..433aa9b 100644
--- a/chrome/browser/net/load_timing_observer.cc
+++ b/chrome/browser/net/load_timing_observer.cc
@@ -6,7 +6,10 @@
#include "base/compiler_specific.h"
#include "base/time.h"
+#include "chrome/browser/net/chrome_net_log.h"
+#include "chrome/common/resource_response.h"
#include "net/base/load_flags.h"
+#include "net/url_request/url_request.h"
#include "net/url_request/url_request_netlog_params.h"
using base::Time;
@@ -77,6 +80,28 @@ void LoadTimingObserver::OnAddEntry(net::NetLog::EventType type,
OnAddSocketEntry(type, time, source, phase, params);
}
+// static
+void LoadTimingObserver::PopulateTimingInfo(URLRequest* request,
+ ResourceResponse* response) {
+ if (!(request->load_flags() & net::LOAD_ENABLE_LOAD_TIMING))
+ return;
+
+ ChromeNetLog* chrome_net_log = static_cast<ChromeNetLog*>(
+ request->net_log().net_log());
+ if (chrome_net_log == NULL)
+ return;
+
+ uint32 source_id = request->net_log().source().id;
+ LoadTimingObserver* observer = chrome_net_log->load_timing_observer();
+ LoadTimingObserver::URLRequestRecord* record =
+ observer->GetURLRequestRecord(source_id);
+ if (record) {
+ response->response_head.connection_id = record->socket_log_id;
+ response->response_head.connection_reused = record->socket_reused;
+ response->response_head.load_timing = record->timing;
+ }
+}
+
void LoadTimingObserver::OnAddURLRequestEntry(
net::NetLog::EventType type,
const base::TimeTicks& time,
diff --git a/chrome/browser/net/load_timing_observer.h b/chrome/browser/net/load_timing_observer.h
index 873e224..a46d6a6 100644
--- a/chrome/browser/net/load_timing_observer.h
+++ b/chrome/browser/net/load_timing_observer.h
@@ -13,6 +13,9 @@
#include "net/base/net_log.h"
#include "webkit/glue/resource_loader_bridge.h"
+class URLRequest;
+struct ResourceResponse;
+
// LoadTimingObserver watches the NetLog event stream and collects the network
// timing information.
class LoadTimingObserver : public ChromeNetLog::Observer {
@@ -48,6 +51,10 @@ class LoadTimingObserver : public ChromeNetLog::Observer {
const net::NetLog::Source& source,
net::NetLog::EventPhase phase,
net::NetLog::EventParameters* params);
+
+ static void PopulateTimingInfo(URLRequest* request,
+ ResourceResponse* response);
+
private:
FRIEND_TEST_ALL_PREFIXES(LoadTimingObserverTest,
ConnectJobRecord);
diff --git a/chrome/browser/renderer_host/async_resource_handler.cc b/chrome/browser/renderer_host/async_resource_handler.cc
index 991a79e..5e5dfa5 100644
--- a/chrome/browser/renderer_host/async_resource_handler.cc
+++ b/chrome/browser/renderer_host/async_resource_handler.cc
@@ -9,7 +9,6 @@
#include "base/process.h"
#include "base/shared_memory.h"
#include "chrome/browser/browser_process.h"
-#include "chrome/browser/net/chrome_net_log.h"
#include "chrome/browser/net/chrome_url_request_context.h"
#include "chrome/browser/net/load_timing_observer.h"
#include "chrome/browser/renderer_host/global_request_id.h"
@@ -89,27 +88,6 @@ AsyncResourceHandler::AsyncResourceHandler(
AsyncResourceHandler::~AsyncResourceHandler() {
}
-void AsyncResourceHandler::PopulateTimingInfo(URLRequest* request,
- ResourceResponse* response) {
- if (!(request->load_flags() & net::LOAD_ENABLE_LOAD_TIMING))
- return;
-
- ChromeNetLog* chrome_net_log = static_cast<ChromeNetLog*>(
- request->net_log().net_log());
- if (chrome_net_log == NULL)
- return;
-
- uint32 source_id = request->net_log().source().id;
- LoadTimingObserver* observer = chrome_net_log->load_timing_observer();
- LoadTimingObserver::URLRequestRecord* record =
- observer->GetURLRequestRecord(source_id);
- if (record) {
- response->response_head.connection_id = record->socket_log_id;
- response->response_head.connection_reused = record->socket_reused;
- response->response_head.load_timing = record->timing;
- }
-}
-
bool AsyncResourceHandler::OnUploadProgress(int request_id,
uint64 position,
uint64 size) {
@@ -125,7 +103,7 @@ bool AsyncResourceHandler::OnRequestRedirected(int request_id,
*defer = true;
URLRequest* request = rdh_->GetURLRequest(
GlobalRequestID(process_id_, request_id));
- PopulateTimingInfo(request, response);
+ LoadTimingObserver::PopulateTimingInfo(request, response);
return receiver_->Send(new ViewMsg_Resource_ReceivedRedirect(
routing_id_, request_id, new_url, response->response_head));
}
@@ -139,8 +117,7 @@ bool AsyncResourceHandler::OnResponseStarted(int request_id,
// or of having to layout the new content twice.
URLRequest* request = rdh_->GetURLRequest(
GlobalRequestID(process_id_, request_id));
-
- PopulateTimingInfo(request, response);
+ LoadTimingObserver::PopulateTimingInfo(request, response);
ResourceDispatcherHostRequestInfo* info = rdh_->InfoForRequest(request);
if (info->resource_type() == ResourceType::MAIN_FRAME) {
diff --git a/chrome/browser/renderer_host/async_resource_handler.h b/chrome/browser/renderer_host/async_resource_handler.h
index d499366..191fdb8 100644
--- a/chrome/browser/renderer_host/async_resource_handler.h
+++ b/chrome/browser/renderer_host/async_resource_handler.h
@@ -44,8 +44,6 @@ class AsyncResourceHandler : public ResourceHandler {
private:
~AsyncResourceHandler();
- void PopulateTimingInfo(URLRequest* request, ResourceResponse* response);
-
scoped_refptr<SharedIOBuffer> read_buffer_;
ResourceDispatcherHost::Receiver* receiver_;
int process_id_;
diff --git a/chrome/browser/renderer_host/resource_dispatcher_host.cc b/chrome/browser/renderer_host/resource_dispatcher_host.cc
index db59c09..dd37488 100644
--- a/chrome/browser/renderer_host/resource_dispatcher_host.cc
+++ b/chrome/browser/renderer_host/resource_dispatcher_host.cc
@@ -395,7 +395,6 @@ void ResourceDispatcherHost::BeginRequest(
status,
std::string(), // No security info needed, connection was not
base::Time())); // established.
-
}
return;
}
@@ -409,7 +408,11 @@ void ResourceDispatcherHost::BeginRequest(
// Construct the event handler.
scoped_refptr<ResourceHandler> handler;
if (sync_result) {
- handler = new SyncResourceHandler(receiver_, request_data.url, sync_result);
+ handler = new SyncResourceHandler(receiver_,
+ child_id,
+ request_data.url,
+ sync_result,
+ this);
} else {
handler = new AsyncResourceHandler(receiver_,
child_id,
diff --git a/chrome/browser/renderer_host/sync_resource_handler.cc b/chrome/browser/renderer_host/sync_resource_handler.cc
index b41ec6b..6638084 100644
--- a/chrome/browser/renderer_host/sync_resource_handler.cc
+++ b/chrome/browser/renderer_host/sync_resource_handler.cc
@@ -5,17 +5,23 @@
#include "chrome/browser/renderer_host/sync_resource_handler.h"
#include "base/logging.h"
+#include "chrome/browser/net/load_timing_observer.h"
+#include "chrome/browser/renderer_host/global_request_id.h"
#include "chrome/common/render_messages.h"
#include "net/base/io_buffer.h"
#include "net/http/http_response_headers.h"
SyncResourceHandler::SyncResourceHandler(
ResourceDispatcherHost::Receiver* receiver,
+ int process_id,
const GURL& url,
- IPC::Message* result_message)
+ IPC::Message* result_message,
+ ResourceDispatcherHost* resource_dispatcher_host)
: read_buffer_(new net::IOBuffer(kReadBufSize)),
receiver_(receiver),
- result_message_(result_message) {
+ process_id_(process_id),
+ result_message_(result_message),
+ rdh_(resource_dispatcher_host) {
result_.final_url = url;
}
@@ -32,6 +38,10 @@ bool SyncResourceHandler::OnRequestRedirected(int request_id,
const GURL& new_url,
ResourceResponse* response,
bool* defer) {
+ URLRequest* request = rdh_->GetURLRequest(
+ GlobalRequestID(process_id_, request_id));
+ LoadTimingObserver::PopulateTimingInfo(request, response);
+
// TODO(darin): It would be much better if this could live in WebCore, but
// doing so requires API changes at all levels. Similar code exists in
// WebCore/platform/network/cf/ResourceHandleCFNet.cpp :-(
@@ -45,10 +55,19 @@ bool SyncResourceHandler::OnRequestRedirected(int request_id,
bool SyncResourceHandler::OnResponseStarted(int request_id,
ResourceResponse* response) {
+ URLRequest* request = rdh_->GetURLRequest(
+ GlobalRequestID(process_id_, request_id));
+ LoadTimingObserver::PopulateTimingInfo(request, response);
+
// We don't care about copying the status here.
result_.headers = response->response_head.headers;
result_.mime_type = response->response_head.mime_type;
result_.charset = response->response_head.charset;
+ result_.request_time = response->response_head.request_time;
+ result_.response_time = response->response_head.response_time;
+ result_.connection_id = response->response_head.connection_id;
+ result_.connection_reused = response->response_head.connection_reused;
+ result_.load_timing = response->response_head.load_timing;
return true;
}
diff --git a/chrome/browser/renderer_host/sync_resource_handler.h b/chrome/browser/renderer_host/sync_resource_handler.h
index c43fd27..6f86de7 100644
--- a/chrome/browser/renderer_host/sync_resource_handler.h
+++ b/chrome/browser/renderer_host/sync_resource_handler.h
@@ -21,8 +21,10 @@ class IOBuffer;
class SyncResourceHandler : public ResourceHandler {
public:
SyncResourceHandler(ResourceDispatcherHost::Receiver* receiver,
+ int process_id,
const GURL& url,
- IPC::Message* result_message);
+ IPC::Message* result_message,
+ ResourceDispatcherHost* resource_dispatcher_host);
bool OnUploadProgress(int request_id, uint64 position, uint64 size);
bool OnRequestRedirected(int request_id, const GURL& new_url,
@@ -46,7 +48,9 @@ class SyncResourceHandler : public ResourceHandler {
SyncLoadResult result_;
ResourceDispatcherHost::Receiver* receiver_;
+ int process_id_;
IPC::Message* result_message_;
+ ResourceDispatcherHost* rdh_;
};
#endif // CHROME_BROWSER_RENDERER_HOST_SYNC_RESOURCE_HANDLER_H_
diff --git a/chrome/common/resource_dispatcher.cc b/chrome/common/resource_dispatcher.cc
index ce586c4..b274ace 100644
--- a/chrome/common/resource_dispatcher.cc
+++ b/chrome/common/resource_dispatcher.cc
@@ -254,6 +254,11 @@ void IPCResourceLoaderBridge::SyncLoad(SyncLoadResponse* response) {
response->headers = result.headers;
response->mime_type = result.mime_type;
response->charset = result.charset;
+ response->request_time = result.request_time;
+ response->response_time = result.response_time;
+ response->connection_id = result.connection_id;
+ response->connection_reused = result.connection_reused;
+ response->load_timing = result.load_timing;
response->data.swap(result.data);
}