Blame netwerk/cache2/CacheObserver.h

Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
#ifndef CacheObserver__h__
Packit f0b94e
#define CacheObserver__h__
Packit f0b94e
Packit f0b94e
#include "nsIObserver.h"
Packit f0b94e
#include "nsIFile.h"
Packit f0b94e
#include "nsCOMPtr.h"
Packit f0b94e
#include "nsWeakReference.h"
Packit f0b94e
#include <algorithm>
Packit f0b94e
Packit f0b94e
namespace mozilla {
Packit f0b94e
namespace net {
Packit f0b94e
Packit f0b94e
class CacheObserver : public nsIObserver, public nsSupportsWeakReference {
Packit f0b94e
  virtual ~CacheObserver() {}
Packit f0b94e
Packit f0b94e
  NS_DECL_THREADSAFE_ISUPPORTS
Packit f0b94e
  NS_DECL_NSIOBSERVER
Packit f0b94e
Packit f0b94e
  static nsresult Init();
Packit f0b94e
  static nsresult Shutdown();
Packit f0b94e
  static CacheObserver* Self() { return sSelf; }
Packit f0b94e
Packit f0b94e
  // Access to preferences
Packit f0b94e
  static bool UseDiskCache() { return sUseDiskCache; }
Packit f0b94e
  static bool UseMemoryCache() { return sUseMemoryCache; }
Packit f0b94e
  static uint32_t MetadataMemoryLimit()  // result in bytes.
Packit f0b94e
  {
Packit f0b94e
    return sMetadataMemoryLimit << 10;
Packit f0b94e
  }
Packit f0b94e
  static uint32_t MemoryCacheCapacity();  // result in bytes.
Packit f0b94e
  static uint32_t DiskCacheCapacity()     // result in bytes.
Packit f0b94e
  {
Packit f0b94e
    return sDiskCacheCapacity << 10;
Packit f0b94e
  }
Packit f0b94e
  static void SetDiskCacheCapacity(uint32_t);  // parameter in bytes.
Packit f0b94e
  static uint32_t DiskFreeSpaceSoftLimit()     // result in bytes.
Packit f0b94e
  {
Packit f0b94e
    return sDiskFreeSpaceSoftLimit << 10;
Packit f0b94e
  }
Packit f0b94e
  static uint32_t DiskFreeSpaceHardLimit()  // result in bytes.
Packit f0b94e
  {
Packit f0b94e
    return sDiskFreeSpaceHardLimit << 10;
Packit f0b94e
  }
Packit f0b94e
  static bool SmartCacheSizeEnabled() { return sSmartCacheSizeEnabled; }
Packit f0b94e
  static uint32_t PreloadChunkCount() { return sPreloadChunkCount; }
Packit f0b94e
  static uint32_t MaxMemoryEntrySize()  // result in bytes.
Packit f0b94e
  {
Packit f0b94e
    return sMaxMemoryEntrySize << 10;
Packit f0b94e
  }
Packit f0b94e
  static uint32_t MaxDiskEntrySize()  // result in bytes.
Packit f0b94e
  {
Packit f0b94e
    return sMaxDiskEntrySize << 10;
Packit f0b94e
  }
Packit f0b94e
  static uint32_t MaxDiskChunksMemoryUsage(bool aPriority)  // result in bytes.
Packit f0b94e
  {
Packit f0b94e
    return aPriority ? sMaxDiskPriorityChunksMemoryUsage << 10
Packit f0b94e
                     : sMaxDiskChunksMemoryUsage << 10;
Packit f0b94e
  }
Packit f0b94e
  static uint32_t CompressionLevel() { return sCompressionLevel; }
Packit f0b94e
  static uint32_t HalfLifeSeconds() { return sHalfLifeHours * 60.0F * 60.0F; }
Packit f0b94e
  static bool ClearCacheOnShutdown() {
Packit f0b94e
    return sSanitizeOnShutdown && sClearCacheOnShutdown;
Packit f0b94e
  }
Packit f0b94e
  static bool CacheFSReported() { return sCacheFSReported; }
Packit f0b94e
  static void SetCacheFSReported();
Packit f0b94e
  static bool HashStatsReported() { return sHashStatsReported; }
Packit f0b94e
  static void SetHashStatsReported();
Packit f0b94e
  static void ParentDirOverride(nsIFile** aDir);
Packit f0b94e
Packit f0b94e
  static bool EntryIsTooBig(int64_t aSize, bool aUsingDisk);
Packit f0b94e
Packit f0b94e
  static uint32_t MaxShutdownIOLag() { return sMaxShutdownIOLag; }
Packit f0b94e
  static bool IsPastShutdownIOLag();
Packit f0b94e
Packit f0b94e
  static bool ShuttingDown() {
Packit f0b94e
    return sShutdownDemandedTime != PR_INTERVAL_NO_TIMEOUT;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  static CacheObserver* sSelf;
Packit f0b94e
Packit f0b94e
  void StoreDiskCacheCapacity();
Packit f0b94e
  void StoreCacheFSReported();
Packit f0b94e
  void StoreHashStatsReported();
Packit f0b94e
  void AttachToPreferences();
Packit f0b94e
Packit f0b94e
  static bool sUseMemoryCache;
Packit f0b94e
  static bool sUseDiskCache;
Packit f0b94e
  static uint32_t sMetadataMemoryLimit;
Packit f0b94e
  static int32_t sMemoryCacheCapacity;
Packit f0b94e
  static int32_t sAutoMemoryCacheCapacity;
Packit f0b94e
  static Atomic<uint32_t, Relaxed> sDiskCacheCapacity;
Packit f0b94e
  static uint32_t sDiskFreeSpaceSoftLimit;
Packit f0b94e
  static uint32_t sDiskFreeSpaceHardLimit;
Packit f0b94e
  static bool sSmartCacheSizeEnabled;
Packit f0b94e
  static uint32_t sPreloadChunkCount;
Packit f0b94e
  static int32_t sMaxMemoryEntrySize;
Packit f0b94e
  static int32_t sMaxDiskEntrySize;
Packit f0b94e
  static uint32_t sMaxDiskChunksMemoryUsage;
Packit f0b94e
  static uint32_t sMaxDiskPriorityChunksMemoryUsage;
Packit f0b94e
  static uint32_t sCompressionLevel;
Packit f0b94e
  static float sHalfLifeHours;
Packit f0b94e
  static bool sSanitizeOnShutdown;
Packit f0b94e
  static bool sClearCacheOnShutdown;
Packit f0b94e
  static bool sCacheFSReported;
Packit f0b94e
  static bool sHashStatsReported;
Packit f0b94e
  static Atomic<uint32_t, Relaxed> sMaxShutdownIOLag;
Packit f0b94e
  static Atomic<PRIntervalTime> sShutdownDemandedTime;
Packit f0b94e
Packit f0b94e
  // Non static properties, accessible via sSelf
Packit f0b94e
  nsCOMPtr<nsIFile> mCacheParentDirectoryOverride;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
}  // namespace net
Packit f0b94e
}  // namespace mozilla
Packit f0b94e
Packit f0b94e
#endif