Changeset 286097 in webkit
- Timestamp:
- Nov 20, 2021, 3:21:55 PM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 8 edited
-
ChangeLog (modified) (1 diff)
-
Shared/WebHitTestResultData.cpp (modified) (1 diff)
-
UIProcess/Cocoa/WebPasteboardProxyCocoa.mm (modified) (2 diffs)
-
WebProcess/Plugins/PDF/PDFPlugin.mm (modified) (1 diff)
-
WebProcess/WebCoreSupport/WebPlatformStrategies.cpp (modified) (1 diff)
-
WebProcess/WebCoreSupport/mac/WebDragClientMac.mm (modified) (2 diffs)
-
WebProcess/WebPage/ios/WebPageIOS.mm (modified) (1 diff)
-
WebProcess/WebPage/mac/WebPageMac.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r286094 r286097 1 2021-11-20 Jean-Yves Avenard <jya@apple.com> 2 3 Remove unnecessary flattening of SharedBuffer when sending them over IPC 4 https://bugs.webkit.org/show_bug.cgi?id=233363 5 rdar://85600684 6 7 Reviewed by Sam Weinig. 8 9 In several places, a SharedMemory was allocated followed by a copy. To perform 10 this copy, the SharedBuffer was flattened which could involve a memory allocation 11 followed by a copy of all segments into the final vector. 12 We instead make use of SharedBuffer::copyBuffer convenience method which will simply 13 copy the individual segment into the newly allocated SharedMemory. 14 15 No change in user observable behaviour. 16 17 Fly-by fix: SharedMemory::allocate is fallible; few instances didn't check the 18 returned value. So test that it succeeded and prevent a crash (null deref) 19 20 * Shared/WebHitTestResultData.cpp: 21 (WebKit::WebHitTestResultData::WebHitTestResultData): 22 * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm: 23 (WebKit::WebPasteboardProxy::getPasteboardBufferForType): 24 (WebKit::WebPasteboardProxy::readBufferFromPasteboard): 25 * WebProcess/Plugins/PDF/PDFPlugin.mm: 26 (WebKit::PDFPlugin::writeItemsToPasteboard): 27 * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: 28 (WebKit::WebPlatformStrategies::setBufferForType): 29 * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: 30 (WebKit::WebDragClient::declareAndWriteDragImage): 31 * WebProcess/WebPage/ios/WebPageIOS.mm: 32 (WebKit::WebPage::performActionOnElement): 33 * WebProcess/WebPage/mac/WebPageMac.mm: 34 (WebKit::WebPage::getDataSelectionForPasteboard): 35 1 36 2021-11-20 Carlos Garcia Campos <cgarcia@igalia.com> 2 37 -
trunk/Source/WebKit/Shared/WebHitTestResultData.cpp
r285316 r286097 88 88 RefPtr<SharedBuffer> buffer = image->data(); 89 89 if (buffer) { 90 imageSharedMemory = WebKit::SharedMemory::allocate(buffer->size()); 91 memcpy(imageSharedMemory->data(), buffer->data(), buffer->size()); 90 imageSharedMemory = WebKit::SharedMemory::copyBuffer(*buffer); 92 91 imageSize = buffer->size(); 93 92 } -
trunk/Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm
r284142 r286097 234 234 if (!size) 235 235 return completionHandler({ }); 236 RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::allocate(size);236 auto sharedMemoryBuffer = SharedMemory::copyBuffer(*buffer); 237 237 if (!sharedMemoryBuffer) 238 238 return completionHandler({ }); 239 memcpy(sharedMemoryBuffer->data(), buffer->data(), size);240 239 SharedMemory::Handle handle; 241 240 if (!sharedMemoryBuffer->createHandle(handle, SharedMemory::Protection::ReadOnly)) … … 557 556 if (!size) 558 557 return completionHandler({ }); 559 RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::allocate(size);558 auto sharedMemoryBuffer = SharedMemory::copyBuffer(*buffer); 560 559 if (!sharedMemoryBuffer) 561 560 return completionHandler({ }); 562 memcpy(sharedMemoryBuffer->data(), buffer->data(), size);563 561 SharedMemory::Handle handle; 564 562 if (!sharedMemoryBuffer->createHandle(handle, SharedMemory::Protection::ReadOnly)) -
trunk/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm
r285316 r286097 2664 2664 } else { 2665 2665 auto buffer = SharedBuffer::create(data); 2666 auto sharedMemory = SharedMemory::copyBuffer(buffer.get()); 2667 if (!sharedMemory) 2668 continue; 2666 2669 SharedMemory::Handle handle; 2667 auto sharedMemory = SharedMemory::allocate(buffer->size());2668 memcpy(sharedMemory->data(), buffer->data(), buffer->size());2669 2670 sharedMemory->createHandle(handle, SharedMemory::Protection::ReadOnly); 2670 2671 webProcess.parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::SetPasteboardBufferForType(pasteboardName, type, SharedMemory::IPCHandle { WTFMove(handle), buffer->size() }, pageIdentifier), Messages::WebPasteboardProxy::SetPasteboardBufferForType::Reply(newChangeCount), 0); -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
r285047 r286097 212 212 SharedMemory::Handle handle; 213 213 if (buffer && buffer->size()) { 214 RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::allocate(buffer->size());214 auto sharedMemoryBuffer = SharedMemory::copyBuffer(*buffer); 215 215 // FIXME: Null check prevents crashing, but it is not great that we will have empty pasteboard content for this type, 216 216 // because we've already set the types. 217 if (sharedMemoryBuffer) { 218 memcpy(sharedMemoryBuffer->data(), buffer->data(), buffer->size()); 217 if (sharedMemoryBuffer) 219 218 sharedMemoryBuffer->createHandle(handle, SharedMemory::Protection::ReadOnly); 220 }221 219 } 222 220 int64_t newChangeCount { 0 }; -
trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm
r283851 r286097 153 153 RefPtr<SharedBuffer> imageBuffer = image->image()->data(); 154 154 size_t imageSize = imageBuffer->size(); 155 SharedMemory::Handle imageHandle; 156 157 RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::allocate(imageBuffer->size()); 155 156 auto sharedMemoryBuffer = SharedMemory::copyBuffer(*imageBuffer); 158 157 if (!sharedMemoryBuffer) 159 158 return; 160 memcpy(sharedMemoryBuffer->data(), imageBuffer->data(), imageSize);159 SharedMemory::Handle imageHandle; 161 160 sharedMemoryBuffer->createHandle(imageHandle, SharedMemory::Protection::ReadOnly); 162 161 … … 166 165 if (data) { 167 166 auto archiveBuffer = SharedBuffer::create((__bridge NSData *)data.get()); 168 RefPtr<SharedMemory> archiveSharedMemoryBuffer = SharedMemory::allocate(archiveBuffer->size());167 auto archiveSharedMemoryBuffer = SharedMemory::copyBuffer(archiveBuffer.get()); 169 168 if (!archiveSharedMemoryBuffer) 170 169 return; 171 170 archiveSize = archiveBuffer->size(); 172 memcpy(archiveSharedMemoryBuffer->data(), archiveBuffer->data(), archiveSize);173 171 archiveSharedMemoryBuffer->createHandle(archiveHandle, SharedMemory::Protection::ReadOnly); 174 172 } -
trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
r285655 r286097 3221 3221 if (!buffer) 3222 3222 return; 3223 uint64_t bufferSize = buffer->size();3224 RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::allocate(bufferSize);3225 memcpy(sharedMemoryBuffer->data(), buffer->data(), bufferSize);3223 auto sharedMemoryBuffer = SharedMemory::copyBuffer(*buffer); 3224 if (!sharedMemoryBuffer) 3225 return; 3226 3226 SharedMemory::Handle handle; 3227 3227 sharedMemoryBuffer->createHandle(handle, SharedMemory::Protection::ReadOnly); 3228 send(Messages::WebPageProxy::SaveImageToLibrary(SharedMemory::IPCHandle { WTFMove(handle), buffer Size}));3228 send(Messages::WebPageProxy::SaveImageToLibrary(SharedMemory::IPCHandle { WTFMove(handle), buffer->size() })); 3229 3229 } 3230 3230 } -
trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm
r285655 r286097 570 570 if (!buffer) 571 571 return completionHandler({ }); 572 uint64_t size = buffer->size();573 RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::allocate(size);574 memcpy(sharedMemoryBuffer->data(), buffer->data(), size);572 auto sharedMemoryBuffer = SharedMemory::copyBuffer(*buffer); 573 if (!sharedMemoryBuffer) 574 return completionHandler({ }); 575 575 SharedMemory::Handle handle; 576 576 sharedMemoryBuffer->createHandle(handle, SharedMemory::Protection::ReadOnly); 577 completionHandler(SharedMemory::IPCHandle { WTFMove(handle), size});577 completionHandler(SharedMemory::IPCHandle { WTFMove(handle), buffer->size() }); 578 578 } 579 579
Note:
See TracChangeset
for help on using the changeset viewer.