Title: [222774] trunk/Source/WebCore
Revision
222774
Author
commit-qu...@webkit.org
Date
2017-10-03 02:35:07 -0700 (Tue, 03 Oct 2017)

Log Message

Use vector map routine in WebCore CacheStorage implementation
https://bugs.webkit.org/show_bug.cgi?id=177002

Patch by Youenn Fablet <you...@apple.com> on 2017-10-03
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):

Modified Paths

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)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to