LCOV - code coverage report
Current view: top level - netwerk/cache2 - CacheFileContextEvictor.h (source / functions) Hit Total Coverage
Test: output.info Lines: 1 2 50.0 %
Date: 2017-07-14 16:53:18 Functions: 2 4 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* This Source Code Form is subject to the terms of the Mozilla Public
       2             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       3             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       4             : 
       5             : #ifndef CacheFileContextEvictor__h__
       6             : #define CacheFileContextEvictor__h__
       7             : 
       8             : #include "nsTArray.h"
       9             : #include "nsCOMPtr.h"
      10             : #include "nsAutoPtr.h"
      11             : 
      12             : class nsIFile;
      13             : class nsILoadContextInfo;
      14             : 
      15             : namespace mozilla {
      16             : namespace net {
      17             : 
      18             : class CacheIndexIterator;
      19             : 
      20           0 : struct CacheFileContextEvictorEntry
      21             : {
      22             :   nsCOMPtr<nsILoadContextInfo> mInfo;
      23             :   bool                         mPinned;
      24             :   PRTime                       mTimeStamp; // in milliseconds
      25             :   RefPtr<CacheIndexIterator> mIterator;
      26             : };
      27             : 
      28             : class CacheFileContextEvictor
      29             : {
      30             : public:
      31           2 :   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CacheFileContextEvictor)
      32             : 
      33             :   CacheFileContextEvictor();
      34             : 
      35             : private:
      36             :   virtual ~CacheFileContextEvictor();
      37             : 
      38             : public:
      39             :   nsresult Init(nsIFile *aCacheDirectory);
      40             : 
      41             :   // Returns number of contexts that are being evicted.
      42             :   uint32_t ContextsCount();
      43             :   // Start evicting given context.
      44             :   nsresult AddContext(nsILoadContextInfo *aLoadContextInfo, bool aPinned);
      45             :   // CacheFileIOManager calls this method when CacheIndex's state changes. We
      46             :   // check whether the index is up to date and start or stop evicting according
      47             :   // to index's state.
      48             :   nsresult CacheIndexStateChanged();
      49             :   // CacheFileIOManager calls this method to check whether an entry file should
      50             :   // be considered as evicted. It returns true when there is a matching context
      51             :   // info to the given key and the last modified time of the entry file is
      52             :   // earlier than the time stamp of the time when the context was added to the
      53             :   // evictor.
      54             :   nsresult WasEvicted(const nsACString &aKey, nsIFile *aFile,
      55             :                       bool *aEvictedAsPinned, bool *aEvictedAsNonPinned);
      56             : 
      57             : private:
      58             :   // Writes information about eviction of the given context to the disk. This is
      59             :   // done for every context added to the evictor to be able to recover eviction
      60             :   // after a shutdown or crash. When the context file is found after startup, we
      61             :   // restore mTimeStamp from the last modified time of the file.
      62             :   nsresult PersistEvictionInfoToDisk(nsILoadContextInfo *aLoadContextInfo, bool aPinned);
      63             :   // Once we are done with eviction for the given context, the eviction info is
      64             :   // removed from the disk.
      65             :   nsresult RemoveEvictInfoFromDisk(nsILoadContextInfo *aLoadContextInfo, bool aPinned);
      66             :   // Tries to load all contexts from the disk. This method is called just once
      67             :   // after startup.
      68             :   nsresult LoadEvictInfoFromDisk();
      69             :   nsresult GetContextFile(nsILoadContextInfo *aLoadContextInfo, bool aPinned,
      70             :                           nsIFile **_retval);
      71             : 
      72             :   void     CreateIterators();
      73             :   void     CloseIterators();
      74             :   void     StartEvicting();
      75             :   nsresult EvictEntries();
      76             : 
      77             :   // Whether eviction is in progress
      78             :   bool mEvicting;
      79             :   // Whether index is up to date. We wait with eviction until the index finishes
      80             :   // update process when it is outdated. NOTE: We also stop eviction in progress
      81             :   // when the index is found outdated, the eviction is restarted again once the
      82             :   // update process finishes.
      83             :   bool mIndexIsUpToDate;
      84             :   // Whether we already tried to restore unfinished jobs from previous run after
      85             :   // startup.
      86             :   static bool sDiskAlreadySearched;
      87             :   // Array of contexts being evicted.
      88             :   nsTArray<nsAutoPtr<CacheFileContextEvictorEntry> > mEntries;
      89             :   nsCOMPtr<nsIFile> mCacheDirectory;
      90             :   nsCOMPtr<nsIFile> mEntriesDir;
      91             : };
      92             : 
      93             : } // namespace net
      94             : } // namespace mozilla
      95             : 
      96             : #endif

Generated by: LCOV version 1.13