summaryrefslogtreecommitdiffstats
path: root/Source/WebKit2/Shared/ShareableBitmap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/Shared/ShareableBitmap.cpp')
-rw-r--r--Source/WebKit2/Shared/ShareableBitmap.cpp56
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)
{