Diff
Modified: trunk/Source/WebCore/ChangeLog (222773 => 222774)
--- trunk/Source/WebCore/ChangeLog 2017-10-03 08:58:06 UTC (rev 222773)
+++ trunk/Source/WebCore/ChangeLog 2017-10-03 09:35:07 UTC (rev 222774)
@@ -1,3 +1,30 @@
+2017-10-03 Youenn Fablet <you...@apple.com>
+
+ Use vector map routine in WebCore CacheStorage implementation
+ https://bugs.webkit.org/show_bug.cgi?id=177002
+
+ Reviewed by Darin Adler.
+
+ No change of behavior.
+ Replacing use of reserveInitialCapacity/uncheckedAppend by use of map.
+
+ * Modules/cache/CacheStorage.cpp:
+ (WebCore::copyCache):
+ (WebCore::CacheStorage::match):
+ (WebCore::CacheStorage::retrieveCaches):
+ (WebCore::CacheStorage::keys):
+ (WebCore::copyCaches): Deleted.
+ * Modules/cache/DOMCache.cpp:
+ (WebCore::DOMCache::matchAll):
+ (WebCore::copyRequestRef):
+ (WebCore::DOMCache::keys):
+ * Modules/cache/DOMCacheEngine.cpp:
+ (WebCore::DOMCacheEngine::isolateCacheInfo):
+ (WebCore::DOMCacheEngine::CacheInfos::isolatedCopy):
+ * Modules/cache/WorkerCacheStorageConnection.cpp:
+ (WebCore::recordsDataFromRecords):
+ (WebCore::recordsFromRecordsData):
+
2017-10-02 Myles C. Maxfield <mmaxfi...@apple.com>
Move LineEnding.{h,cpp} from WebCore/platform/text to wtf/text
Modified: trunk/Source/WebCore/Modules/cache/DOMCache.cpp (222773 => 222774)
--- trunk/Source/WebCore/Modules/cache/DOMCache.cpp 2017-10-03 08:58:06 UTC (rev 222773)
+++ trunk/Source/WebCore/Modules/cache/DOMCache.cpp 2017-10-03 09:35:07 UTC (rev 222774)
@@ -95,6 +95,14 @@
});
}
+Vector<Ref<FetchResponse>> DOMCache::cloneResponses(const Vector<CacheStorageRecord>& records)
+{
+ auto& context = *scriptExecutionContext();
+ return WTF::map(records, [&context] (const auto& record) {
+ return record.response->clone(context).releaseReturnValue();
+ });
+}
+
void DOMCache::matchAll(std::optional<RequestInfo>&& info, CacheQueryOptions&& options, MatchAllPromise&& promise)
{
if (UNLIKELY(!scriptExecutionContext()))
@@ -116,11 +124,7 @@
promise.reject(WTFMove(exception.value()));
return;
}
- Vector<Ref<FetchResponse>> responses;
- responses.reserveInitialCapacity(m_records.size());
- for (auto& record : m_records)
- responses.uncheckedAppend(record.response->clone(*scriptExecutionContext()).releaseReturnValue());
- promise.resolve(WTFMove(responses));
+ promise.resolve(cloneResponses(m_records));
});
return;
}
@@ -129,12 +133,7 @@
promise.reject(result.releaseException());
return;
}
- auto records = result.releaseReturnValue();
- Vector<Ref<FetchResponse>> responses;
- responses.reserveInitialCapacity(records.size());
- for (auto& record : records)
- responses.uncheckedAppend(record.response->clone(*scriptExecutionContext()).releaseReturnValue());
- promise.resolve(responses);
+ promise.resolve(cloneResponses(result.releaseReturnValue()));
});
}
@@ -373,6 +372,11 @@
});
}
+static inline Ref<FetchRequest> copyRequestRef(const CacheStorageRecord& record)
+{
+ return record.request.copyRef();
+}
+
void DOMCache::keys(std::optional<RequestInfo>&& info, CacheQueryOptions&& options, KeysPromise&& promise)
{
if (UNLIKELY(!scriptExecutionContext()))
@@ -394,11 +398,7 @@
promise.reject(WTFMove(exception.value()));
return;
}
- Vector<Ref<FetchRequest>> requests;
- requests.reserveInitialCapacity(m_records.size());
- for (auto& record : m_records)
- requests.uncheckedAppend(record.request.copyRef());
- promise.resolve(requests);
+ promise.resolve(WTF::map(m_records, copyRequestRef));
});
return;
}
@@ -409,12 +409,7 @@
return;
}
- auto records = result.releaseReturnValue();
- Vector<Ref<FetchRequest>> requests;
- requests.reserveInitialCapacity(records.size());
- for (auto& record : records)
- requests.uncheckedAppend(record.request.copyRef());
- promise.resolve(requests);
+ promise.resolve(WTF::map(result.releaseReturnValue(), copyRequestRef));
});
}
Modified: trunk/Source/WebCore/Modules/cache/DOMCache.h (222773 => 222774)
--- trunk/Source/WebCore/Modules/cache/DOMCache.h 2017-10-03 08:58:06 UTC (rev 222773)
+++ trunk/Source/WebCore/Modules/cache/DOMCache.h 2017-10-03 09:35:07 UTC (rev 222774)
@@ -79,6 +79,7 @@
void batchPutOperation(Vector<DOMCacheEngine::Record>&&, WTF::Function<void(ExceptionOr<void>&&)>&&);
void updateRecords(Vector<DOMCacheEngine::Record>&&);
+ Vector<Ref<FetchResponse>> cloneResponses(const Vector<CacheStorageRecord>&);
String m_name;
uint64_t m_identifier;
Modified: trunk/Source/WebCore/Modules/cache/DOMCacheEngine.cpp (222773 => 222774)
--- trunk/Source/WebCore/Modules/cache/DOMCacheEngine.cpp 2017-10-03 08:58:06 UTC (rev 222773)
+++ trunk/Source/WebCore/Modules/cache/DOMCacheEngine.cpp 2017-10-03 09:35:07 UTC (rev 222774)
@@ -138,13 +138,14 @@
return Record { identifier, updateResponseCounter, requestHeadersGuard, request, options, referrer, responseHeadersGuard, response, copyResponseBody(responseBody) };
}
+static inline CacheInfo isolateCacheInfo(const CacheInfo& info)
+{
+ return CacheInfo { info.identifier, info.name.isolatedCopy() };
+}
+
CacheInfos CacheInfos::isolatedCopy()
{
- Vector<CacheInfo> isolatedCaches;
- isolatedCaches.reserveInitialCapacity(infos.size());
- for (const auto& info : infos)
- isolatedCaches.uncheckedAppend(CacheInfo { info.identifier, info.name.isolatedCopy() });
- return { WTFMove(isolatedCaches), updateCounter };
+ return { WTF::map(infos, isolateCacheInfo), updateCounter };
}
} // namespace DOMCacheEngine
Modified: trunk/Source/WebCore/Modules/cache/DOMCacheStorage.cpp (222773 => 222774)
--- trunk/Source/WebCore/Modules/cache/DOMCacheStorage.cpp 2017-10-03 08:58:06 UTC (rev 222773)
+++ trunk/Source/WebCore/Modules/cache/DOMCacheStorage.cpp 2017-10-03 09:35:07 UTC (rev 222774)
@@ -74,13 +74,9 @@
doSequentialMatch(0, WTFMove(caches), WTFMove(info), WTFMove(options), WTFMove(completionHandler));
}
-static inline Vector<Ref<DOMCache>> copyCaches(const Vector<Ref<DOMCache>>& caches)
+static inline Ref<DOMCache> copyCache(const Ref<DOMCache>& cache)
{
- Vector<Ref<DOMCache>> copy;
- copy.reserveInitialCapacity(caches.size());
- for (auto& cache : caches)
- copy.uncheckedAppend(cache.copyRef());
- return copy;
+ return cache.copyRef();
}
void DOMCacheStorage::match(DOMCache::RequestInfo&& info, CacheQueryOptions&& options, Ref<DeferredPromise>&& promise)
@@ -102,7 +98,7 @@
}
setPendingActivity(this);
- startSequentialMatch(copyCaches(m_caches), WTFMove(info), WTFMove(options), [this, promise = WTFMove(promise)](ExceptionOr<FetchResponse*>&& result) mutable {
+ startSequentialMatch(WTF::map(m_caches, copyCache), WTFMove(info), WTFMove(options), [this, promise = WTFMove(promise)](ExceptionOr<FetchResponse*>&& result) mutable {
if (!m_isStopped) {
if (result.hasException()) {
promise->reject(result.releaseException());
@@ -129,6 +125,14 @@
});
}
+Ref<DOMCache> DOMCacheStorage::findCacheOrCreate(CacheInfo&& info)
+{
+ auto position = m_caches.findMatching([&] (const auto& cache) { return info.identifier == cache->identifier(); });
+ if (position != notFound)
+ return m_caches[position].copyRef();
+ return DOMCache::create(*scriptExecutionContext(), WTFMove(info.name), info.identifier, m_connection.copyRef());
+}
+
void DOMCacheStorage::retrieveCaches(WTF::Function<void(std::optional<Exception>&&)>&& callback)
{
String origin = this->origin();
@@ -148,16 +152,9 @@
if (m_updateCounter != cachesInfo.updateCounter) {
m_updateCounter = cachesInfo.updateCounter;
- ASSERT(scriptExecutionContext());
-
- Vector<Ref<DOMCache>> caches;
- caches.reserveInitialCapacity(cachesInfo.infos.size());
- for (auto& info : cachesInfo.infos) {
- auto position = m_caches.findMatching([&](const auto& cache) { return info.identifier == cache->identifier(); });
- caches.uncheckedAppend(position != notFound ? m_caches[position].copyRef() : DOMCache::create(*scriptExecutionContext(), WTFMove(info.name), info.identifier, m_connection.copyRef()));
- }
- m_caches = WTFMove(caches);
-
+ m_caches = WTF::map(WTFMove(cachesInfo.infos), [this] (CacheInfo&& info) {
+ return findCacheOrCreate(WTFMove(info));
+ });
}
callback(std::nullopt);
}
@@ -252,11 +249,9 @@
return;
}
- Vector<String> keys;
- keys.reserveInitialCapacity(m_caches.size());
- for (auto& cache : m_caches)
- keys.uncheckedAppend(cache->name());
- promise.resolve(keys);
+ promise.resolve(WTF::map(m_caches, [] (const auto& cache) {
+ return cache->name();
+ }));
});
}
Modified: trunk/Source/WebCore/Modules/cache/DOMCacheStorage.h (222773 => 222774)
--- trunk/Source/WebCore/Modules/cache/DOMCacheStorage.h 2017-10-03 08:58:06 UTC (rev 222773)
+++ trunk/Source/WebCore/Modules/cache/DOMCacheStorage.h 2017-10-03 09:35:07 UTC (rev 222774)
@@ -53,6 +53,7 @@
bool canSuspendForDocumentSuspension() const final;
void retrieveCaches(WTF::Function<void(std::optional<Exception>&&)>&&);
+ Ref<DOMCache> findCacheOrCreate(DOMCacheEngine::CacheInfo&&);
String origin() const;
Vector<Ref<DOMCache>> m_caches;
Modified: trunk/Source/WebCore/Modules/cache/WorkerCacheStorageConnection.cpp (222773 => 222774)
--- trunk/Source/WebCore/Modules/cache/WorkerCacheStorageConnection.cpp 2017-10-03 08:58:06 UTC (rev 222773)
+++ trunk/Source/WebCore/Modules/cache/WorkerCacheStorageConnection.cpp 2017-10-03 09:35:07 UTC (rev 222774)
@@ -185,11 +185,7 @@
static inline Vector<CrossThreadRecordData> recordsDataFromRecords(const Vector<Record>& records)
{
- Vector<CrossThreadRecordData> recordsData;
- recordsData.reserveInitialCapacity(records.size());
- for (const auto& record : records)
- recordsData.uncheckedAppend(toCrossThreadRecordData(record));
- return recordsData;
+ return WTF::map(records, toCrossThreadRecordData);
}
static inline Expected<Vector<CrossThreadRecordData>, Error> recordsDataOrErrorFromRecords(const RecordsOrError& result)
@@ -202,11 +198,7 @@
static inline Vector<Record> recordsFromRecordsData(Vector<CrossThreadRecordData>&& recordsData)
{
- Vector<Record> records;
- records.reserveInitialCapacity(recordsData.size());
- for (auto& recordData : recordsData)
- records.uncheckedAppend(fromCrossThreadRecordData(WTFMove(recordData)));
- return records;
+ return WTF::map(WTFMove(recordsData), fromCrossThreadRecordData);
}
static inline RecordsOrError recordsOrErrorFromRecordsData(Expected<Vector<CrossThreadRecordData>, Error>&& recordsData)