| 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, 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 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; |
| 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 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 |