144addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai/* 244addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * Copyright (C) 2018 The Android Open Source Project 344addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * 444addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * Licensed under the Apache License, Version 2.0 (the "License"); 544addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * you may not use this file except in compliance with the License. 644addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * You may obtain a copy of the License at 744addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * 844addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * http://www.apache.org/licenses/LICENSE-2.0 944addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * 1044addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * Unless required by applicable law or agreed to in writing, software 1144addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * distributed under the License is distributed on an "AS IS" BASIS, 1244addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1344addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * See the License for the specific language governing permissions and 1444addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai * limitations under the License. 1544addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai */ 1644addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 1744addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai#ifndef ANDROID_DETACHED_BUFFER_HUB_HANDLE_H 1844addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai#define ANDROID_DETACHED_BUFFER_HUB_HANDLE_H 1944addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 2044addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai#include <pdx/channel_handle.h> 2144addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 2244addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai#include <memory> 2344addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 2444addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cainamespace android { 2544addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 2644addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai// A wrapper that holds a pdx::LocalChannelHandle object. From the handle, a BufferHub buffer can be 2744addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai// created. Current implementation assumes that the underlying transport is using libpdx (thus 2844addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai// holding a pdx::LocalChannelHandle object), but future implementation can change it to a Binder 2944addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai// backend if ever needed. 3044addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Caiclass DetachedBufferHandle { 3144addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Caipublic: 3244addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai static std::unique_ptr<DetachedBufferHandle> Create(pdx::LocalChannelHandle handle) { 3344addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai return std::unique_ptr<DetachedBufferHandle>(new DetachedBufferHandle(std::move(handle))); 3444addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai } 3544addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 3644addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai // Accessors to get or take the internal pdx::LocalChannelHandle. 3744addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai pdx::LocalChannelHandle& handle() { return mHandle; } 3844addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai const pdx::LocalChannelHandle& handle() const { return mHandle; } 3944addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 4044addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai // Returns whether the DetachedBufferHandle holds a BufferHub channel. 4144addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai bool isValid() const { return mHandle.valid(); } 4244addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 4344addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Caiprivate: 4444addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai // Constructs a DetachedBufferHandle from a pdx::LocalChannelHandle. 4544addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai explicit DetachedBufferHandle(pdx::LocalChannelHandle handle) : mHandle(std::move(handle)) {} 4644addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 4744addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai pdx::LocalChannelHandle mHandle; 4844addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai}; 4944addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 5044addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai} // namespace android 5144addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai 5244addfe5d29023045784293459fab78a5899863bJiwen 'Steve' Cai#endif // ANDROID_DETACHED_BUFFER_HUB_HANDLE_H 53