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

Unified Diff: content/child/resource_dispatcher.cc

Issue 109283006: Redirect HTML resource bytes directly to parser thread (Chrome side CL) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 10 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: content/child/resource_dispatcher.cc
diff --git a/content/child/resource_dispatcher.cc b/content/child/resource_dispatcher.cc
index 6e4f438b961eeb5fdfac3dd1115dfbf535caefbe..748b86a2869a6c9e56b2d87bcfb42fe53129a213 100644
--- a/content/child/resource_dispatcher.cc
+++ b/content/child/resource_dispatcher.cc
@@ -17,6 +17,7 @@
#include "base/strings/string_util.h"
#include "content/child/request_extra_data.h"
#include "content/child/site_isolation_policy.h"
+#include "content/child/webthreadedresourceprovider_impl.h"
#include "content/common/inter_process_time_ticks_converter.h"
#include "content/common/resource_messages.h"
#include "content/public/child/resource_dispatcher_delegate.h"
@@ -78,6 +79,8 @@ class IPCResourceLoaderBridge : public ResourceLoaderBridge {
virtual void Cancel() OVERRIDE;
virtual void SetDefersLoading(bool value) OVERRIDE;
virtual void DidChangePriority(net::RequestPriority new_priority) OVERRIDE;
+ virtual blink::WebThreadedResourceProvider*
+ CreateThreadedResourceProvider() OVERRIDE;
virtual void SyncLoad(SyncLoadResponse* response) OVERRIDE;
private:
@@ -233,6 +236,16 @@ void IPCResourceLoaderBridge::DidChangePriority(
dispatcher_->DidChangePriority(routing_id_, request_id_, new_priority);
}
+blink::WebThreadedResourceProvider*
+IPCResourceLoaderBridge::CreateThreadedResourceProvider() {
+ if (request_id_ < 0) {
+ NOTREACHED() << "Trying to set parser-resource bridge on unstarted request";
+ return NULL;
+ }
+
+ return dispatcher_->CreateThreadedResourceProvider(request_id_);
+}
+
void IPCResourceLoaderBridge::SyncLoad(SyncLoadResponse* response) {
if (request_id_ != -1) {
NOTREACHED() << "Starting a request twice";
@@ -276,6 +289,7 @@ ResourceDispatcher::ResourceDispatcher(IPC::Sender* sender)
}
ResourceDispatcher::~ResourceDispatcher() {
+ WebThreadedResourceProviderImpl::Cleanup();
}
// ResourceDispatcher implementation ------------------------------------------
@@ -457,7 +471,8 @@ void ResourceDispatcher::OnReceivedData(int request_id,
}
// Acknowledge the reception of this data.
- message_sender()->Send(new ResourceHostMsg_DataReceived_ACK(request_id));
+ if (!request_info || request_info->send_data_acks)
+ SendDataACK(request_id);
}
void ResourceDispatcher::OnDownloadedData(int request_id,
@@ -592,6 +607,16 @@ void ResourceDispatcher::CancelPendingRequest(int request_id) {
message_sender()->Send(new ResourceHostMsg_CancelRequest(request_id));
}
+void ResourceDispatcher::StopSendingDataACKs(int request_id) {
+ PendingRequestList::iterator it = pending_requests_.find(request_id);
+ if (it != pending_requests_.end())
+ it->second.send_data_acks = false;
+}
+
+void ResourceDispatcher::SendDataACK(int request_id) {
+ message_sender()->Send(new ResourceHostMsg_DataReceived_ACK(request_id));
+}
+
void ResourceDispatcher::SetDefersLoading(int request_id, bool value) {
PendingRequestList::iterator it = pending_requests_.find(request_id);
if (it == pending_requests_.end()) {
@@ -621,11 +646,22 @@ void ResourceDispatcher::DidChangePriority(
request_id, new_priority));
}
+blink::WebThreadedResourceProvider*
+ResourceDispatcher::CreateThreadedResourceProvider(int request_id) {
+ PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
+
+ return new WebThreadedResourceProviderImpl(request_id,
+ weak_factory_.GetWeakPtr(),
+ request_info->buffer,
+ request_info->buffer_size);
+}
+
ResourceDispatcher::PendingRequestInfo::PendingRequestInfo()
: peer(NULL),
resource_type(ResourceType::SUB_RESOURCE),
is_deferred(false),
- buffer_size(0) {
+ buffer_size(0),
+ send_data_acks(true) {
}
ResourceDispatcher::PendingRequestInfo::PendingRequestInfo(
@@ -641,7 +677,8 @@ ResourceDispatcher::PendingRequestInfo::PendingRequestInfo(
url(request_url),
frame_origin(frame_origin),
response_url(request_url),
- request_start(base::TimeTicks::Now()) {
+ request_start(base::TimeTicks::Now()),
+ send_data_acks(true) {
}
ResourceDispatcher::PendingRequestInfo::~PendingRequestInfo() {}

Powered by Google App Engine
This is Rietveld 408576698