From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- gfx/layers/ipc/GonkNativeHandle.cpp | 80 +++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 gfx/layers/ipc/GonkNativeHandle.cpp (limited to 'gfx/layers/ipc/GonkNativeHandle.cpp') diff --git a/gfx/layers/ipc/GonkNativeHandle.cpp b/gfx/layers/ipc/GonkNativeHandle.cpp new file mode 100644 index 000000000..8f808e623 --- /dev/null +++ b/gfx/layers/ipc/GonkNativeHandle.cpp @@ -0,0 +1,80 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: sw=2 ts=8 et : + */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include + +#include "GonkNativeHandle.h" + +using namespace mozilla::layers; + +namespace mozilla { +namespace layers { + +GonkNativeHandle::GonkNativeHandle() + : mNhObj(new NhObj()) +{ +} + +GonkNativeHandle::GonkNativeHandle(NhObj* aNhObj) + : mNhObj(aNhObj) +{ + MOZ_ASSERT(aNhObj); +} + + +void +GonkNativeHandle::TransferToAnother(GonkNativeHandle& aHandle) +{ + aHandle.mNhObj = this->GetAndResetNhObj(); +} + +already_AddRefed +GonkNativeHandle::GetAndResetNhObj() +{ + RefPtr nhObj = mNhObj; + mNhObj = new NhObj(); + return nhObj.forget(); +} + +already_AddRefed +GonkNativeHandle::GetDupNhObj() +{ + if (!IsValid()) { + return GonkNativeHandle::CreateDupNhObj(nullptr); + } + return GonkNativeHandle::CreateDupNhObj(mNhObj->mHandle); +} + +/* static */ already_AddRefed +GonkNativeHandle::CreateDupNhObj(native_handle_t* aHandle) +{ + RefPtr nhObj; + if (aHandle) { + native_handle* nativeHandle = + native_handle_create(aHandle->numFds, aHandle->numInts); + if (!nativeHandle) { + nhObj = new GonkNativeHandle::NhObj(); + return nhObj.forget(); + } + + for (int i = 0; i < aHandle->numFds; ++i) { + nativeHandle->data[i] = dup(aHandle->data[i]); + } + + memcpy(nativeHandle->data + nativeHandle->numFds, + aHandle->data + aHandle->numFds, + sizeof(int) * aHandle->numInts); + + nhObj = new GonkNativeHandle::NhObj(nativeHandle); + } else { + nhObj = new GonkNativeHandle::NhObj(); + } + return nhObj.forget(); +} + +} // namespace layers +} // namespace mozilla -- cgit v1.2.3