Changeset 181161 in webkit
- Timestamp:
- Mar 6, 2015, 9:30:32 AM (11 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
NetworkProcess/cache/NetworkCacheIOChannel.h (modified) (1 diff)
-
NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm (modified) (2 diffs)
-
NetworkProcess/cache/NetworkCacheStorageCocoa.mm (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r181160 r181161 1 2015-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 1 18 2015-03-06 Antti Koivisto <antti@apple.com> 2 19 -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannel.h
r181140 r181161 43 43 44 44 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)>); 45 46 void write(size_t offset, const Data&, std::function<void (int error)>); 46 47 -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm
r181160 r181161 76 76 } 77 77 78 void IOChannel::read(size_t offset, size_t size, std::function<void ( Data&, int error)> completionHandler)78 void IOChannel::read(size_t offset, size_t size, std::function<void (Data&, int error)> completionHandler) 79 79 { 80 80 RefPtr<IOChannel> channel(this); … … 96 96 } 97 97 98 // FIXME: It would be better to do without this. 99 void 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 98 109 void IOChannel::write(size_t offset, const Data& data, std::function<void (int error)> completionHandler) 99 110 { -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm
r181160 r181161 33 33 #include "NetworkCacheFileSystemPosix.h" 34 34 #include "NetworkCacheIOChannel.h" 35 #include <dispatch/dispatch.h>36 35 #include <wtf/PageBlock.h> 37 36 #include <wtf/RandomNumber.h> … … 410 409 ioQueue().dispatch([this, cachePathCapture, traverseHandler] { 411 410 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) { 414 412 auto filePath = WebCore::pathByAppendingComponent(partitionPath, fileName); 415 413 auto channel = IOChannel::open(filePath, IOChannel::Type::Read); 416 414 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) { 418 417 EntryMetaData metaData; 419 418 Data headerData; … … 422 421 traverseHandler(&entry); 423 422 } 424 dispatch_semaphore_signal(semaphore.get());425 423 }); 426 dispatch_semaphore_wait(semaphore.get(), DISPATCH_TIME_FOREVER);427 424 }); 428 425 RunLoop::main().dispatch([this, traverseHandler] {
Note:
See TracChangeset
for help on using the changeset viewer.