Drop NetworkCacheStatistics code
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Mar 2019 17:05:55 +0000 (17:05 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Mar 2019 17:05:55 +0000 (17:05 +0000)
https://bugs.webkit.org/show_bug.cgi?id=195910

Reviewed by Antti Koivisto.

Drop NetworkCacheStatistics code. It was a temporary experiment and has not been used in a long time.

* NetworkProcess/NetworkProcessCreationParameters.cpp:
(WebKit::NetworkProcessCreationParameters::encode const):
(WebKit::NetworkProcessCreationParameters::decode):
* NetworkProcess/NetworkProcessCreationParameters.h:
* NetworkProcess/cache/NetworkCache.cpp:
(WebKit::NetworkCache::Cache::Cache):
(WebKit::NetworkCache::Cache::retrieve):
(WebKit::NetworkCache::Cache::store):
(WebKit::NetworkCache::Cache::storeRedirect):
(WebKit::NetworkCache::Cache::update):
(WebKit::NetworkCache::Cache::clear):
* NetworkProcess/cache/NetworkCache.h:
* NetworkProcess/cache/NetworkCacheStatistics.cpp: Removed.
* NetworkProcess/cache/NetworkCacheStatistics.h: Removed.
* NetworkProcess/cache/NetworkCacheStorage.cpp:
(WebKit::NetworkCache::traverseRecordsFiles):
* NetworkProcess/cache/NetworkCacheStorage.h:
* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
* NetworkProcess/soup/NetworkProcessSoup.cpp:
(WebKit::NetworkProcess::platformInitializeNetworkProcess):
* Sources.txt:
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::registerUserDefaultsIfNeeded):
(WebKit::WebProcessPool::platformInitializeNetworkProcess):
* UIProcess/soup/WebProcessPoolSoup.cpp:
(WebKit::WebProcessPool::platformInitializeNetworkProcess):
* WebKit.xcodeproj/project.pbxproj:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243143 268f45cc-cd09-0410-ab3c-d52691b4dbfc

15 files changed:
Source/WebKit/ChangeLog
Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp
Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h
Source/WebKit/NetworkProcess/cache/NetworkCache.cpp
Source/WebKit/NetworkProcess/cache/NetworkCache.h
Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.cpp [deleted file]
Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.h [deleted file]
Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.cpp
Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h
Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm
Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp
Source/WebKit/Sources.txt
Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm
Source/WebKit/UIProcess/soup/WebProcessPoolSoup.cpp
Source/WebKit/WebKit.xcodeproj/project.pbxproj

index e085817..df1cfa8 100644 (file)
@@ -1,5 +1,43 @@
 2019-03-19  Chris Dumez  <cdumez@apple.com>
 
+        Drop NetworkCacheStatistics code
+        https://bugs.webkit.org/show_bug.cgi?id=195910
+
+        Reviewed by Antti Koivisto.
+
+        Drop NetworkCacheStatistics code. It was a temporary experiment and has not been used in a long time.
+
+        * NetworkProcess/NetworkProcessCreationParameters.cpp:
+        (WebKit::NetworkProcessCreationParameters::encode const):
+        (WebKit::NetworkProcessCreationParameters::decode):
+        * NetworkProcess/NetworkProcessCreationParameters.h:
+        * NetworkProcess/cache/NetworkCache.cpp:
+        (WebKit::NetworkCache::Cache::Cache):
+        (WebKit::NetworkCache::Cache::retrieve):
+        (WebKit::NetworkCache::Cache::store):
+        (WebKit::NetworkCache::Cache::storeRedirect):
+        (WebKit::NetworkCache::Cache::update):
+        (WebKit::NetworkCache::Cache::clear):
+        * NetworkProcess/cache/NetworkCache.h:
+        * NetworkProcess/cache/NetworkCacheStatistics.cpp: Removed.
+        * NetworkProcess/cache/NetworkCacheStatistics.h: Removed.
+        * NetworkProcess/cache/NetworkCacheStorage.cpp:
+        (WebKit::NetworkCache::traverseRecordsFiles):
+        * NetworkProcess/cache/NetworkCacheStorage.h:
+        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
+        * NetworkProcess/soup/NetworkProcessSoup.cpp:
+        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
+        * Sources.txt:
+        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+        (WebKit::registerUserDefaultsIfNeeded):
+        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
+        * UIProcess/soup/WebProcessPoolSoup.cpp:
+        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
+        * WebKit.xcodeproj/project.pbxproj:
+
+2019-03-19  Chris Dumez  <cdumez@apple.com>
+
         Spew: Unhandled web process message 'VisitedLinkTableController:VisitedLinkStateChanged'
         https://bugs.webkit.org/show_bug.cgi?id=194787
         <rdar://problem/48175520>
index a3dfe60..01ef09a 100644 (file)
@@ -45,7 +45,6 @@ void NetworkProcessCreationParameters::encode(IPC::Encoder& encoder) const
     encoder << canHandleHTTPSServerTrustEvaluation;
     encoder << diskCacheDirectory;
     encoder << diskCacheDirectoryExtensionHandle;
-    encoder << shouldEnableNetworkCacheEfficacyLogging;
 #if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
     encoder << shouldEnableNetworkCacheSpeculativeRevalidation;
 #endif
@@ -113,8 +112,6 @@ bool NetworkProcessCreationParameters::decode(IPC::Decoder& decoder, NetworkProc
         return false;
     result.diskCacheDirectoryExtensionHandle = WTFMove(*diskCacheDirectoryExtensionHandle);
 
-    if (!decoder.decode(result.shouldEnableNetworkCacheEfficacyLogging))
-        return false;
 #if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
     if (!decoder.decode(result.shouldEnableNetworkCacheSpeculativeRevalidation))
         return false;
index b428740..cc1ae7f 100644 (file)
@@ -56,7 +56,6 @@ struct NetworkProcessCreationParameters {
 
     String diskCacheDirectory;
     SandboxExtension::Handle diskCacheDirectoryExtensionHandle;
-    bool shouldEnableNetworkCacheEfficacyLogging { false };
 #if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
     bool shouldEnableNetworkCacheSpeculativeRevalidation { false };
 #endif
index a6ba2b2..ee30629 100644 (file)
@@ -28,7 +28,6 @@
 
 #include "Logging.h"
 #include "NetworkCacheSpeculativeLoadManager.h"
-#include "NetworkCacheStatistics.h"
 #include "NetworkCacheStorage.h"
 #include "NetworkProcess.h"
 #include <WebCore/CacheValidation.h>
@@ -99,9 +98,6 @@ Cache::Cache(NetworkProcess& networkProcess, Ref<Storage>&& storage, OptionSet<O
     }
 #endif
 
-    if (options.contains(Option::EfficacyLogging))
-        m_statistics = Statistics::open(*this, m_storage->basePath());
-
     if (options.contains(Option::RegisterNotify)) {
 #if PLATFORM(COCOA)
         // Triggers with "notifyutil -p com.apple.WebKit.Cache.dump".
@@ -279,9 +275,6 @@ void Cache::retrieve(const WebCore::ResourceRequest& request, const GlobalFrameI
 
     LOG(NetworkCache, "(NetworkProcess) retrieving %s priority %d", request.url().string().ascii().data(), static_cast<int>(request.priority()));
 
-    if (m_statistics)
-        m_statistics->recordRetrievalRequest(frameID.first);
-
     Key storageKey = makeCacheKey(request);
     auto priority = static_cast<unsigned>(request.priority());
 
@@ -297,9 +290,6 @@ void Cache::retrieve(const WebCore::ResourceRequest& request, const GlobalFrameI
 
     auto retrieveDecision = makeRetrieveDecision(request);
     if (retrieveDecision != RetrieveDecision::Yes) {
-        if (m_statistics)
-            m_statistics->recordNotUsingCacheForRequest(frameID.first, storageKey, request, retrieveDecision);
-
         completeRetrieve(WTFMove(completionHandler), nullptr, info);
         return;
     }
@@ -317,15 +307,12 @@ void Cache::retrieve(const WebCore::ResourceRequest& request, const GlobalFrameI
     }
 #endif
 
-    m_storage->retrieve(storageKey, priority, [this, protectedThis = makeRef(*this), request, completionHandler = WTFMove(completionHandler), info = WTFMove(info), storageKey, frameID, networkProcess = makeRef(networkProcess())](auto record, auto timings) mutable {
+    m_storage->retrieve(storageKey, priority, [request, completionHandler = WTFMove(completionHandler), info = WTFMove(info), storageKey, networkProcess = makeRef(networkProcess())](auto record, auto timings) mutable {
         info.storageTimings = timings;
 
         if (!record) {
             LOG(NetworkCache, "(NetworkProcess) not found in storage");
 
-            if (m_statistics)
-                m_statistics->recordRetrievalFailure(frameID.first, storageKey, request);
-
             completeRetrieve(WTFMove(completionHandler), nullptr, info);
             return false;
         }
@@ -351,8 +338,6 @@ void Cache::retrieve(const WebCore::ResourceRequest& request, const GlobalFrameI
 #endif
         completeRetrieve(WTFMove(completionHandler), WTFMove(entry), info);
 
-        if (m_statistics)
-            m_statistics->recordRetrievedCachedEntry(frameID.first, storageKey, request, useDecision);
         return useDecision != UseDecision::NoDueToDecodeFailure;
     });
 }
@@ -390,9 +375,6 @@ std::unique_ptr<Entry> Cache::store(const WebCore::ResourceRequest& request, con
             remove(key);
         }
 
-        if (m_statistics)
-            m_statistics->recordNotCachingResponse(key, storeDecision);
-
         return nullptr;
     }
 
@@ -422,10 +404,6 @@ std::unique_ptr<Entry> Cache::storeRedirect(const WebCore::ResourceRequest& requ
     StoreDecision storeDecision = makeStoreDecision(request, response, 0);
     if (storeDecision != StoreDecision::Yes) {
         LOG(NetworkCache, "(NetworkProcess) didn't store redirect, storeDecision=%d", static_cast<int>(storeDecision));
-        auto key = makeCacheKey(request);
-        if (m_statistics)
-            m_statistics->recordNotCachingResponse(key, storeDecision);
-
         return nullptr;
     }
 
@@ -459,9 +437,6 @@ std::unique_ptr<Entry> Cache::update(const WebCore::ResourceRequest& originalReq
 
     m_storage->store(updateRecord, { });
 
-    if (m_statistics)
-        m_statistics->recordRevalidationSuccess(frameID.first, existingEntry.key(), originalRequest);
-
     return updateEntry;
 }
 
@@ -583,9 +558,6 @@ void Cache::clear(WallTime modifiedSince, Function<void()>&& completionHandler)
 {
     LOG(NetworkCache, "(NetworkProcess) clearing cache");
 
-    if (m_statistics)
-        m_statistics->clear();
-
     String anyType;
     m_storage->clear(anyType, modifiedSince, WTFMove(completionHandler));
 
index 3e47861..c7f386b 100644 (file)
@@ -48,7 +48,6 @@ namespace NetworkCache {
 
 class Cache;
 class SpeculativeLoadManager;
-class Statistics;
 
 struct MappedBody {
 #if ENABLE(SHAREABLE_RESOURCE)
@@ -65,12 +64,10 @@ enum class RetrieveDecision {
     NoDueToStreamingMedia,
 };
 
-// FIXME: This enum is used in the Statistics code in a way that prevents removing or reordering anything.
 enum class StoreDecision {
     Yes,
     NoDueToProtocol,
     NoDueToHTTPMethod,
-    NoDueToAttachmentResponse, // Unused.
     NoDueToNoStoreResponse,
     NoDueToHTTPStatusCode,
     NoDueToNoStoreRequest,
@@ -92,12 +89,11 @@ using GlobalFrameID = std::pair<uint64_t /*webPageID*/, uint64_t /*webFrameID*/>
 class Cache : public RefCounted<Cache> {
 public:
     enum class Option {
-        EfficacyLogging = 1 << 0,
         // In testing mode we try to eliminate sources of randomness. Cache does not shrink and there are no read timeouts.
-        TestingMode = 1 << 1,
-        RegisterNotify = 1 << 2,
+        TestingMode = 1 << 0,
+        RegisterNotify = 1 << 1,
 #if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
-        SpeculativeRevalidation = 1 << 3,
+        SpeculativeRevalidation = 1 << 2,
 #endif
     };
     static RefPtr<Cache> open(NetworkProcess&, const String& cachePath, OptionSet<Option>);
@@ -169,7 +165,6 @@ private:
     std::unique_ptr<WebCore::LowPowerModeNotifier> m_lowPowerModeNotifier;
     std::unique_ptr<SpeculativeLoadManager> m_speculativeLoadManager;
 #endif
-    std::unique_ptr<Statistics> m_statistics;
 
     unsigned m_traverseCount { 0 };
 };
diff --git a/Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.cpp b/Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.cpp
deleted file mode 100644 (file)
index 61bef1e..0000000
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * Copyright (C) 2015 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#include "NetworkCacheStatistics.h"
-
-#include "Logging.h"
-#include "NetworkCache.h"
-#include "NetworkCacheFileSystem.h"
-#include "NetworkProcess.h"
-#include <WebCore/DiagnosticLoggingKeys.h>
-#include <WebCore/DiagnosticLoggingResultType.h>
-#include <WebCore/ResourceRequest.h>
-#include <WebCore/SQLiteDatabaseTracker.h>
-#include <WebCore/SQLiteStatement.h>
-#include <WebCore/SQLiteTransaction.h>
-#include <wtf/RunLoop.h>
-#include <wtf/Seconds.h>
-
-namespace WebKit {
-namespace NetworkCache {
-
-static const char* StatisticsDatabaseName = "WebKitCacheStatistics.db";
-static const Seconds mininumWriteInterval { 10_s };
-
-static bool executeSQLCommand(WebCore::SQLiteDatabase& database, const String& sql)
-{
-    ASSERT(!RunLoop::isMain());
-    ASSERT(WebCore::SQLiteDatabaseTracker::hasTransactionInProgress());
-    ASSERT(database.isOpen());
-
-    bool result = database.executeCommand(sql);
-    if (!result)
-        LOG_ERROR("Network cache statistics: failed to execute statement \"%s\" error \"%s\"", sql.utf8().data(), database.lastErrorMsg());
-
-    return result;
-}
-
-static bool executeSQLStatement(WebCore::SQLiteStatement& statement)
-{
-    ASSERT(!RunLoop::isMain());
-    ASSERT(WebCore::SQLiteDatabaseTracker::hasTransactionInProgress());
-    ASSERT(statement.database().isOpen());
-
-    if (statement.step() != SQLITE_DONE) {
-        LOG_ERROR("Network cache statistics: failed to execute statement \"%s\" error \"%s\"", statement.query().utf8().data(), statement.database().lastErrorMsg());
-        return false;
-    }
-
-    return true;
-}
-
-std::unique_ptr<Statistics> Statistics::open(Cache& cache, const String& cachePath)
-{
-    ASSERT(RunLoop::isMain());
-
-    String databasePath = FileSystem::pathByAppendingComponent(cachePath, StatisticsDatabaseName);
-    return std::make_unique<Statistics>(cache, databasePath);
-}
-
-Statistics::Statistics(Cache& cache, const String& databasePath)
-    : m_cache(cache)
-    , m_serialBackgroundIOQueue(WorkQueue::create("com.apple.WebKit.Cache.Statistics.Background", WorkQueue::Type::Serial, WorkQueue::QOS::Background))
-    , m_writeTimer(*this, &Statistics::writeTimerFired)
-{
-    initialize(databasePath);
-}
-
-void Statistics::initialize(const String& databasePath)
-{
-    ASSERT(RunLoop::isMain());
-
-    auto startTime = WallTime::now();
-
-    serialBackgroundIOQueue().dispatch([this, databasePath = databasePath.isolatedCopy(), networkCachePath = m_cache.recordsPath(), startTime] {
-        WebCore::SQLiteTransactionInProgressAutoCounter transactionCounter;
-
-        if (!FileSystem::makeAllDirectories(FileSystem::directoryName(databasePath)))
-            return;
-
-        LOG(NetworkCache, "(NetworkProcess) Opening network cache statistics database at %s...", databasePath.utf8().data());
-        m_database.open(databasePath);
-        m_database.disableThreadingChecks();
-        if (!m_database.isOpen()) {
-            LOG_ERROR("Network cache statistics: Failed to open / create the network cache statistics database");
-            return;
-        }
-
-        executeSQLCommand(m_database, "CREATE TABLE IF NOT EXISTS AlreadyRequested (hash TEXT PRIMARY KEY)"_s);
-        executeSQLCommand(m_database, "CREATE TABLE IF NOT EXISTS UncachedReason (hash TEXT PRIMARY KEY, reason INTEGER)"_s);
-
-        WebCore::SQLiteStatement statement(m_database, "SELECT count(*) FROM AlreadyRequested"_s);
-        if (statement.prepareAndStep() != SQLITE_ROW) {
-            LOG_ERROR("Network cache statistics: Failed to count the number of rows in AlreadyRequested table");
-            return;
-        }
-
-        m_approximateEntryCount = statement.getColumnInt(0);
-
-#if !LOG_DISABLED
-        auto elapsed = WallTime::now() - startTime;
-#else
-        UNUSED_PARAM(startTime);
-#endif
-        LOG(NetworkCache, "(NetworkProcess) Network cache statistics database load complete, entries=%lu time=%" PRIi64 "ms", static_cast<size_t>(m_approximateEntryCount), elapsed.millisecondsAs<int64_t>());
-
-        if (!m_approximateEntryCount) {
-            bootstrapFromNetworkCache(networkCachePath);
-#if !LOG_DISABLED
-            elapsed = WallTime::now() - startTime;
-#else
-            UNUSED_PARAM(startTime);
-#endif
-            LOG(NetworkCache, "(NetworkProcess) Network cache statistics database bootstrapping complete, entries=%lu time=%" PRIi64 "ms", static_cast<size_t>(m_approximateEntryCount), elapsed.millisecondsAs<int64_t>());
-        }
-    });
-}
-
-void Statistics::bootstrapFromNetworkCache(const String& networkCachePath)
-{
-    ASSERT(!RunLoop::isMain());
-
-    LOG(NetworkCache, "(NetworkProcess) Bootstrapping the network cache statistics database from the network cache...");
-
-    HashSet<String> hashes;
-    traverseRecordsFiles(networkCachePath, "Resource"_s, [&hashes](const String& fileName, const String& hashString, const String& type, bool isBodyBlob, const String& recordDirectoryPath) {
-        if (isBodyBlob)
-            return;
-
-        Key::HashType hash;
-        if (!Key::stringToHash(hashString, hash))
-            return;
-
-        hashes.add(hashString);
-    });
-
-    WebCore::SQLiteTransactionInProgressAutoCounter transactionCounter;
-    WebCore::SQLiteTransaction writeTransaction(m_database);
-    writeTransaction.begin();
-
-    addHashesToDatabase(hashes);
-
-    writeTransaction.commit();
-}
-
-void Statistics::shrinkIfNeeded()
-{
-    ASSERT(RunLoop::isMain());
-    const size_t maxEntries = 100000;
-
-    if (m_approximateEntryCount < maxEntries)
-        return;
-
-    LOG(NetworkCache, "(NetworkProcess) shrinking statistics cache m_approximateEntryCount=%lu, maxEntries=%lu", static_cast<size_t>(m_approximateEntryCount), maxEntries);
-
-    clear();
-
-    serialBackgroundIOQueue().dispatch([this, networkCachePath = m_cache.recordsPath()] {
-        bootstrapFromNetworkCache(networkCachePath);
-        LOG(NetworkCache, "(NetworkProcess) statistics cache shrink completed m_approximateEntryCount=%lu", static_cast<size_t>(m_approximateEntryCount));
-    });
-}
-
-void Statistics::recordRetrievalRequest(uint64_t webPageID)
-{
-    m_cache.networkProcess().logDiagnosticMessage(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::retrievalRequestKey(), WebCore::ShouldSample::Yes);
-}
-
-void Statistics::recordNotCachingResponse(const Key& key, StoreDecision storeDecision)
-{
-    ASSERT(storeDecision != StoreDecision::Yes);
-
-    m_storeDecisionsToAdd.set(key.hashAsString(), storeDecision);
-    if (!m_writeTimer.isActive())
-        m_writeTimer.startOneShot(mininumWriteInterval);
-}
-
-static String retrieveDecisionToDiagnosticKey(RetrieveDecision retrieveDecision)
-{
-    switch (retrieveDecision) {
-    case RetrieveDecision::NoDueToHTTPMethod:
-        return WebCore::DiagnosticLoggingKeys::unsupportedHTTPMethodKey();
-    case RetrieveDecision::NoDueToConditionalRequest:
-        return WebCore::DiagnosticLoggingKeys::isConditionalRequestKey();
-    case RetrieveDecision::NoDueToReloadIgnoringCache:
-        return WebCore::DiagnosticLoggingKeys::isReloadIgnoringCacheDataKey();
-    case RetrieveDecision::NoDueToStreamingMedia:
-        return WebCore::DiagnosticLoggingKeys::streamingMedia();
-    case RetrieveDecision::Yes:
-        ASSERT_NOT_REACHED();
-        break;
-    }
-    return emptyString();
-}
-
-void Statistics::recordNotUsingCacheForRequest(uint64_t webPageID, const Key& key, const WebCore::ResourceRequest& request, RetrieveDecision retrieveDecision)
-{
-    ASSERT(retrieveDecision != RetrieveDecision::Yes);
-
-    auto hash = key.hashAsString();
-    queryWasEverRequested(hash, NeedUncachedReason::No, [this, hash, requestURL = request.url(), webPageID, retrieveDecision](bool wasEverRequested, const Optional<StoreDecision>&) {
-        if (wasEverRequested) {
-            String diagnosticKey = retrieveDecisionToDiagnosticKey(retrieveDecision);
-            LOG(NetworkCache, "(NetworkProcess) webPageID %" PRIu64 ": %s was previously requested but we are not using the cache, reason: %s", webPageID, requestURL.string().ascii().data(), diagnosticKey.utf8().data());
-            m_cache.networkProcess().logDiagnosticMessage(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheUnusedReasonKey(), diagnosticKey, WebCore::ShouldSample::Yes);
-        } else {
-            m_cache.networkProcess().logDiagnosticMessage(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheUnusedReasonKey(), WebCore::DiagnosticLoggingKeys::neverSeenBeforeKey(), WebCore::ShouldSample::Yes);
-            markAsRequested(hash);
-        }
-    });
-}
-
-static String storeDecisionToDiagnosticKey(StoreDecision storeDecision)
-{
-    switch (storeDecision) {
-    case StoreDecision::NoDueToProtocol:
-        return WebCore::DiagnosticLoggingKeys::notHTTPFamilyKey();
-    case StoreDecision::NoDueToHTTPMethod:
-        return WebCore::DiagnosticLoggingKeys::unsupportedHTTPMethodKey();
-    case StoreDecision::NoDueToAttachmentResponse:
-        return WebCore::DiagnosticLoggingKeys::isAttachmentKey();
-    case StoreDecision::NoDueToNoStoreResponse:
-    case StoreDecision::NoDueToNoStoreRequest:
-        return WebCore::DiagnosticLoggingKeys::cacheControlNoStoreKey();
-    case StoreDecision::NoDueToHTTPStatusCode:
-        return WebCore::DiagnosticLoggingKeys::uncacheableStatusCodeKey();
-    case StoreDecision::NoDueToUnlikelyToReuse:
-        return WebCore::DiagnosticLoggingKeys::unlikelyToReuseKey();
-    case StoreDecision::NoDueToStreamingMedia:
-        return WebCore::DiagnosticLoggingKeys::streamingMedia();
-    case StoreDecision::Yes:
-        // It was stored but could not be retrieved so it must have been pruned from the cache.
-        return WebCore::DiagnosticLoggingKeys::noLongerInCacheKey();
-    }
-    return String();
-}
-
-void Statistics::recordRetrievalFailure(uint64_t webPageID, const Key& key, const WebCore::ResourceRequest& request)
-{
-    auto hash = key.hashAsString();
-    queryWasEverRequested(hash, NeedUncachedReason::Yes, [this, hash, requestURL = request.url(), webPageID](bool wasPreviouslyRequested, const Optional<StoreDecision>& storeDecision) {
-        if (wasPreviouslyRequested) {
-            String diagnosticKey = storeDecisionToDiagnosticKey(storeDecision.value());
-            LOG(NetworkCache, "(NetworkProcess) webPageID %" PRIu64 ": %s was previously request but is not in the cache, reason: %s", webPageID, requestURL.string().ascii().data(), diagnosticKey.utf8().data());
-            m_cache.networkProcess().logDiagnosticMessage(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheFailureReasonKey(), diagnosticKey, WebCore::ShouldSample::Yes);
-        } else {
-            m_cache.networkProcess().logDiagnosticMessage(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheFailureReasonKey(), WebCore::DiagnosticLoggingKeys::neverSeenBeforeKey(), WebCore::ShouldSample::Yes);
-            markAsRequested(hash);
-        }
-    });
-}
-
-static String cachedEntryReuseFailureToDiagnosticKey(UseDecision decision)
-{
-    switch (decision) {
-    case UseDecision::NoDueToVaryingHeaderMismatch:
-        return WebCore::DiagnosticLoggingKeys::varyingHeaderMismatchKey();
-    case UseDecision::NoDueToMissingValidatorFields:
-        return WebCore::DiagnosticLoggingKeys::missingValidatorFieldsKey();
-    case UseDecision::NoDueToDecodeFailure:
-    case UseDecision::NoDueToExpiredRedirect:
-    case UseDecision::Use:
-    case UseDecision::Validate:
-        ASSERT_NOT_REACHED();
-        break;
-    }
-    return emptyString();
-}
-
-void Statistics::recordRetrievedCachedEntry(uint64_t webPageID, const Key& key, const WebCore::ResourceRequest& request, UseDecision decision)
-{
-    URL requestURL = request.url();
-    if (decision == UseDecision::Use) {
-        LOG(NetworkCache, "(NetworkProcess) webPageID %" PRIu64 ": %s is in the cache and is used", webPageID, requestURL.string().ascii().data());
-        m_cache.networkProcess().logDiagnosticMessageWithResult(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::retrievalKey(), WebCore::DiagnosticLoggingResultPass, WebCore::ShouldSample::Yes);
-        return;
-    }
-
-    if (decision == UseDecision::Validate) {
-        LOG(NetworkCache, "(NetworkProcess) webPageID %" PRIu64 ": %s is in the cache but needs revalidation", webPageID, requestURL.string().ascii().data());
-        m_cache.networkProcess().logDiagnosticMessage(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::needsRevalidationKey(), WebCore::ShouldSample::Yes);
-        return;
-    }
-
-    String diagnosticKey = cachedEntryReuseFailureToDiagnosticKey(decision);
-    LOG(NetworkCache, "(NetworkProcess) webPageID %" PRIu64 ": %s is in the cache but wasn't used, reason: %s", webPageID, requestURL.string().ascii().data(), diagnosticKey.utf8().data());
-    m_cache.networkProcess().logDiagnosticMessage(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheReuseFailureKey(), diagnosticKey, WebCore::ShouldSample::Yes);
-}
-
-void Statistics::recordRevalidationSuccess(uint64_t webPageID, const Key& key, const WebCore::ResourceRequest& request)
-{
-    URL requestURL = request.url();
-    LOG(NetworkCache, "(NetworkProcess) webPageID %" PRIu64 ": %s was successfully revalidated", webPageID, requestURL.string().ascii().data());
-
-    m_cache.networkProcess().logDiagnosticMessageWithResult(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::revalidatingKey(), WebCore::DiagnosticLoggingResultPass, WebCore::ShouldSample::Yes);
-}
-
-void Statistics::markAsRequested(const String& hash)
-{
-    ASSERT(RunLoop::isMain());
-
-    m_hashesToAdd.add(hash);
-    if (!m_writeTimer.isActive())
-        m_writeTimer.startOneShot(mininumWriteInterval);
-}
-
-void Statistics::writeTimerFired()
-{
-    ASSERT(RunLoop::isMain());
-
-    serialBackgroundIOQueue().dispatch([this, hashesToAdd = WTFMove(m_hashesToAdd), storeDecisionsToAdd = WTFMove(m_storeDecisionsToAdd)] {
-        if (!m_database.isOpen())
-            return;
-
-        WebCore::SQLiteTransactionInProgressAutoCounter transactionCounter;
-        WebCore::SQLiteTransaction writeTransaction(m_database);
-        writeTransaction.begin();
-
-        addHashesToDatabase(hashesToAdd);
-        addStoreDecisionsToDatabase(storeDecisionsToAdd);
-
-        writeTransaction.commit();
-    });
-
-    shrinkIfNeeded();
-}
-
-void Statistics::queryWasEverRequested(const String& hash, NeedUncachedReason needUncachedReason, RequestedCompletionHandler&& completionHandler)
-{
-    ASSERT(RunLoop::isMain());
-
-    // Query pending writes first.
-    bool wasAlreadyRequested = m_hashesToAdd.contains(hash);
-    if (wasAlreadyRequested && needUncachedReason == NeedUncachedReason::No) {
-        completionHandler(true, WTF::nullopt);
-        return;
-    }
-    if (needUncachedReason == NeedUncachedReason::Yes && m_storeDecisionsToAdd.contains(hash)) {
-        completionHandler(true, m_storeDecisionsToAdd.get(hash));
-        return;
-    }
-
-    // Query the database.
-    auto everRequestedQuery = std::make_unique<EverRequestedQuery>(EverRequestedQuery { hash, needUncachedReason == NeedUncachedReason::Yes, WTFMove(completionHandler) });
-    auto& query = *everRequestedQuery;
-    m_activeQueries.add(WTFMove(everRequestedQuery));
-    serialBackgroundIOQueue().dispatch([this, wasAlreadyRequested, &query] () mutable {
-        WebCore::SQLiteTransactionInProgressAutoCounter transactionCounter;
-        Optional<StoreDecision> storeDecision;
-        if (m_database.isOpen()) {
-            if (!wasAlreadyRequested) {
-                WebCore::SQLiteStatement statement(m_database, "SELECT hash FROM AlreadyRequested WHERE hash=?"_s);
-                if (statement.prepare() == SQLITE_OK) {
-                    statement.bindText(1, query.hash);
-                    wasAlreadyRequested = (statement.step() == SQLITE_ROW);
-                }
-            }
-            if (wasAlreadyRequested && query.needUncachedReason) {
-                WebCore::SQLiteStatement statement(m_database, "SELECT reason FROM UncachedReason WHERE hash=?"_s);
-                storeDecision = StoreDecision::Yes;
-                if (statement.prepare() == SQLITE_OK) {
-                    statement.bindText(1, query.hash);
-                    if (statement.step() == SQLITE_ROW)
-                        storeDecision = static_cast<StoreDecision>(statement.getColumnInt(0));
-                }
-            }
-        }
-        RunLoop::main().dispatch([this, &query, wasAlreadyRequested, storeDecision] {
-            query.completionHandler(wasAlreadyRequested, storeDecision);
-            m_activeQueries.remove(&query);
-        });
-    });
-}
-
-void Statistics::clear()
-{
-    ASSERT(RunLoop::isMain());
-
-    serialBackgroundIOQueue().dispatch([this] {
-        if (m_database.isOpen()) {
-            WebCore::SQLiteTransactionInProgressAutoCounter transactionCounter;
-            WebCore::SQLiteTransaction deleteTransaction(m_database);
-            deleteTransaction.begin();
-            executeSQLCommand(m_database, "DELETE FROM AlreadyRequested"_s);
-            executeSQLCommand(m_database, "DELETE FROM UncachedReason"_s);
-            deleteTransaction.commit();
-            m_approximateEntryCount = 0;
-        }
-    });
-}
-
-void Statistics::addHashesToDatabase(const HashSet<String>& hashes)
-{
-    ASSERT(!RunLoop::isMain());
-    ASSERT(WebCore::SQLiteDatabaseTracker::hasTransactionInProgress());
-    ASSERT(m_database.isOpen());
-
-    WebCore::SQLiteStatement statement(m_database, "INSERT OR IGNORE INTO AlreadyRequested (hash) VALUES (?)"_s);
-    if (statement.prepare() != SQLITE_OK)
-        return;
-
-    for (auto& hash : hashes) {
-        statement.bindText(1, hash);
-        if (executeSQLStatement(statement))
-            ++m_approximateEntryCount;
-        statement.reset();
-    }
-}
-
-void Statistics::addStoreDecisionsToDatabase(const HashMap<String, NetworkCache::StoreDecision>& storeDecisions)
-{
-    ASSERT(!RunLoop::isMain());
-    ASSERT(WebCore::SQLiteDatabaseTracker::hasTransactionInProgress());
-    ASSERT(m_database.isOpen());
-
-    WebCore::SQLiteStatement statement(m_database, "INSERT OR REPLACE INTO UncachedReason (hash, reason) VALUES (?, ?)"_s);
-    if (statement.prepare() != SQLITE_OK)
-        return;
-
-    for (auto& pair : storeDecisions) {
-        statement.bindText(1, pair.key);
-        statement.bindInt(2, static_cast<int>(pair.value));
-        executeSQLStatement(statement);
-        statement.reset();
-    }
-}
-
-}
-}
diff --git a/Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.h b/Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.h
deleted file mode 100644 (file)
index c52028f..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2015 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef NetworkCacheStatistics_h
-#define NetworkCacheStatistics_h
-
-#include "NetworkCache.h"
-#include "NetworkCacheKey.h"
-#include <WebCore/SQLiteDatabase.h>
-#include <WebCore/Timer.h>
-#include <wtf/WorkQueue.h>
-
-namespace WebCore {
-class ResourceRequest;
-}
-
-namespace WebKit {
-namespace NetworkCache {
-
-class Statistics {
-public:
-    static std::unique_ptr<Statistics> open(Cache&, const String& cachePath);
-    explicit Statistics(Cache&, const String& databasePath);
-
-    void clear();
-
-    void recordRetrievalRequest(uint64_t webPageID);
-    void recordNotCachingResponse(const Key&, StoreDecision);
-    void recordNotUsingCacheForRequest(uint64_t webPageID, const Key&, const WebCore::ResourceRequest&, RetrieveDecision);
-    void recordRetrievalFailure(uint64_t webPageID, const Key&, const WebCore::ResourceRequest&);
-    void recordRetrievedCachedEntry(uint64_t webPageID, const Key&, const WebCore::ResourceRequest&, UseDecision);
-    void recordRevalidationSuccess(uint64_t webPageID, const Key&, const WebCore::ResourceRequest&);
-
-private:
-    WorkQueue& serialBackgroundIOQueue() { return m_serialBackgroundIOQueue.get(); }
-
-    void initialize(const String& databasePath);
-    void bootstrapFromNetworkCache(const String& networkCachePath);
-    void shrinkIfNeeded();
-
-    void addHashesToDatabase(const HashSet<String>& hashes);
-    void addStoreDecisionsToDatabase(const HashMap<String, NetworkCache::StoreDecision>&);
-    void writeTimerFired();
-
-    typedef Function<void (bool wasEverRequested, const Optional<StoreDecision>&)> RequestedCompletionHandler;
-    enum class NeedUncachedReason { No, Yes };
-    void queryWasEverRequested(const String&, NeedUncachedReason, RequestedCompletionHandler&&);
-    void markAsRequested(const String& hash);
-
-    struct EverRequestedQuery {
-        String hash;
-        bool needUncachedReason;
-        RequestedCompletionHandler completionHandler;
-    };
-
-    Cache& m_cache;
-
-    std::atomic<size_t> m_approximateEntryCount { 0 };
-
-    mutable Ref<WorkQueue> m_serialBackgroundIOQueue;
-    mutable HashSet<std::unique_ptr<const EverRequestedQuery>> m_activeQueries;
-    WebCore::SQLiteDatabase m_database;
-    HashSet<String> m_hashesToAdd;
-    HashMap<String, NetworkCache::StoreDecision> m_storeDecisionsToAdd;
-    WebCore::Timer m_writeTimer;
-};
-
-}
-}
-
-#endif // NetworkCacheStatistics_h
index 8f4d61c..138cbb0 100644 (file)
@@ -176,7 +176,8 @@ RefPtr<Storage> Storage::open(const String& cachePath, Mode mode)
     return adoptRef(new Storage(cachePath, mode, *salt));
 }
 
-void traverseRecordsFiles(const String& recordsPath, const String& expectedType, const RecordFileTraverseFunction& function)
+using RecordFileTraverseFunction = Function<void (const String& fileName, const String& hashString, const String& type, bool isBlob, const String& recordDirectoryPath)>;
+static void traverseRecordsFiles(const String& recordsPath, const String& expectedType, const RecordFileTraverseFunction& function)
 {
     traverseDirectory(recordsPath, [&](const String& partitionName, DirectoryEntryType entryType) {
         if (entryType != DirectoryEntryType::Directory)
index c354581..6eb3357 100644 (file)
@@ -209,9 +209,5 @@ private:
     Seconds m_initialWriteDelay { 1_s };
 };
 
-// FIXME: Remove, used by NetworkCacheStatistics only.
-using RecordFileTraverseFunction = Function<void (const String& fileName, const String& hashString, const String& type, bool isBlob, const String& recordDirectoryPath)>;
-void traverseRecordsFiles(const String& recordsPath, const String& type, const RecordFileTraverseFunction&);
-
 }
 }
index c306cce..70b39c9 100644 (file)
@@ -112,8 +112,6 @@ void NetworkProcess::platformInitializeNetworkProcessCocoa(const NetworkProcessC
 
     SandboxExtension::consumePermanently(parameters.diskCacheDirectoryExtensionHandle);
     OptionSet<NetworkCache::Cache::Option> cacheOptions { NetworkCache::Cache::Option::RegisterNotify };
-    if (parameters.shouldEnableNetworkCacheEfficacyLogging)
-        cacheOptions.add(NetworkCache::Cache::Option::EfficacyLogging);
     if (parameters.shouldUseTestingNetworkSession)
         cacheOptions.add(NetworkCache::Cache::Option::TestingMode);
 #if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
index ebabfb0..3cab506 100644 (file)
@@ -112,8 +112,6 @@ void NetworkProcess::platformInitializeNetworkProcess(const NetworkProcessCreati
     SoupNetworkSession::clearOldSoupCache(FileSystem::directoryName(m_diskCacheDirectory));
 
     OptionSet<NetworkCache::Cache::Option> cacheOptions { NetworkCache::Cache::Option::RegisterNotify };
-    if (parameters.shouldEnableNetworkCacheEfficacyLogging)
-        cacheOptions.add(NetworkCache::Cache::Option::EfficacyLogging);
 #if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
     if (parameters.shouldEnableNetworkCacheSpeculativeRevalidation)
         cacheOptions.add(NetworkCache::Cache::Option::SpeculativeRevalidation);
index dde112b..8527cfb 100644 (file)
@@ -78,7 +78,6 @@ NetworkProcess/cache/NetworkCacheFileSystem.cpp
 NetworkProcess/cache/NetworkCacheKey.cpp
 NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp
 NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp
-NetworkProcess/cache/NetworkCacheStatistics.cpp
 NetworkProcess/cache/NetworkCacheStorage.cpp
 NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp
 
index 3f8b459..954983f 100644 (file)
@@ -78,8 +78,6 @@ NSString *WebKitJSCFTLJITEnabledDefaultsKey = @"WebKitJSCFTLJITEnabledDefaultsKe
 static NSString *WebKitApplicationDidChangeAccessibilityEnhancedUserInterfaceNotification = @"NSApplicationDidChangeAccessibilityEnhancedUserInterfaceNotification";
 #endif
 
-static NSString * const WebKitNetworkCacheEfficacyLoggingEnabledDefaultsKey = @"WebKitNetworkCacheEfficacyLoggingEnabled";
-
 static NSString * const WebKitSuppressMemoryPressureHandlerDefaultsKey = @"WebKitSuppressMemoryPressureHandler";
 
 #if ENABLE(RESOURCE_LOAD_STATISTICS) && !RELEASE_LOG_DISABLED
@@ -106,8 +104,6 @@ static void registerUserDefaultsIfNeeded()
     [registrationDictionary setObject:@YES forKey:WebKitJSCJITEnabledDefaultsKey];
     [registrationDictionary setObject:@YES forKey:WebKitJSCFTLJITEnabledDefaultsKey];
 
-    [registrationDictionary setObject:@NO forKey:WebKitNetworkCacheEfficacyLoggingEnabledDefaultsKey];
-
     [[NSUserDefaults standardUserDefaults] registerDefaults:registrationDictionary];
 }
 
@@ -290,8 +286,6 @@ void WebProcessPool::platformInitializeNetworkProcess(NetworkProcessCreationPara
 
     parameters.networkATSContext = adoptCF(_CFNetworkCopyATSContext());
 
-    parameters.shouldEnableNetworkCacheEfficacyLogging = [defaults boolForKey:WebKitNetworkCacheEfficacyLoggingEnabledDefaultsKey];
-
 #if PLATFORM(IOS_FAMILY)
     parameters.ctDataConnectionServiceType = m_configuration->ctDataConnectionServiceType();
 #endif
index b442f67..ee42491 100644 (file)
@@ -44,7 +44,6 @@ void WebProcessPool::platformInitializeNetworkProcess(NetworkProcessCreationPara
     parameters.cookieAcceptPolicy = m_initialHTTPCookieAcceptPolicy;
     parameters.ignoreTLSErrors = m_ignoreTLSErrors;
     parameters.languages = userPreferredLanguages();
-    parameters.shouldEnableNetworkCacheEfficacyLogging = false;
     parameters.proxySettings = m_networkProxySettings;
 }
 
index 89c1076..d48a4da 100644 (file)
                832AE2521BE2E8CD00FAAE10 /* NetworkCacheSpeculativeLoadManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 832AE2501BE2E8CD00FAAE10 /* NetworkCacheSpeculativeLoadManager.h */; };
                832ED18C1E2FE157006BA64A /* PerActivityStateCPUUsageSampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 832ED18A1E2FE13B006BA64A /* PerActivityStateCPUUsageSampler.h */; };
                834B250F1A831A8D00CFB150 /* NetworkCacheFileSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 834B250E1A831A8D00CFB150 /* NetworkCacheFileSystem.h */; };
-               834B25121A842C8700CFB150 /* NetworkCacheStatistics.h in Headers */ = {isa = PBXBuildFile; fileRef = 834B25101A842C8700CFB150 /* NetworkCacheStatistics.h */; };
                836034A01ACB34D600626549 /* WebSQLiteDatabaseTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8360349E1ACB34D600626549 /* WebSQLiteDatabaseTracker.h */; };
                8372DB251A674C8F00C697C5 /* WKPageDiagnosticLoggingClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 8372DB241A674C8F00C697C5 /* WKPageDiagnosticLoggingClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
                8372DB291A67562800C697C5 /* WebPageDiagnosticLoggingClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 8372DB271A67562800C697C5 /* WebPageDiagnosticLoggingClient.h */; };
                83397C6622124BD100B62388 /* WebProcessCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebProcessCache.cpp; sourceTree = "<group>"; };
                83397C6722124BD100B62388 /* WebProcessCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessCache.h; sourceTree = "<group>"; };
                834B250E1A831A8D00CFB150 /* NetworkCacheFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCacheFileSystem.h; sourceTree = "<group>"; };
-               834B25101A842C8700CFB150 /* NetworkCacheStatistics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCacheStatistics.h; sourceTree = "<group>"; };
                8360349D1ACB34D600626549 /* WebSQLiteDatabaseTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSQLiteDatabaseTracker.cpp; sourceTree = "<group>"; };
                8360349E1ACB34D600626549 /* WebSQLiteDatabaseTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSQLiteDatabaseTracker.h; sourceTree = "<group>"; };
                8372DB241A674C8F00C697C5 /* WKPageDiagnosticLoggingClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPageDiagnosticLoggingClient.h; sourceTree = "<group>"; };
                839A2F301E2067390039057E /* HighPerformanceGraphicsUsageSampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HighPerformanceGraphicsUsageSampler.h; sourceTree = "<group>"; };
                83A0ED321F747CC6003299EB /* PreconnectTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreconnectTask.h; sourceTree = "<group>"; };
                83A0ED331F747CC7003299EB /* PreconnectTask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PreconnectTask.cpp; sourceTree = "<group>"; };
-               83BDCCB81AC5FDB6003F6441 /* NetworkCacheStatistics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkCacheStatistics.cpp; sourceTree = "<group>"; };
                83D454D61BE9D3C4006C93BD /* NetworkLoadClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkLoadClient.h; sourceTree = "<group>"; };
                83EE57591DB7D60600C74C50 /* WebValidationMessageClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebValidationMessageClient.cpp; sourceTree = "<group>"; };
                83EE575A1DB7D60600C74C50 /* WebValidationMessageClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebValidationMessageClient.h; sourceTree = "<group>"; };
                                831EEBBB1BD85C4300BB64C3 /* NetworkCacheSpeculativeLoad.h */,
                                832AE2511BE2E8CD00FAAE10 /* NetworkCacheSpeculativeLoadManager.cpp */,
                                832AE2501BE2E8CD00FAAE10 /* NetworkCacheSpeculativeLoadManager.h */,
-                               83BDCCB81AC5FDB6003F6441 /* NetworkCacheStatistics.cpp */,
-                               834B25101A842C8700CFB150 /* NetworkCacheStatistics.h */,
                                E4436EC31A0CFDB200EAD204 /* NetworkCacheStorage.cpp */,
                                E4436EC21A0CFDB200EAD204 /* NetworkCacheStorage.h */,
                                8310428A1BD6B66F00A715E4 /* NetworkCacheSubresourcesEntry.cpp */,
                                E4436ECE1A0D040B00EAD204 /* NetworkCacheKey.h in Headers */,
                                831EEBBD1BD85C4300BB64C3 /* NetworkCacheSpeculativeLoad.h in Headers */,
                                832AE2521BE2E8CD00FAAE10 /* NetworkCacheSpeculativeLoadManager.h in Headers */,
-                               834B25121A842C8700CFB150 /* NetworkCacheStatistics.h in Headers */,
                                E4436ECF1A0D040B00EAD204 /* NetworkCacheStorage.h in Headers */,
                                8310428B1BD6B66F00A715E4 /* NetworkCacheSubresourcesEntry.h in Headers */,
                                513A164D1630A9BF005D7D22 /* NetworkConnectionToWebProcess.h in Headers */,