| Index: app/surface/transport_dib_mac.cc
|
| diff --git a/app/surface/transport_dib_mac.cc b/app/surface/transport_dib_mac.cc
|
| index c3f3abd2129f3e783cd36e5118567ea3d6da667c..8ea81ae26a0aa9732d69e89c04a06118a466bda0 100644
|
| --- a/app/surface/transport_dib_mac.cc
|
| +++ b/app/surface/transport_dib_mac.cc
|
| @@ -38,36 +38,48 @@ TransportDIB* TransportDIB::Create(size_t size, uint32 sequence_num) {
|
| }
|
|
|
| // static
|
| -TransportDIB* TransportDIB::Map(TransportDIB::Handle handle) {
|
| - if (!is_valid(handle))
|
| +TransportDIB* TransportDIB::Map(Handle handle) {
|
| + scoped_ptr<TransportDIB> dib(CreateWithHandle(handle));
|
| + if (!dib->Map())
|
| return NULL;
|
| + return dib.release();
|
| +}
|
|
|
| - TransportDIB* dib = new TransportDIB(handle);
|
| - struct stat st;
|
| - if ((fstat(handle.fd, &st) != 0) ||
|
| - (!dib->shared_memory_.Map(st.st_size))) {
|
| - delete dib;
|
| - if (HANDLE_EINTR(close(handle.fd)) < 0)
|
| - PLOG(ERROR) << "close";
|
| - return NULL;
|
| - }
|
| -
|
| - dib->size_ = st.st_size;
|
| -
|
| - return dib;
|
| +// static
|
| +TransportDIB* TransportDIB::CreateWithHandle(Handle handle) {
|
| + return new TransportDIB(handle);
|
| }
|
|
|
| +// static
|
| bool TransportDIB::is_valid(Handle dib) {
|
| return dib.fd >= 0;
|
| }
|
|
|
| skia::PlatformCanvas* TransportDIB::GetPlatformCanvas(int w, int h) {
|
| + if (!memory() && !Map())
|
| + return NULL;
|
| scoped_ptr<skia::PlatformCanvas> canvas(new skia::PlatformCanvas);
|
| if (!canvas->initialize(w, h, true, reinterpret_cast<uint8_t*>(memory())))
|
| return NULL;
|
| return canvas.release();
|
| }
|
|
|
| +bool TransportDIB::Map() {
|
| + if (!is_valid(handle()))
|
| + return false;
|
| + if (memory())
|
| + return true;
|
| +
|
| + struct stat st;
|
| + if ((fstat(shared_memory_.handle().fd, &st) != 0) ||
|
| + (!shared_memory_.Map(st.st_size))) {
|
| + return false;
|
| + }
|
| +
|
| + size_ = st.st_size;
|
| + return true;
|
| +}
|
| +
|
| void* TransportDIB::memory() const {
|
| return shared_memory_.memory();
|
| }
|
|
|