diff options
Diffstat (limited to 'Source/WebKit2/Shared/ShareableBitmap.cpp')
-rw-r--r-- | Source/WebKit2/Shared/ShareableBitmap.cpp | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/Source/WebKit2/Shared/ShareableBitmap.cpp b/Source/WebKit2/Shared/ShareableBitmap.cpp index ab1991f..cde3aa1 100644 --- a/Source/WebKit2/Shared/ShareableBitmap.cpp +++ b/Source/WebKit2/Shared/ShareableBitmap.cpp @@ -27,13 +27,37 @@ #include "ShareableBitmap.h" #include "SharedMemory.h" +#include "WebCoreArgumentCoders.h" #include <WebCore/GraphicsContext.h> using namespace WebCore; namespace WebKit { -PassRefPtr<ShareableBitmap> ShareableBitmap::create(const WebCore::IntSize& size) +ShareableBitmap::Handle::Handle() + : m_flags(0) +{ +} + +void ShareableBitmap::Handle::encode(CoreIPC::ArgumentEncoder* encoder) const +{ + encoder->encode(m_handle); + encoder->encode(m_size); + encoder->encode(m_flags); +} + +bool ShareableBitmap::Handle::decode(CoreIPC::ArgumentDecoder* decoder, Handle& handle) +{ + if (!decoder->decode(handle.m_handle)) + return false; + if (!decoder->decode(handle.m_size)) + return false; + if (!decoder->decode(handle.m_flags)) + return false; + return true; +} + +PassRefPtr<ShareableBitmap> ShareableBitmap::create(const IntSize& size, Flags flags) { size_t numBytes = numBytesForSize(size); @@ -41,10 +65,10 @@ PassRefPtr<ShareableBitmap> ShareableBitmap::create(const WebCore::IntSize& size if (!tryFastMalloc(numBytes).getValue(data)) return 0; - return adoptRef(new ShareableBitmap(size, data)); + return adoptRef(new ShareableBitmap(size, flags, data)); } -PassRefPtr<ShareableBitmap> ShareableBitmap::createShareable(const IntSize& size) +PassRefPtr<ShareableBitmap> ShareableBitmap::createShareable(const IntSize& size, Flags flags) { size_t numBytes = numBytesForSize(size); @@ -52,44 +76,50 @@ PassRefPtr<ShareableBitmap> ShareableBitmap::createShareable(const IntSize& size if (!sharedMemory) return 0; - return adoptRef(new ShareableBitmap(size, sharedMemory)); + return adoptRef(new ShareableBitmap(size, flags, sharedMemory)); } -PassRefPtr<ShareableBitmap> ShareableBitmap::create(const WebCore::IntSize& size, PassRefPtr<SharedMemory> sharedMemory) +PassRefPtr<ShareableBitmap> ShareableBitmap::create(const IntSize& size, Flags flags, PassRefPtr<SharedMemory> sharedMemory) { ASSERT(sharedMemory); size_t numBytes = numBytesForSize(size); ASSERT_UNUSED(numBytes, sharedMemory->size() >= numBytes); - return adoptRef(new ShareableBitmap(size, sharedMemory)); + return adoptRef(new ShareableBitmap(size, flags, sharedMemory)); } -PassRefPtr<ShareableBitmap> ShareableBitmap::create(const WebCore::IntSize& size, const SharedMemory::Handle& handle) +PassRefPtr<ShareableBitmap> ShareableBitmap::create(const Handle& handle) { // Create the shared memory. - RefPtr<SharedMemory> sharedMemory = SharedMemory::create(handle, SharedMemory::ReadWrite); + RefPtr<SharedMemory> sharedMemory = SharedMemory::create(handle.m_handle, SharedMemory::ReadWrite); if (!sharedMemory) return 0; - return create(size, sharedMemory.release()); + return create(handle.m_size, handle.m_flags, sharedMemory.release()); } -bool ShareableBitmap::createHandle(SharedMemory::Handle& handle) +bool ShareableBitmap::createHandle(Handle& handle) { ASSERT(isBackedBySharedMemory()); - return m_sharedMemory->createHandle(handle, SharedMemory::ReadWrite); + if (!m_sharedMemory->createHandle(handle.m_handle, SharedMemory::ReadWrite)) + return false; + handle.m_size = m_size; + handle.m_flags = m_flags; + return true; } -ShareableBitmap::ShareableBitmap(const IntSize& size, void* data) +ShareableBitmap::ShareableBitmap(const IntSize& size, Flags flags, void* data) : m_size(size) + , m_flags(flags) , m_data(data) { } -ShareableBitmap::ShareableBitmap(const IntSize& size, PassRefPtr<SharedMemory> sharedMemory) +ShareableBitmap::ShareableBitmap(const IntSize& size, Flags flags, PassRefPtr<SharedMemory> sharedMemory) : m_size(size) + , m_flags(flags) , m_sharedMemory(sharedMemory) , m_data(0) { |