OLD | NEW |
---|---|
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 Loading... | |
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, overrwriting the original | |
darin (slow to review)
2013/02/28 19:36:43
nit: "overrwriting"
nit: RemoteToLocalTimeTicks w
mmenke
2013/02/28 19:40:03
Done and done. Good name suggestion - clearer and
| |
39 // value. | |
40 void ConvertRemoteTimeTicks( | |
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 Loading... | |
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 Loading... | |
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; |
darin (slow to review)
2013/02/28 19:36:43
oh nice, this actually led to being able to kill t
| |
660 RemoteTimeTicks::FromTimeTicks(browser_info.load_timing.base_ticks)); | 672 ConvertRemoteTimeTicks(converter, &load_timing->request_start); |
661 renderer_info->load_timing.base_ticks = renderer_base_ticks.ToTimeTicks(); | 673 ConvertRemoteTimeTicks(converter, &load_timing->proxy_resolve_start); |
662 | 674 ConvertRemoteTimeTicks(converter, &load_timing->proxy_resolve_end); |
663 #define CONVERT(field) \ | 675 ConvertRemoteTimeTicks(converter, &load_timing->connect_timing.dns_start); |
664 LocalTimeDelta renderer_##field = converter.ToLocalTimeDelta( \ | 676 ConvertRemoteTimeTicks(converter, &load_timing->connect_timing.dns_end); |
665 RemoteTimeDelta::FromRawDelta(browser_info.load_timing.field)); \ | 677 ConvertRemoteTimeTicks(converter, &load_timing->connect_timing.connect_start); |
666 renderer_info->load_timing.field = renderer_##field.ToInt32() | 678 ConvertRemoteTimeTicks(converter, &load_timing->connect_timing.connect_end); |
667 | 679 ConvertRemoteTimeTicks(converter, &load_timing->connect_timing.ssl_start); |
668 CONVERT(proxy_start); | 680 ConvertRemoteTimeTicks(converter, &load_timing->connect_timing.ssl_end); |
669 CONVERT(dns_start); | 681 ConvertRemoteTimeTicks(converter, &load_timing->send_start); |
670 CONVERT(dns_end); | 682 ConvertRemoteTimeTicks(converter, &load_timing->send_end); |
671 CONVERT(connect_start); | 683 ConvertRemoteTimeTicks(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 Loading... | |
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 |
OLD | NEW |