Diff
Modified: trunk/Source/WebKit/ChangeLog (243142 => 243143)
--- trunk/Source/WebKit/ChangeLog 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/ChangeLog 2019-03-19 17:05:55 UTC (rev 243143)
@@ -1,5 +1,43 @@
2019-03-19 Chris Dumez <[email protected]>
+ 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 <[email protected]>
+
Spew: Unhandled web process message 'VisitedLinkTableController:VisitedLinkStateChanged'
https://bugs.webkit.org/show_bug.cgi?id=194787
<rdar://problem/48175520>
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp (243142 => 243143)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp 2019-03-19 17:05:55 UTC (rev 243143)
@@ -45,7 +45,6 @@
encoder << canHandleHTTPSServerTrustEvaluation;
encoder << diskCacheDirectory;
encoder << diskCacheDirectoryExtensionHandle;
- encoder << shouldEnableNetworkCacheEfficacyLogging;
#if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
encoder << shouldEnableNetworkCacheSpeculativeRevalidation;
#endif
@@ -113,8 +112,6 @@
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;
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h (243142 => 243143)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h 2019-03-19 17:05:55 UTC (rev 243143)
@@ -56,7 +56,6 @@
String diskCacheDirectory;
SandboxExtension::Handle diskCacheDirectoryExtensionHandle;
- bool shouldEnableNetworkCacheEfficacyLogging { false };
#if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
bool shouldEnableNetworkCacheSpeculativeRevalidation { false };
#endif
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.cpp (243142 => 243143)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.cpp 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.cpp 2019-03-19 17:05:55 UTC (rev 243143)
@@ -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 @@
}
#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 @@
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 @@
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 @@
}
#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 @@
#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 @@
remove(key);
}
- if (m_statistics)
- m_statistics->recordNotCachingResponse(key, storeDecision);
-
return nullptr;
}
@@ -422,10 +404,6 @@
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 @@
m_storage->store(updateRecord, { });
- if (m_statistics)
- m_statistics->recordRevalidationSuccess(frameID.first, existingEntry.key(), originalRequest);
-
return updateEntry;
}
@@ -583,9 +558,6 @@
{
LOG(NetworkCache, "(NetworkProcess) clearing cache");
- if (m_statistics)
- m_statistics->clear();
-
String anyType;
m_storage->clear(anyType, modifiedSince, WTFMove(completionHandler));
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.h (243142 => 243143)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.h 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.h 2019-03-19 17:05:55 UTC (rev 243143)
@@ -48,7 +48,6 @@
class Cache;
class SpeculativeLoadManager;
-class Statistics;
struct MappedBody {
#if ENABLE(SHAREABLE_RESOURCE)
@@ -65,12 +64,10 @@
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 @@
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 @@
std::unique_ptr<WebCore::LowPowerModeNotifier> m_lowPowerModeNotifier;
std::unique_ptr<SpeculativeLoadManager> m_speculativeLoadManager;
#endif
- std::unique_ptr<Statistics> m_statistics;
unsigned m_traverseCount { 0 };
};
Deleted: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.cpp (243142 => 243143)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.cpp 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.cpp 2019-03-19 17:05:55 UTC (rev 243143)
@@ -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();
- }
-}
-
-}
-}
Deleted: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.h (243142 => 243143)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.h 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStatistics.h 2019-03-19 17:05:55 UTC (rev 243143)
@@ -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
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.cpp (243142 => 243143)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.cpp 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.cpp 2019-03-19 17:05:55 UTC (rev 243143)
@@ -176,7 +176,8 @@
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)
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h (243142 => 243143)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h 2019-03-19 17:05:55 UTC (rev 243143)
@@ -209,9 +209,5 @@
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&);
-
}
}
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (243142 => 243143)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2019-03-19 17:05:55 UTC (rev 243143)
@@ -112,8 +112,6 @@
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)
Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp (243142 => 243143)
--- trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp 2019-03-19 17:05:55 UTC (rev 243143)
@@ -112,8 +112,6 @@
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);
Modified: trunk/Source/WebKit/Sources.txt (243142 => 243143)
--- trunk/Source/WebKit/Sources.txt 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/Sources.txt 2019-03-19 17:05:55 UTC (rev 243143)
@@ -78,7 +78,6 @@
NetworkProcess/cache/NetworkCacheKey.cpp
NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp
NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp
-NetworkProcess/cache/NetworkCacheStatistics.cpp
NetworkProcess/cache/NetworkCacheStorage.cpp
NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (243142 => 243143)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm 2019-03-19 17:05:55 UTC (rev 243143)
@@ -78,8 +78,6 @@
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 @@
[registrationDictionary setObject:@YES forKey:WebKitJSCJITEnabledDefaultsKey];
[registrationDictionary setObject:@YES forKey:WebKitJSCFTLJITEnabledDefaultsKey];
- [registrationDictionary setObject:@NO forKey:WebKitNetworkCacheEfficacyLoggingEnabledDefaultsKey];
-
[[NSUserDefaults standardUserDefaults] registerDefaults:registrationDictionary];
}
@@ -290,8 +286,6 @@
parameters.networkATSContext = adoptCF(_CFNetworkCopyATSContext());
- parameters.shouldEnableNetworkCacheEfficacyLogging = [defaults boolForKey:WebKitNetworkCacheEfficacyLoggingEnabledDefaultsKey];
-
#if PLATFORM(IOS_FAMILY)
parameters.ctDataConnectionServiceType = m_configuration->ctDataConnectionServiceType();
#endif
Modified: trunk/Source/WebKit/UIProcess/soup/WebProcessPoolSoup.cpp (243142 => 243143)
--- trunk/Source/WebKit/UIProcess/soup/WebProcessPoolSoup.cpp 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/UIProcess/soup/WebProcessPoolSoup.cpp 2019-03-19 17:05:55 UTC (rev 243143)
@@ -44,7 +44,6 @@
parameters.cookieAcceptPolicy = m_initialHTTPCookieAcceptPolicy;
parameters.ignoreTLSErrors = m_ignoreTLSErrors;
parameters.languages = userPreferredLanguages();
- parameters.shouldEnableNetworkCacheEfficacyLogging = false;
parameters.proxySettings = m_networkProxySettings;
}
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (243142 => 243143)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2019-03-19 16:48:40 UTC (rev 243142)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2019-03-19 17:05:55 UTC (rev 243143)
@@ -1204,7 +1204,6 @@
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 */; };
@@ -3723,7 +3722,6 @@
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>"; };
@@ -3741,7 +3739,6 @@
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>"; };
@@ -8875,8 +8872,6 @@
831EEBBB1BD85C4300BB64C3 /* NetworkCacheSpeculativeLoad.h */,
832AE2511BE2E8CD00FAAE10 /* NetworkCacheSpeculativeLoadManager.cpp */,
832AE2501BE2E8CD00FAAE10 /* NetworkCacheSpeculativeLoadManager.h */,
- 83BDCCB81AC5FDB6003F6441 /* NetworkCacheStatistics.cpp */,
- 834B25101A842C8700CFB150 /* NetworkCacheStatistics.h */,
E4436EC31A0CFDB200EAD204 /* NetworkCacheStorage.cpp */,
E4436EC21A0CFDB200EAD204 /* NetworkCacheStorage.h */,
8310428A1BD6B66F00A715E4 /* NetworkCacheSubresourcesEntry.cpp */,
@@ -9257,7 +9252,6 @@
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 */,