Changeset 181161 in webkit


Ignore:
Timestamp:
Mar 6, 2015, 9:30:32 AM (11 years ago)
Author:
Antti Koivisto
Message:

Don't use dispatch_semaphore in NetworkCacheStorage
https://bugs.webkit.org/show_bug.cgi?id=142395

Reviewed by Anders Carlsson.

  • NetworkProcess/cache/NetworkCacheIOChannel.h:
  • NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:

(WebKit::NetworkCache::IOChannel::read):
(WebKit::NetworkCache::IOChannel::readSync):

Add readSync to encapsulate the semaphore.

  • NetworkProcess/cache/NetworkCacheStorageCocoa.mm:

(WebKit::NetworkCache::Storage::traverse):

Location:
trunk/Source/WebKit2
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r181160 r181161  
     12015-03-06  Antti Koivisto  <antti@apple.com>
     2
     3        Don't use dispatch_semaphore in NetworkCacheStorage
     4        https://bugs.webkit.org/show_bug.cgi?id=142395
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * NetworkProcess/cache/NetworkCacheIOChannel.h:
     9        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
     10        (WebKit::NetworkCache::IOChannel::read):
     11        (WebKit::NetworkCache::IOChannel::readSync):
     12
     13            Add readSync to encapsulate the semaphore.
     14
     15        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
     16        (WebKit::NetworkCache::Storage::traverse):
     17
    1182015-03-06  Antti Koivisto  <antti@apple.com>
    219
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannel.h

    r181140 r181161  
    4343
    4444    void read(size_t offset, size_t, std::function<void (Data&, int error)>);
     45    void readSync(size_t offset, size_t, std::function<void (Data&, int error)>);
    4546    void write(size_t offset, const Data&, std::function<void (int error)>);
    4647
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm

    r181160 r181161  
    7676}
    7777
    78 void IOChannel::read(size_t offset, size_t size, std::function<void ( Data&, int error)> completionHandler)
     78void IOChannel::read(size_t offset, size_t size, std::function<void (Data&, int error)> completionHandler)
    7979{
    8080    RefPtr<IOChannel> channel(this);
     
    9696}
    9797
     98// FIXME: It would be better to do without this.
     99void IOChannel::readSync(size_t offset, size_t size, std::function<void (Data&, int error)> completionHandler)
     100{
     101    auto semaphore = adoptDispatch(dispatch_semaphore_create(0));
     102    read(offset, size, [semaphore, &completionHandler](Data& data, int error) {
     103        completionHandler(data, error);
     104        dispatch_semaphore_signal(semaphore.get());
     105    });
     106    dispatch_semaphore_wait(semaphore.get(), DISPATCH_TIME_FOREVER);
     107}
     108
    98109void IOChannel::write(size_t offset, const Data& data, std::function<void (int error)> completionHandler)
    99110{
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm

    r181160 r181161  
    3333#include "NetworkCacheFileSystemPosix.h"
    3434#include "NetworkCacheIOChannel.h"
    35 #include <dispatch/dispatch.h>
    3635#include <wtf/PageBlock.h>
    3736#include <wtf/RandomNumber.h>
     
    410409    ioQueue().dispatch([this, cachePathCapture, traverseHandler] {
    411410        String cachePath = cachePathCapture.string();
    412         auto semaphore = adoptDispatch(dispatch_semaphore_create(0));
    413         traverseCacheFiles(cachePath, [this, &semaphore, &traverseHandler](const String& fileName, const String& partitionPath) {
     411        traverseCacheFiles(cachePath, [this, &traverseHandler](const String& fileName, const String& partitionPath) {
    414412            auto filePath = WebCore::pathByAppendingComponent(partitionPath, fileName);
    415413            auto channel = IOChannel::open(filePath, IOChannel::Type::Read);
    416414            const size_t headerReadSize = 16 << 10;
    417             channel->read(0, headerReadSize, [this, &semaphore, &traverseHandler](Data& fileData, int) {
     415            // FIXME: Traversal is slower than it should be due to lack of parallelism.
     416            channel->readSync(0, headerReadSize, [this, &traverseHandler](Data& fileData, int) {
    418417                EntryMetaData metaData;
    419418                Data headerData;
     
    422421                    traverseHandler(&entry);
    423422                }
    424                 dispatch_semaphore_signal(semaphore.get());
    425423            });
    426             dispatch_semaphore_wait(semaphore.get(), DISPATCH_TIME_FOREVER);
    427424        });
    428425        RunLoop::main().dispatch([this, traverseHandler] {
Note: See TracChangeset for help on using the changeset viewer.