1/* 2 * Copyright (C) 2007 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef PageCache_h 27#define PageCache_h 28 29#include "Timer.h" 30#include <wtf/Forward.h> 31#include <wtf/HashSet.h> 32#include <wtf/Noncopyable.h> 33 34namespace WebCore { 35 36 class CachedPage; 37 class Frame; 38 class HistoryItem; 39 class Page; 40 41 class PageCache { 42 WTF_MAKE_NONCOPYABLE(PageCache); WTF_MAKE_FAST_ALLOCATED; 43 public: 44 friend PageCache* pageCache(); 45 46 bool canCache(Page*) const; 47 48 void setCapacity(int); // number of pages to cache 49 int capacity() { return m_capacity; } 50 51 void add(PassRefPtr<HistoryItem>, Page*); // Prunes if capacity() is exceeded. 52 void remove(HistoryItem*); 53 CachedPage* get(HistoryItem* item); 54 55 int pageCount() const { return m_size; } 56 int frameCount() const; 57 58 void markPagesForVistedLinkStyleRecalc(); 59 60 // Will mark all cached pages associated with the given page as needing style recalc. 61 void markPagesForFullStyleRecalc(Page*); 62 63#if ENABLE(VIDEO_TRACK) 64 void markPagesForCaptionPreferencesChanged(); 65#endif 66 67#if USE(ACCELERATED_COMPOSITING) 68 bool shouldClearBackingStores() const { return m_shouldClearBackingStores; } 69 void setShouldClearBackingStores(bool flag) { m_shouldClearBackingStores = flag; } 70 void markPagesForDeviceScaleChanged(Page*); 71#endif 72 73 private: 74 PageCache(); // Use pageCache() instead. 75 ~PageCache(); // Not implemented to make sure nobody accidentally calls delete -- WebCore does not delete singletons. 76 77 static bool canCachePageContainingThisFrame(Frame*); 78 79 void addToLRUList(HistoryItem*); // Adds to the head of the list. 80 void removeFromLRUList(HistoryItem*); 81 82 void prune(); 83 84 int m_capacity; 85 int m_size; 86 87 // LRU List 88 HistoryItem* m_head; 89 HistoryItem* m_tail; 90 91#if USE(ACCELERATED_COMPOSITING) 92 bool m_shouldClearBackingStores; 93#endif 94 }; 95 96 // Function to obtain the global page cache. 97 PageCache* pageCache(); 98 99} // namespace WebCore 100 101#endif // PageCache_h 102