Changeset 183387 in webkit


Ignore:
Timestamp:
Apr 26, 2015 11:17:05 PM (9 years ago)
Author:
Carlos Garcia Campos
Message:

[SOUP] Add initial implementation of NetworkProcess disk cache
https://bugs.webkit.org/show_bug.cgi?id=143872

Reviewed by Martin Robinson.

Source/WebCore:

Allow to create a GRefPtr for SoupBuffer. Even though SoupBuffer
is not a GObject and has copy/free functions instead of ref/unref,
it's internally refcounted, so we could use copy/free as
ref/unref.

  • PlatformGTK.cmake:
  • platform/network/soup/GRefPtrSoup.cpp: Added.

(WTF::refGPtr):
(WTF::derefGPtr):

  • platform/network/soup/GRefPtrSoup.h: Added.

Source/WebKit2:

Implement the platform specific parts of the disk cache
implementation for Soup. It's mainly NetworkCache::Data and
NetworkCache::IOChannel.

  • CMakeLists.txt:
  • NetworkProcess/cache/NetworkCache.cpp:

(WebKit::NetworkCache::dumpFileChanged):
(WebKit::NetworkCache::Cache::initialize):

  • NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
  • NetworkProcess/cache/NetworkCacheData.h:

(WebKit::NetworkCache::Data::soupBuffer):

  • NetworkProcess/cache/NetworkCacheDataSoup.cpp: Added.

(WebKit::NetworkCache::Data::Data):
(WebKit::NetworkCache::Data::empty):
(WebKit::NetworkCache::Data::data):
(WebKit::NetworkCache::Data::isNull):
(WebKit::NetworkCache::Data::apply):
(WebKit::NetworkCache::Data::subrange):
(WebKit::NetworkCache::concatenate):
(WebKit::NetworkCache::MapWrapper::~MapWrapper):
(WebKit::NetworkCache::deleteMapWrapper):
(WebKit::NetworkCache::mapFile):
(WebKit::NetworkCache::Data::adoptMap):
(WebKit::NetworkCache::computeSHA1):
(WebKit::NetworkCache::bytesEqual):

  • NetworkProcess/cache/NetworkCacheIOChannel.h:
  • NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp: Added.

(WebKit::NetworkCache::IOChannel::IOChannel):
(WebKit::NetworkCache::IOChannel::open):
(WebKit::NetworkCache::fillDataFromReadBuffer):
(WebKit::NetworkCache::inputStreamReadReadyCallback):
(WebKit::NetworkCache::IOChannel::read):
(WebKit::NetworkCache::IOChannel::readSync):
(WebKit::NetworkCache::outputStreamWriteReadyCallback):
(WebKit::NetworkCache::IOChannel::write):

  • NetworkProcess/cache/NetworkCacheStorageSoup.cpp: Removed.
  • NetworkProcess/gtk/NetworkProcessMainGtk.cpp:
  • NetworkProcess/soup/NetworkProcessSoup.cpp:

(WebKit::NetworkProcess::platformInitializeNetworkProcess):
(WebKit::NetworkProcess::platformSetCacheModel):
(WebKit::NetworkProcess::clearDiskCache):

  • PlatformGTK.cmake:
Location:
trunk/Source
Files:
4 added
1 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r183385 r183387  
     12015-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [SOUP] Add initial implementation of NetworkProcess disk cache
     4        https://bugs.webkit.org/show_bug.cgi?id=143872
     5
     6        Reviewed by Martin Robinson.
     7
     8        Allow to create a GRefPtr for SoupBuffer. Even though SoupBuffer
     9        is not a GObject and has copy/free functions instead of ref/unref,
     10        it's internally refcounted, so we could use copy/free as
     11        ref/unref.
     12
     13        * PlatformGTK.cmake:
     14        * platform/network/soup/GRefPtrSoup.cpp: Added.
     15        (WTF::refGPtr):
     16        (WTF::derefGPtr):
     17        * platform/network/soup/GRefPtrSoup.h: Added.
     18
    1192015-04-26  Manuel Rego Casasnovas  <rego@igalia.com>
    220
  • trunk/Source/WebCore/PlatformGTK.cmake

    r183265 r183387  
    160160    platform/network/soup/CredentialStorageSoup.cpp
    161161    platform/network/soup/DNSSoup.cpp
     162    platform/network/soup/GRefPtrSoup.cpp
    162163    platform/network/soup/NetworkStorageSessionSoup.cpp
    163164    platform/network/soup/ProxyServerSoup.cpp
  • trunk/Source/WebKit2/CMakeLists.txt

    r182865 r183387  
    165165
    166166    NetworkProcess/cache/NetworkCache.cpp
     167    NetworkProcess/cache/NetworkCacheBlobStorage.cpp
    167168    NetworkProcess/cache/NetworkCacheCoders.cpp
     169    NetworkProcess/cache/NetworkCacheDecoder.cpp
    168170    NetworkProcess/cache/NetworkCacheEncoder.cpp
    169     NetworkProcess/cache/NetworkCacheDecoder.cpp
     171    NetworkProcess/cache/NetworkCacheEntry.cpp
    170172    NetworkProcess/cache/NetworkCacheKey.cpp
     173    NetworkProcess/cache/NetworkCacheStatistics.cpp
     174    NetworkProcess/cache/NetworkCacheStorage.cpp
    171175)
    172176
  • trunk/Source/WebKit2/ChangeLog

    r183373 r183387  
     12015-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [SOUP] Add initial implementation of NetworkProcess disk cache
     4        https://bugs.webkit.org/show_bug.cgi?id=143872
     5
     6        Reviewed by Martin Robinson.
     7
     8        Implement the platform specific parts of the disk cache
     9        implementation for Soup. It's mainly NetworkCache::Data and
     10        NetworkCache::IOChannel.
     11
     12        * CMakeLists.txt:
     13        * NetworkProcess/cache/NetworkCache.cpp:
     14        (WebKit::NetworkCache::dumpFileChanged):
     15        (WebKit::NetworkCache::Cache::initialize):
     16        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
     17        * NetworkProcess/cache/NetworkCacheData.h:
     18        (WebKit::NetworkCache::Data::soupBuffer):
     19        * NetworkProcess/cache/NetworkCacheDataSoup.cpp: Added.
     20        (WebKit::NetworkCache::Data::Data):
     21        (WebKit::NetworkCache::Data::empty):
     22        (WebKit::NetworkCache::Data::data):
     23        (WebKit::NetworkCache::Data::isNull):
     24        (WebKit::NetworkCache::Data::apply):
     25        (WebKit::NetworkCache::Data::subrange):
     26        (WebKit::NetworkCache::concatenate):
     27        (WebKit::NetworkCache::MapWrapper::~MapWrapper):
     28        (WebKit::NetworkCache::deleteMapWrapper):
     29        (WebKit::NetworkCache::mapFile):
     30        (WebKit::NetworkCache::Data::adoptMap):
     31        (WebKit::NetworkCache::computeSHA1):
     32        (WebKit::NetworkCache::bytesEqual):
     33        * NetworkProcess/cache/NetworkCacheIOChannel.h:
     34        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp: Added.
     35        (WebKit::NetworkCache::IOChannel::IOChannel):
     36        (WebKit::NetworkCache::IOChannel::open):
     37        (WebKit::NetworkCache::fillDataFromReadBuffer):
     38        (WebKit::NetworkCache::inputStreamReadReadyCallback):
     39        (WebKit::NetworkCache::IOChannel::read):
     40        (WebKit::NetworkCache::IOChannel::readSync):
     41        (WebKit::NetworkCache::outputStreamWriteReadyCallback):
     42        (WebKit::NetworkCache::IOChannel::write):
     43        * NetworkProcess/cache/NetworkCacheStorageSoup.cpp: Removed.
     44        * NetworkProcess/gtk/NetworkProcessMainGtk.cpp:
     45        * NetworkProcess/soup/NetworkProcessSoup.cpp:
     46        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
     47        (WebKit::NetworkProcess::platformSetCacheModel):
     48        (WebKit::NetworkProcess::clearDiskCache):
     49        * PlatformGTK.cmake:
     50
    1512015-04-26  Yusuke Suzuki  <utatane.tea@gmail.com>
    252
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp

    r183081 r183387  
    5656}
    5757
     58#if PLATFORM(GTK)
     59static void dumpFileChanged(Cache* cache)
     60{
     61    cache->dumpContentsToFile();
     62}
     63#endif
     64
    5865bool Cache::initialize(const String& cachePath, bool enableEfficacyLogging)
    5966{
     
    7077            dumpContentsToFile();
    7178        });
     79    }
     80#endif
     81#if PLATFORM(GTK)
     82    // Triggers with "touch $cachePath/dump".
     83    if (m_storage) {
     84        CString dumpFilePath = WebCore::fileSystemRepresentation(WebCore::pathByAppendingComponent(m_storage->basePath(), "dump"));
     85        GRefPtr<GFile> dumpFile = adoptGRef(g_file_new_for_path(dumpFilePath.data()));
     86        GFileMonitor* monitor = g_file_monitor_file(dumpFile.get(), G_FILE_MONITOR_NONE, nullptr, nullptr);
     87        g_signal_connect_swapped(monitor, "changed", G_CALLBACK(dumpFileChanged), this);
    7288    }
    7389#endif
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheBlobStorage.cpp

    r182803 r183387  
    3232#include "NetworkCacheFileSystemPosix.h"
    3333#include <WebCore/FileSystem.h>
     34#include <fcntl.h>
    3435#include <sys/mman.h>
    3536#include <wtf/RunLoop.h>
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheData.h

    r182803 r183387  
    3434#include <wtf/ThreadSafeRefCounted.h>
    3535#include <wtf/text/WTFString.h>
     36
     37#if USE(SOUP)
     38#include <WebCore/GRefPtrSoup.h>
     39#endif
    3640
    3741namespace WebKit {
     
    107111    Data(DispatchPtr<dispatch_data_t>, Backing = Backing::Buffer);
    108112#endif
     113#if USE(SOUP)
     114    Data(GRefPtr<SoupBuffer>&&, Backing = Backing::Buffer);
     115#endif
    109116    bool isNull() const;
    110117    bool isEmpty() const { return !m_size; }
     
    121128    dispatch_data_t dispatchData() const { return m_dispatchData.get(); }
    122129#endif
     130
     131#if USE(SOUP)
     132    SoupBuffer* soupBuffer() const { return m_buffer.get(); }
     133#endif
    123134private:
    124135#if PLATFORM(COCOA)
    125136    mutable DispatchPtr<dispatch_data_t> m_dispatchData;
     137#endif
     138#if USE(SOUP)
     139    mutable GRefPtr<SoupBuffer> m_buffer;
    126140#endif
    127141    mutable const uint8_t* m_data { nullptr };
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannel.h

    r182856 r183387  
    3535#include <wtf/text/WTFString.h>
    3636
     37#if USE(SOUP)
     38#include <wtf/gobject/GRefPtr.h>
     39#endif
     40
    3741namespace WebKit {
    3842namespace NetworkCache {
     
    6468    DispatchPtr<dispatch_io_t> m_dispatchIO;
    6569#endif
     70#if USE(SOUP)
     71    GRefPtr<GInputStream> m_inputStream;
     72    GRefPtr<GOutputStream> m_outputStream;
     73    GRefPtr<GFileIOStream> m_ioStream;
     74#endif
    6675};
    6776
  • trunk/Source/WebKit2/NetworkProcess/gtk/NetworkProcessMainGtk.cpp

    r176724 r183387  
    4949    void platformFinalize() override
    5050    {
     51#if !ENABLE(NETWORK_CACHE)
    5152        if (SoupCache* soupCache = SoupNetworkSession::defaultSession().cache()) {
    5253            soup_cache_flush(soupCache);
    5354            soup_cache_dump(soupCache);
    5455        }
     56#endif
    5557    }
    5658};
  • trunk/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp

    r183255 r183387  
    2929#include "NetworkProcess.h"
    3030
     31#include "NetworkCache.h"
    3132#include "NetworkProcessCreationParameters.h"
    3233#include "ResourceCachesToClear.h"
     
    4546namespace WebKit {
    4647
     48#if !ENABLE(NETWORK_CACHE)
    4749static uint64_t getCacheDiskFreeSize(SoupCache* cache)
    4850{
     
    5658    return WebCore::getVolumeFreeSizeForPath(cacheDir.get());
    5759}
     60#endif
    5861
    5962static uint64_t getMemorySize()
     
    8487{
    8588    ASSERT(!parameters.diskCacheDirectory.isEmpty());
     89    m_diskCacheDirectory = parameters.diskCacheDirectory;
    8690
     91#if ENABLE(NETWORK_CACHE)
     92    // Clear the old soup cache if it exists.
     93    SoupNetworkSession::defaultSession().clearCache(m_diskCacheDirectory);
     94
     95    NetworkCache::singleton().initialize(m_diskCacheDirectory, parameters.shouldEnableNetworkCacheEfficacyLogging);
     96#else
    8797    // We used to use the given cache directory for the soup cache, but now we use a subdirectory to avoid
    8898    // conflicts with other cache files in the same directory. Remove the old cache files if they still exist.
     
    98108    soup_cache_load(soupCache.get());
    99109    soup_cache_set_max_size(soupCache.get(), initialMaxSize);
     110#endif
    100111
    101112    if (!parameters.cookiePersistentStoragePath.isEmpty()) {
     
    122133    unsigned long urlCacheDiskCapacity = 0;
    123134
     135#if ENABLE(NETWORK_CACHE)
     136    uint64_t diskFreeSize = WebCore::getVolumeFreeSizeForPath(m_diskCacheDirectory.utf8().data()) / 1024 / 1024;
     137#else
    124138    SoupCache* cache = SoupNetworkSession::defaultSession().cache();
    125139    uint64_t diskFreeSize = getCacheDiskFreeSize(cache) / 1024 / 1024;
     140#endif
    126141
    127142    uint64_t memSize = getMemorySize();
     
    130145        pageCacheCapacity, urlCacheMemoryCapacity, urlCacheDiskCapacity);
    131146
     147#if ENABLE(NETWORK_CACHE)
     148    auto& networkCache = NetworkCache::singleton();
     149    if (networkCache.isEnabled())
     150        networkCache.setCapacity(urlCacheDiskCapacity);
     151#else
    132152    if (urlCacheDiskCapacity > soup_cache_get_max_size(cache))
    133153        soup_cache_set_max_size(cache, urlCacheDiskCapacity);
     154#endif
    134155}
    135156
     
    155176{
    156177    // FIXME: Find a way to only clear a part of the cache based on the date.
     178#if ENABLE(NETWORK_CACHE)
     179    NetworkCache::singleton().clear();
     180#else
    157181    soup_cache_clear(SoupNetworkSession::defaultSession().cache());
     182#endif
    158183}
    159184
  • trunk/Source/WebKit2/PlatformGTK.cmake

    r182882 r183387  
    1919    DatabaseProcess/gtk/DatabaseProcessMainGtk.cpp
    2020
    21     NetworkProcess/cache/NetworkCacheStorageSoup.cpp
     21    NetworkProcess/cache/NetworkCacheDataSoup.cpp
     22    NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp
    2223
    2324    NetworkProcess/gtk/NetworkProcessMainGtk.cpp
Note: See TracChangeset for help on using the changeset viewer.