Bug 1662011 - Remove hash stats code from the cache, r=valentin,necko-reviewers

Differential Revision: https://phabricator.services.mozilla.com/D88739
This commit is contained in:
Michal Novotny 2020-08-31 06:53:06 +00:00
Родитель 313ddf80c5
Коммит fe4555c51f
6 изменённых файлов: 0 добавлений и 115 удалений

Просмотреть файл

@ -3274,11 +3274,6 @@ void CacheIndex::ChangeState(EState aNewState) {
return;
}
if ((mState == READING || mState == BUILDING || mState == UPDATING) &&
aNewState == READY) {
ReportHashStats();
}
// Try to evict entries over limit everytime we're leaving state READING,
// BUILDING or UPDATING, but not during shutdown or when removing all
// entries.
@ -3807,73 +3802,6 @@ size_t CacheIndex::SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) {
return mallocSizeOf(gInstance) + SizeOfExcludingThis(mallocSizeOf);
}
namespace {
class HashComparator {
public:
bool Equals(CacheIndexRecord* a, CacheIndexRecord* b) const {
return memcmp(&a->mHash, &b->mHash, sizeof(SHA1Sum::Hash)) == 0;
}
bool LessThan(CacheIndexRecord* a, CacheIndexRecord* b) const {
return memcmp(&a->mHash, &b->mHash, sizeof(SHA1Sum::Hash)) < 0;
}
};
void ReportHashSizeMatch(const SHA1Sum::Hash* aHash1,
const SHA1Sum::Hash* aHash2) {
const uint32_t* h1 = reinterpret_cast<const uint32_t*>(aHash1);
const uint32_t* h2 = reinterpret_cast<const uint32_t*>(aHash2);
for (uint32_t i = 0; i < 5; ++i) {
if (h1[i] != h2[i]) {
uint32_t bitsDiff = h1[i] ^ h2[i];
bitsDiff = NetworkEndian::readUint32(&bitsDiff);
// count leading zeros in bitsDiff
static const uint8_t debruijn32[32] = {
0, 31, 9, 30, 3, 8, 13, 29, 2, 5, 7, 21, 12, 24, 28, 19,
1, 10, 4, 14, 6, 22, 25, 20, 11, 15, 23, 26, 16, 27, 17, 18};
bitsDiff |= bitsDiff >> 1;
bitsDiff |= bitsDiff >> 2;
bitsDiff |= bitsDiff >> 4;
bitsDiff |= bitsDiff >> 8;
bitsDiff |= bitsDiff >> 16;
bitsDiff++;
uint8_t hashSizeMatch =
debruijn32[bitsDiff * 0x076be629 >> 27] + (i << 5);
Telemetry::Accumulate(Telemetry::NETWORK_CACHE_HASH_STATS, hashSizeMatch);
return;
}
}
MOZ_ASSERT(false, "Found a collision in the index!");
}
} // namespace
void CacheIndex::ReportHashStats() {
// We're gathering the hash stats only once, exclude too small caches.
if (CacheObserver::HashStatsReported() || mFrecencyArray.Length() < 15000) {
return;
}
nsTArray<CacheIndexRecord*> records;
for (auto iter = mFrecencyArray.Iter(); !iter.Done(); iter.Next()) {
records.AppendElement(iter.Get());
}
records.Sort(HashComparator());
for (uint32_t i = 1; i < records.Length(); i++) {
ReportHashSizeMatch(&records[i - 1]->mHash, &records[i]->mHash);
}
CacheObserver::SetHashStatsReported();
}
// static
void CacheIndex::UpdateTotalBytesWritten(uint32_t aBytesWritten) {
StaticMutexAutoLock lock(sLock);

Просмотреть файл

@ -1040,8 +1040,6 @@ class CacheIndex final : public CacheFileIOListener, public nsIRunnable {
// Memory reporting (private part)
size_t SizeOfExcludingThisInternal(mozilla::MallocSizeOf mallocSizeOf) const;
void ReportHashStats();
// Reports telemetry about cache, i.e. size, entry count and content type
// stats.
void DoTelemetryReport();

Просмотреть файл

@ -38,9 +38,6 @@ Atomic<uint32_t, Relaxed> CacheObserver::sSmartDiskCacheCapacity(1024 * 1024);
static bool kDefaultCacheFSReported = false;
bool CacheObserver::sCacheFSReported = kDefaultCacheFSReported;
static bool kDefaultHashStatsReported = false;
bool CacheObserver::sHashStatsReported = kDefaultHashStatsReported;
Atomic<PRIntervalTime> CacheObserver::sShutdownDemandedTime(
PR_INTERVAL_NO_TIMEOUT);
@ -163,29 +160,6 @@ void CacheObserver::StoreCacheFSReported() {
sCacheFSReported);
}
// static
void CacheObserver::SetHashStatsReported() {
sHashStatsReported = true;
if (!sSelf) {
return;
}
if (NS_IsMainThread()) {
sSelf->StoreHashStatsReported();
} else {
nsCOMPtr<nsIRunnable> event =
NewRunnableMethod("net::CacheObserver::StoreHashStatsReported",
sSelf.get(), &CacheObserver::StoreHashStatsReported);
NS_DispatchToMainThread(event);
}
}
void CacheObserver::StoreHashStatsReported() {
mozilla::Preferences::SetInt("browser.cache.disk.hashstats_reported",
sHashStatsReported);
}
// static
void CacheObserver::ParentDirOverride(nsIFile** aDir) {
if (NS_WARN_IF(!aDir)) return;

Просмотреть файл

@ -77,8 +77,6 @@ class CacheObserver : public nsIObserver, public nsSupportsWeakReference {
}
static bool CacheFSReported() { return sCacheFSReported; }
static void SetCacheFSReported();
static bool HashStatsReported() { return sHashStatsReported; }
static void SetHashStatsReported();
static void ParentDirOverride(nsIFile** aDir);
static bool EntryIsTooBig(int64_t aSize, bool aUsingDisk);
@ -96,14 +94,12 @@ class CacheObserver : public nsIObserver, public nsSupportsWeakReference {
static StaticRefPtr<CacheObserver> sSelf;
void StoreCacheFSReported();
void StoreHashStatsReported();
void AttachToPreferences();
static int32_t sAutoMemoryCacheCapacity;
static Atomic<uint32_t, Relaxed> sSmartDiskCacheCapacity;
static float sHalfLifeHours;
static bool sCacheFSReported;
static bool sHashStatsReported;
static Atomic<PRIntervalTime> sShutdownDemandedTime;
// Non static properties, accessible via sSelf

Просмотреть файл

@ -11338,14 +11338,6 @@
"n_buckets": 66,
"description": "Size of the metadata in bytes parsed from the disk."
},
"NETWORK_CACHE_HASH_STATS": {
"record_in_processes": ["main", "content"],
"products": ["firefox", "fennec"],
"expires_in_version": "46",
"kind": "enumerated",
"n_values": 160,
"description": "The longest hash match between a newly added entry and all the existing entries."
},
"NETWORK_CACHE_SIZE" : {
"record_in_processes": ["main"],
"products": ["firefox", "fennec"],

Просмотреть файл

@ -222,7 +222,6 @@
"MOZ_SQLITE_WEBAPPS_WRITE_MAIN_THREAD_MS",
"MOZ_SQLITE_WEBAPPS_WRITE_MS",
"NETWORK_CACHE_FS_TYPE",
"NETWORK_CACHE_HASH_STATS",
"NETWORK_CACHE_HIT_MISS_STAT_PER_CACHE_SIZE",
"NETWORK_CACHE_HIT_RATE_PER_CACHE_SIZE",
"NETWORK_CACHE_METADATA_FIRST_READ_TIME_MS",
@ -689,7 +688,6 @@
"MOZ_STORAGE_ASYNC_REQUESTS_MS",
"MOZ_STORAGE_ASYNC_REQUESTS_SUCCESS",
"NETWORK_CACHE_FS_TYPE",
"NETWORK_CACHE_HASH_STATS",
"NETWORK_CACHE_HIT_MISS_STAT_PER_CACHE_SIZE",
"NETWORK_CACHE_HIT_RATE_PER_CACHE_SIZE",
"NETWORK_CACHE_METADATA_FIRST_READ_TIME_MS",
@ -1048,7 +1046,6 @@
"DEVTOOLS_HEAP_SNAPSHOT_NODE_COUNT",
"DEVTOOLS_HEAP_SNAPSHOT_EDGE_COUNT",
"NETWORK_CACHE_HIT_RATE_PER_CACHE_SIZE",
"NETWORK_CACHE_HASH_STATS",
"SSL_CIPHER_SUITE_FULL",
"SSL_CIPHER_SUITE_RESUMED",
"SSL_HANDSHAKE_RESULT",