Commit 89773f47 authored by tkent@chromium.org's avatar tkent@chromium.org

Oilpan: Prepare to move ResourceLoader and ResourceLoaderSet to Oilpan heap.

Also, this CL adds missing ResourceLoaderSet factory.

BUG=393516

Review URL: https://codereview.chromium.org/414423003

git-svn-id: svn://svn.chromium.org/blink/trunk@179120 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 7d261e59
...@@ -157,6 +157,7 @@ void Resource::dispose() ...@@ -157,6 +157,7 @@ void Resource::dispose()
void Resource::trace(Visitor* visitor) void Resource::trace(Visitor* visitor)
{ {
visitor->trace(m_loader);
visitor->trace(m_resourceToRevalidate); visitor->trace(m_resourceToRevalidate);
visitor->trace(m_proxyResource); visitor->trace(m_proxyResource);
} }
......
...@@ -326,7 +326,7 @@ protected: ...@@ -326,7 +326,7 @@ protected:
ResourceRequest m_resourceRequest; ResourceRequest m_resourceRequest;
AtomicString m_accept; AtomicString m_accept;
RefPtr<ResourceLoader> m_loader; RefPtrWillBeMember<ResourceLoader> m_loader;
ResourceLoaderOptions m_options; ResourceLoaderOptions m_options;
ResourceResponse m_response; ResourceResponse m_response;
......
...@@ -1344,7 +1344,7 @@ void ResourceFetcher::didDownloadData(const Resource* resource, int dataLength, ...@@ -1344,7 +1344,7 @@ void ResourceFetcher::didDownloadData(const Resource* resource, int dataLength,
void ResourceFetcher::subresourceLoaderFinishedLoadingOnePart(ResourceLoader* loader) void ResourceFetcher::subresourceLoaderFinishedLoadingOnePart(ResourceLoader* loader)
{ {
if (!m_multipartLoaders) if (!m_multipartLoaders)
m_multipartLoaders = adoptPtr(new ResourceLoaderSet()); m_multipartLoaders = ResourceLoaderSet::create();
m_multipartLoaders->add(loader); m_multipartLoaders->add(loader);
m_loaders->remove(loader); m_loaders->remove(loader);
if (LocalFrame* frame = this->frame()) if (LocalFrame* frame = this->frame())
...@@ -1356,7 +1356,7 @@ void ResourceFetcher::didInitializeResourceLoader(ResourceLoader* loader) ...@@ -1356,7 +1356,7 @@ void ResourceFetcher::didInitializeResourceLoader(ResourceLoader* loader)
if (!m_document) if (!m_document)
return; return;
if (!m_loaders) if (!m_loaders)
m_loaders = adoptPtr(new ResourceLoaderSet()); m_loaders = ResourceLoaderSet::create();
ASSERT(!m_loaders->contains(loader)); ASSERT(!m_loaders->contains(loader));
m_loaders->add(loader); m_loaders->add(loader);
} }
...@@ -1540,6 +1540,8 @@ void ResourceFetcher::DeadResourceStatsRecorder::update(RevalidationPolicy polic ...@@ -1540,6 +1540,8 @@ void ResourceFetcher::DeadResourceStatsRecorder::update(RevalidationPolicy polic
void ResourceFetcher::trace(Visitor* visitor) void ResourceFetcher::trace(Visitor* visitor)
{ {
visitor->trace(m_document); visitor->trace(m_document);
visitor->trace(m_loaders);
visitor->trace(m_multipartLoaders);
ResourceLoaderHost::trace(visitor); ResourceLoaderHost::trace(visitor);
} }
......
...@@ -222,8 +222,8 @@ private: ...@@ -222,8 +222,8 @@ private:
HashMap<RefPtr<ResourceTimingInfo>, bool> m_scheduledResourceTimingReports; HashMap<RefPtr<ResourceTimingInfo>, bool> m_scheduledResourceTimingReports;
OwnPtr<ResourceLoaderSet> m_loaders; OwnPtrWillBeMember<ResourceLoaderSet> m_loaders;
OwnPtr<ResourceLoaderSet> m_multipartLoaders; OwnPtrWillBeMember<ResourceLoaderSet> m_multipartLoaders;
// Used in hit rate histograms. // Used in hit rate histograms.
class DeadResourceStatsRecorder { class DeadResourceStatsRecorder {
......
...@@ -68,9 +68,9 @@ ResourceLoader::RequestCountTracker::RequestCountTracker(const RequestCountTrack ...@@ -68,9 +68,9 @@ ResourceLoader::RequestCountTracker::RequestCountTracker(const RequestCountTrack
m_host->incrementRequestCount(m_resource); m_host->incrementRequestCount(m_resource);
} }
PassRefPtr<ResourceLoader> ResourceLoader::create(ResourceLoaderHost* host, Resource* resource, const ResourceRequest& request, const ResourceLoaderOptions& options) PassRefPtrWillBeRawPtr<ResourceLoader> ResourceLoader::create(ResourceLoaderHost* host, Resource* resource, const ResourceRequest& request, const ResourceLoaderOptions& options)
{ {
RefPtr<ResourceLoader> loader(adoptRef(new ResourceLoader(host, resource, options))); RefPtrWillBeRawPtr<ResourceLoader> loader(adoptRefWillBeNoop(new ResourceLoader(host, resource, options)));
loader->init(request); loader->init(request);
return loader.release(); return loader.release();
} }
...@@ -92,6 +92,12 @@ ResourceLoader::~ResourceLoader() ...@@ -92,6 +92,12 @@ ResourceLoader::~ResourceLoader()
ASSERT(m_state == Terminated); ASSERT(m_state == Terminated);
} }
void ResourceLoader::trace(Visitor* visitor)
{
visitor->trace(m_host);
visitor->trace(m_resource);
}
void ResourceLoader::releaseResources() void ResourceLoader::releaseResources()
{ {
ASSERT(m_state != Terminated); ASSERT(m_state != Terminated);
...@@ -109,7 +115,7 @@ void ResourceLoader::releaseResources() ...@@ -109,7 +115,7 @@ void ResourceLoader::releaseResources()
// deallocated and release the last reference to this object. // deallocated and release the last reference to this object.
// We need to retain to avoid accessing the object after it // We need to retain to avoid accessing the object after it
// has been deallocated and also to avoid reentering this method. // has been deallocated and also to avoid reentering this method.
RefPtr<ResourceLoader> protector(this); RefPtrWillBeRawPtr<ResourceLoader> protector(this);
m_host.clear(); m_host.clear();
m_state = Terminated; m_state = Terminated;
...@@ -200,7 +206,7 @@ void ResourceLoader::attachThreadedDataReceiver(PassOwnPtr<blink::WebThreadedDat ...@@ -200,7 +206,7 @@ void ResourceLoader::attachThreadedDataReceiver(PassOwnPtr<blink::WebThreadedDat
void ResourceLoader::didDownloadData(blink::WebURLLoader*, int length, int encodedDataLength) void ResourceLoader::didDownloadData(blink::WebURLLoader*, int length, int encodedDataLength)
{ {
RefPtr<ResourceLoader> protect(this); RefPtrWillBeRawPtr<ResourceLoader> protect(this);
RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse); RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse);
m_host->didDownloadData(m_resource, length, encodedDataLength); m_host->didDownloadData(m_resource, length, encodedDataLength);
m_resource->didDownloadData(length); m_resource->didDownloadData(length);
...@@ -253,7 +259,7 @@ void ResourceLoader::cancel(const ResourceError& error) ...@@ -253,7 +259,7 @@ void ResourceLoader::cancel(const ResourceError& error)
// This function calls out to clients at several points that might do // This function calls out to clients at several points that might do
// something that causes the last reference to this object to go away. // something that causes the last reference to this object to go away.
RefPtr<ResourceLoader> protector(this); RefPtrWillBeRawPtr<ResourceLoader> protector(this);
WTF_LOG(ResourceLoading, "Cancelled load of '%s'.\n", m_resource->url().string().latin1().data()); WTF_LOG(ResourceLoading, "Cancelled load of '%s'.\n", m_resource->url().string().latin1().data());
if (m_state == Initialized) if (m_state == Initialized)
...@@ -279,7 +285,7 @@ void ResourceLoader::cancel(const ResourceError& error) ...@@ -279,7 +285,7 @@ void ResourceLoader::cancel(const ResourceError& error)
void ResourceLoader::willSendRequest(blink::WebURLLoader*, blink::WebURLRequest& passedRequest, const blink::WebURLResponse& passedRedirectResponse) void ResourceLoader::willSendRequest(blink::WebURLLoader*, blink::WebURLRequest& passedRequest, const blink::WebURLResponse& passedRedirectResponse)
{ {
RefPtr<ResourceLoader> protect(this); RefPtrWillBeRawPtr<ResourceLoader> protect(this);
ResourceRequest& request(applyOptions(passedRequest.toMutableResourceRequest())); ResourceRequest& request(applyOptions(passedRequest.toMutableResourceRequest()));
...@@ -316,7 +322,7 @@ void ResourceLoader::didReceiveCachedMetadata(blink::WebURLLoader*, const char* ...@@ -316,7 +322,7 @@ void ResourceLoader::didReceiveCachedMetadata(blink::WebURLLoader*, const char*
void ResourceLoader::didSendData(blink::WebURLLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) void ResourceLoader::didSendData(blink::WebURLLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
{ {
ASSERT(m_state == Initialized); ASSERT(m_state == Initialized);
RefPtr<ResourceLoader> protect(this); RefPtrWillBeRawPtr<ResourceLoader> protect(this);
m_resource->didSendData(bytesSent, totalBytesToBeSent); m_resource->didSendData(bytesSent, totalBytesToBeSent);
} }
...@@ -357,7 +363,7 @@ void ResourceLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebUR ...@@ -357,7 +363,7 @@ void ResourceLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebUR
// Reference the object in this method since the additional processing can do // Reference the object in this method since the additional processing can do
// anything including removing the last reference to this object. // anything including removing the last reference to this object.
RefPtr<ResourceLoader> protect(this); RefPtrWillBeRawPtr<ResourceLoader> protect(this);
m_resource->responseReceived(resourceResponse); m_resource->responseReceived(resourceResponse);
if (m_state == Terminated) if (m_state == Terminated)
return; return;
...@@ -404,7 +410,7 @@ void ResourceLoader::didReceiveData(blink::WebURLLoader*, const char* data, int ...@@ -404,7 +410,7 @@ void ResourceLoader::didReceiveData(blink::WebURLLoader*, const char* data, int
// Reference the object in this method since the additional processing can do // Reference the object in this method since the additional processing can do
// anything including removing the last reference to this object. // anything including removing the last reference to this object.
RefPtr<ResourceLoader> protect(this); RefPtrWillBeRawPtr<ResourceLoader> protect(this);
// FIXME: If we get a resource with more than 2B bytes, this code won't do the right thing. // FIXME: If we get a resource with more than 2B bytes, this code won't do the right thing.
// However, with today's computers and networking speeds, this won't happen in practice. // However, with today's computers and networking speeds, this won't happen in practice.
...@@ -422,7 +428,7 @@ void ResourceLoader::didFinishLoading(blink::WebURLLoader*, double finishTime, i ...@@ -422,7 +428,7 @@ void ResourceLoader::didFinishLoading(blink::WebURLLoader*, double finishTime, i
ASSERT(m_state != Terminated); ASSERT(m_state != Terminated);
WTF_LOG(ResourceLoading, "Received '%s'.", m_resource->url().string().latin1().data()); WTF_LOG(ResourceLoading, "Received '%s'.", m_resource->url().string().latin1().data());
RefPtr<ResourceLoader> protect(this); RefPtrWillBeRawPtr<ResourceLoader> protect(this);
ResourcePtr<Resource> protectResource(m_resource); ResourcePtr<Resource> protectResource(m_resource);
m_state = Finishing; m_state = Finishing;
didFinishLoadingOnePart(finishTime, encodedDataLength); didFinishLoadingOnePart(finishTime, encodedDataLength);
...@@ -441,7 +447,7 @@ void ResourceLoader::didFail(blink::WebURLLoader*, const blink::WebURLError& err ...@@ -441,7 +447,7 @@ void ResourceLoader::didFail(blink::WebURLLoader*, const blink::WebURLError& err
ASSERT(m_state != Terminated); ASSERT(m_state != Terminated);
WTF_LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string().latin1().data()); WTF_LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string().latin1().data());
RefPtr<ResourceLoader> protect(this); RefPtrWillBeRawPtr<ResourceLoader> protect(this);
RefPtrWillBeRawPtr<ResourceLoaderHost> protectHost(m_host.get()); RefPtrWillBeRawPtr<ResourceLoaderHost> protectHost(m_host.get());
ResourcePtr<Resource> protectResource(m_resource); ResourcePtr<Resource> protectResource(m_resource);
m_state = Finishing; m_state = Finishing;
...@@ -473,7 +479,7 @@ void ResourceLoader::requestSynchronously() ...@@ -473,7 +479,7 @@ void ResourceLoader::requestSynchronously()
// downloadToFile is not supported for synchronous requests. // downloadToFile is not supported for synchronous requests.
ASSERT(!m_request.downloadToFile()); ASSERT(!m_request.downloadToFile());
RefPtr<ResourceLoader> protect(this); RefPtrWillBeRawPtr<ResourceLoader> protect(this);
RefPtrWillBeRawPtr<ResourceLoaderHost> protectHost(m_host.get()); RefPtrWillBeRawPtr<ResourceLoaderHost> protectHost(m_host.get());
ResourcePtr<Resource> protectResource(m_resource); ResourcePtr<Resource> protectResource(m_resource);
......
...@@ -48,10 +48,11 @@ class ResourceError; ...@@ -48,10 +48,11 @@ class ResourceError;
class ResourceResponse; class ResourceResponse;
class ResourceLoaderHost; class ResourceLoaderHost;
class ResourceLoader FINAL : public RefCounted<ResourceLoader>, protected blink::WebURLLoaderClient { class ResourceLoader FINAL : public RefCountedWillBeGarbageCollectedFinalized<ResourceLoader>, protected WebURLLoaderClient {
public: public:
static PassRefPtr<ResourceLoader> create(ResourceLoaderHost*, Resource*, const ResourceRequest&, const ResourceLoaderOptions&); static PassRefPtrWillBeRawPtr<ResourceLoader> create(ResourceLoaderHost*, Resource*, const ResourceRequest&, const ResourceLoaderOptions&);
virtual ~ResourceLoader(); virtual ~ResourceLoader();
void trace(Visitor*);
void start(); void start();
void changeToSynchronous(); void changeToSynchronous();
...@@ -112,7 +113,7 @@ private: ...@@ -112,7 +113,7 @@ private:
ResourceRequest& applyOptions(ResourceRequest&) const; ResourceRequest& applyOptions(ResourceRequest&) const;
OwnPtr<blink::WebURLLoader> m_loader; OwnPtr<blink::WebURLLoader> m_loader;
RefPtrWillBePersistent<ResourceLoaderHost> m_host; RefPtrWillBeMember<ResourceLoaderHost> m_host;
ResourceRequest m_request; ResourceRequest m_request;
ResourceRequest m_originalRequest; // Before redirects. ResourceRequest m_originalRequest; // Before redirects.
...@@ -139,7 +140,7 @@ private: ...@@ -139,7 +140,7 @@ private:
ConnectionStateFailed, ConnectionStateFailed,
}; };
Resource* m_resource; RawPtrWillBeMember<Resource> m_resource;
ResourceLoaderState m_state; ResourceLoaderState m_state;
// Used for sanity checking to make sure we don't experience illegal state // Used for sanity checking to make sure we don't experience illegal state
......
...@@ -35,9 +35,21 @@ ...@@ -35,9 +35,21 @@
namespace blink { namespace blink {
PassOwnPtrWillBeRawPtr<ResourceLoaderSet> ResourceLoaderSet::create()
{
return adoptPtrWillBeNoop(new ResourceLoaderSet);
}
void ResourceLoaderSet::trace(Visitor* visitor)
{
#if ENABLE(OILPAN)
visitor->trace(m_set);
#endif
}
void ResourceLoaderSet::cancelAll() void ResourceLoaderSet::cancelAll()
{ {
Vector<RefPtr<ResourceLoader> > loadersCopy; WillBeHeapVector<RefPtrWillBeMember<ResourceLoader> > loadersCopy;
copyToVector(m_set, loadersCopy); copyToVector(m_set, loadersCopy);
size_t size = loadersCopy.size(); size_t size = loadersCopy.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -46,7 +58,7 @@ void ResourceLoaderSet::cancelAll() ...@@ -46,7 +58,7 @@ void ResourceLoaderSet::cancelAll()
void ResourceLoaderSet::setAllDefersLoading(bool defers) void ResourceLoaderSet::setAllDefersLoading(bool defers)
{ {
Vector<RefPtr<ResourceLoader> > loadersCopy; WillBeHeapVector<RefPtrWillBeMember<ResourceLoader> > loadersCopy;
copyToVector(m_set, loadersCopy); copyToVector(m_set, loadersCopy);
size_t size = loadersCopy.size(); size_t size = loadersCopy.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
......
...@@ -36,14 +36,17 @@ ...@@ -36,14 +36,17 @@
namespace blink { namespace blink {
class ResourceLoaderSet { class ResourceLoaderSet FINAL : public NoBaseWillBeGarbageCollected<ResourceLoaderSet> {
public: public:
typedef HashSet<RefPtr<ResourceLoader> > SetType; typedef WillBeHeapHashSet<RefPtrWillBeMember<ResourceLoader> > SetType;
void add(const RefPtr<ResourceLoader>& loader) { m_set.add(loader); } static PassOwnPtrWillBeRawPtr<ResourceLoaderSet> create();
void remove(const RefPtr<ResourceLoader>& loader) { m_set.remove(loader); } void trace(Visitor*);
void add(const RefPtrWillBeRawPtr<ResourceLoader>& loader) { m_set.add(loader); }
void remove(const RefPtrWillBeRawPtr<ResourceLoader>& loader) { m_set.remove(loader); }
bool isEmpty() const { return m_set.isEmpty(); } bool isEmpty() const { return m_set.isEmpty(); }
bool contains(const RefPtr<ResourceLoader>& loader) const { return m_set.contains(loader); } bool contains(const RefPtrWillBeRawPtr<ResourceLoader>& loader) const { return m_set.contains(loader); }
void cancelAll(); void cancelAll();
void setAllDefersLoading(bool); void setAllDefersLoading(bool);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment