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

Side by Side Diff: content/common/resource_dispatcher.cc

Issue 12094085: LoadTiming in net part 7: Hooking it all up (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 7 years, 9 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading
6 6
7 #include "content/common/resource_dispatcher.h" 7 #include "content/common/resource_dispatcher.h"
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 15 matching lines...) Expand all
26 #include "net/http/http_response_headers.h" 26 #include "net/http/http_response_headers.h"
27 #include "webkit/glue/resource_request_body.h" 27 #include "webkit/glue/resource_request_body.h"
28 #include "webkit/glue/resource_type.h" 28 #include "webkit/glue/resource_type.h"
29 29
30 using webkit_glue::ResourceLoaderBridge; 30 using webkit_glue::ResourceLoaderBridge;
31 using webkit_glue::ResourceRequestBody; 31 using webkit_glue::ResourceRequestBody;
32 using webkit_glue::ResourceResponseInfo; 32 using webkit_glue::ResourceResponseInfo;
33 33
34 namespace content { 34 namespace content {
35 35
36 namespace {
37
38 // Converts |time| from a remote to local TimeTicks, overwriting the original
39 // value.
40 void RemoteToLocalTimeTicks(
41 const InterProcessTimeTicksConverter& converter,
42 base::TimeTicks* time) {
43 RemoteTimeTicks remote_time = RemoteTimeTicks::FromTimeTicks(*time);
44 *time = converter.ToLocalTimeTicks(remote_time).ToTimeTicks();
45 }
46
47
48 } // namespace
49
36 static void CrashOnMapFailure() { 50 static void CrashOnMapFailure() {
37 #if defined(OS_WIN) 51 #if defined(OS_WIN)
38 DWORD last_err = GetLastError(); 52 DWORD last_err = GetLastError();
39 base::debug::Alias(&last_err); 53 base::debug::Alias(&last_err);
40 #endif 54 #endif
41 CHECK(false); 55 CHECK(false);
42 } 56 }
43 57
44 // Each resource request is assigned an ID scoped to this process. 58 // Each resource request is assigned an ID scoped to this process.
45 static int MakeRequestID() { 59 static int MakeRequestID() {
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 } 239 }
226 240
227 response->error_code = result.error_code; 241 response->error_code = result.error_code;
228 response->url = result.final_url; 242 response->url = result.final_url;
229 response->headers = result.headers; 243 response->headers = result.headers;
230 response->mime_type = result.mime_type; 244 response->mime_type = result.mime_type;
231 response->charset = result.charset; 245 response->charset = result.charset;
232 response->request_time = result.request_time; 246 response->request_time = result.request_time;
233 response->response_time = result.response_time; 247 response->response_time = result.response_time;
234 response->encoded_data_length = result.encoded_data_length; 248 response->encoded_data_length = result.encoded_data_length;
235 response->connection_id = result.connection_id;
236 response->connection_reused = result.connection_reused;
237 response->load_timing = result.load_timing; 249 response->load_timing = result.load_timing;
238 response->devtools_info = result.devtools_info; 250 response->devtools_info = result.devtools_info;
239 response->data.swap(result.data); 251 response->data.swap(result.data);
240 response->download_file_path = result.download_file_path; 252 response->download_file_path = result.download_file_path;
241 } 253 }
242 254
243 // ResourceDispatcher --------------------------------------------------------- 255 // ResourceDispatcher ---------------------------------------------------------
244 256
245 ResourceDispatcher::ResourceDispatcher(IPC::Sender* sender) 257 ResourceDispatcher::ResourceDispatcher(IPC::Sender* sender)
246 : message_sender_(sender), 258 : message_sender_(sender),
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 652
641 void ResourceDispatcher::ToResourceResponseInfo( 653 void ResourceDispatcher::ToResourceResponseInfo(
642 const PendingRequestInfo& request_info, 654 const PendingRequestInfo& request_info,
643 const ResourceResponseHead& browser_info, 655 const ResourceResponseHead& browser_info,
644 ResourceResponseInfo* renderer_info) const { 656 ResourceResponseInfo* renderer_info) const {
645 *renderer_info = browser_info; 657 *renderer_info = browser_info;
646 if (request_info.request_start.is_null() || 658 if (request_info.request_start.is_null() ||
647 request_info.response_start.is_null() || 659 request_info.response_start.is_null() ||
648 browser_info.request_start.is_null() || 660 browser_info.request_start.is_null() ||
649 browser_info.response_start.is_null() || 661 browser_info.response_start.is_null() ||
650 browser_info.load_timing.base_ticks.is_null()) { 662 browser_info.load_timing.request_start.is_null()) {
651 return; 663 return;
652 } 664 }
653 InterProcessTimeTicksConverter converter( 665 InterProcessTimeTicksConverter converter(
654 LocalTimeTicks::FromTimeTicks(request_info.request_start), 666 LocalTimeTicks::FromTimeTicks(request_info.request_start),
655 LocalTimeTicks::FromTimeTicks(request_info.response_start), 667 LocalTimeTicks::FromTimeTicks(request_info.response_start),
656 RemoteTimeTicks::FromTimeTicks(browser_info.request_start), 668 RemoteTimeTicks::FromTimeTicks(browser_info.request_start),
657 RemoteTimeTicks::FromTimeTicks(browser_info.response_start)); 669 RemoteTimeTicks::FromTimeTicks(browser_info.response_start));
658 670
659 LocalTimeTicks renderer_base_ticks = converter.ToLocalTimeTicks( 671 net::LoadTimingInfo* load_timing = &renderer_info->load_timing;
660 RemoteTimeTicks::FromTimeTicks(browser_info.load_timing.base_ticks)); 672 RemoteToLocalTimeTicks(converter, &load_timing->request_start);
661 renderer_info->load_timing.base_ticks = renderer_base_ticks.ToTimeTicks(); 673 RemoteToLocalTimeTicks(converter, &load_timing->proxy_resolve_start);
662 674 RemoteToLocalTimeTicks(converter, &load_timing->proxy_resolve_end);
663 #define CONVERT(field) \ 675 RemoteToLocalTimeTicks(converter, &load_timing->connect_timing.dns_start);
664 LocalTimeDelta renderer_##field = converter.ToLocalTimeDelta( \ 676 RemoteToLocalTimeTicks(converter, &load_timing->connect_timing.dns_end);
665 RemoteTimeDelta::FromRawDelta(browser_info.load_timing.field)); \ 677 RemoteToLocalTimeTicks(converter, &load_timing->connect_timing.connect_start);
666 renderer_info->load_timing.field = renderer_##field.ToInt32() 678 RemoteToLocalTimeTicks(converter, &load_timing->connect_timing.connect_end);
667 679 RemoteToLocalTimeTicks(converter, &load_timing->connect_timing.ssl_start);
668 CONVERT(proxy_start); 680 RemoteToLocalTimeTicks(converter, &load_timing->connect_timing.ssl_end);
669 CONVERT(dns_start); 681 RemoteToLocalTimeTicks(converter, &load_timing->send_start);
670 CONVERT(dns_end); 682 RemoteToLocalTimeTicks(converter, &load_timing->send_end);
671 CONVERT(connect_start); 683 RemoteToLocalTimeTicks(converter, &load_timing->receive_headers_end);
672 CONVERT(connect_end);
673 CONVERT(ssl_start);
674 CONVERT(ssl_end);
675 CONVERT(send_start);
676 CONVERT(send_end);
677 CONVERT(receive_headers_start);
678 CONVERT(receive_headers_end);
679
680 #undef CONVERT
681 } 684 }
682 685
683 base::TimeTicks ResourceDispatcher::ToRendererCompletionTime( 686 base::TimeTicks ResourceDispatcher::ToRendererCompletionTime(
684 const PendingRequestInfo& request_info, 687 const PendingRequestInfo& request_info,
685 const base::TimeTicks& browser_completion_time) const { 688 const base::TimeTicks& browser_completion_time) const {
686 if (request_info.completion_time.is_null()) { 689 if (request_info.completion_time.is_null()) {
687 return browser_completion_time; 690 return browser_completion_time;
688 } 691 }
689 692
690 // TODO(simonjam): The optimal lower bound should be the most recent value of 693 // TODO(simonjam): The optimal lower bound should be the most recent value of
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { 748 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) {
746 while (!queue->empty()) { 749 while (!queue->empty()) {
747 IPC::Message* message = queue->front(); 750 IPC::Message* message = queue->front();
748 ReleaseResourcesInDataMessage(*message); 751 ReleaseResourcesInDataMessage(*message);
749 queue->pop_front(); 752 queue->pop_front();
750 delete message; 753 delete message;
751 } 754 }
752 } 755 }
753 756
754 } // namespace content 757 } // namespace content
OLDNEW
« no previous file with comments | « content/common/inter_process_time_ticks_converter.cc ('k') | content/common/resource_dispatcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698