DetachedBufferHandle.h revision 44addfe5d29023045784293459fab78a5899863b
196775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet/*
296775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet * Copyright (C) 2018 The Android Open Source Project
396775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet *
496775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet * Licensed under the Apache License, Version 2.0 (the "License");
596775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet * you may not use this file except in compliance with the License.
696775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet * You may obtain a copy of the License at
796775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet *
896775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet *      http://www.apache.org/licenses/LICENSE-2.0
996775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet *
1096775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet * Unless required by applicable law or agreed to in writing, software
1196775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet * distributed under the License is distributed on an "AS IS" BASIS,
1296775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1396775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet * See the License for the specific language governing permissions and
1496775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet * limitations under the License.
1596775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet */
1696775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet
173ced3cfd5b8f22b632c35f24e585c4847383b195David Gross#ifndef ANDROID_DETACHED_BUFFER_HUB_HANDLE_H
183ced3cfd5b8f22b632c35f24e585c4847383b195David Gross#define ANDROID_DETACHED_BUFFER_HUB_HANDLE_H
1996775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet
20033b8a6ce8ebd2a01ecccc6bae96d0fff8d4964eMichael Butler#include <pdx/channel_handle.h>
21707dbd2d55f5dacf78ffb3ad7c8b3f37c2e9d758Jean-Luc Brouillet
228b99bb1d98a42b67ba1c00e12c7abb3708cf7c05Jean-Luc Brouillet#include <memory>
2396811e2b1347889a25bd9686f47ca3cbf061fb1bDavid Gross
2496775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouilletnamespace android {
2596775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet
268b99bb1d98a42b67ba1c00e12c7abb3708cf7c05Jean-Luc Brouillet// A wrapper that holds a pdx::LocalChannelHandle object. From the handle, a BufferHub buffer can be
27707dbd2d55f5dacf78ffb3ad7c8b3f37c2e9d758Jean-Luc Brouillet// created. Current implementation assumes that the underlying transport is using libpdx (thus
28707dbd2d55f5dacf78ffb3ad7c8b3f37c2e9d758Jean-Luc Brouillet// holding a pdx::LocalChannelHandle object), but future implementation can change it to a Binder
29033b8a6ce8ebd2a01ecccc6bae96d0fff8d4964eMichael Butler// backend if ever needed.
30033b8a6ce8ebd2a01ecccc6bae96d0fff8d4964eMichael Butlerclass DetachedBufferHandle {
31689d892203c06c66c7bb2e374462a8434e40b75fMichael Butlerpublic:
3296775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet    static std::unique_ptr<DetachedBufferHandle> Create(pdx::LocalChannelHandle handle) {
3396775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet        return std::unique_ptr<DetachedBufferHandle>(new DetachedBufferHandle(std::move(handle)));
3496775128e3bcfdc5be51b62edc50309c83861fe8Jean-Luc Brouillet    }
3583e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
361f4381539b7e89c42336ee7cd1addb9a4c317b34David Gross    // Accessors to get or take the internal pdx::LocalChannelHandle.
378b99bb1d98a42b67ba1c00e12c7abb3708cf7c05Jean-Luc Brouillet    pdx::LocalChannelHandle& handle() { return mHandle; }
38707dbd2d55f5dacf78ffb3ad7c8b3f37c2e9d758Jean-Luc Brouillet    const pdx::LocalChannelHandle& handle() const { return mHandle; }
39b26049114bc4c64e6bea3a5d5d129fcaec8e69b6David Gross
40aba8381570d7cc4b5431d741132d6f80519201ebMichael Butler    // Returns whether the DetachedBufferHandle holds a BufferHub channel.
41707dbd2d55f5dacf78ffb3ad7c8b3f37c2e9d758Jean-Luc Brouillet    bool isValid() const { return mHandle.valid(); }
428b99bb1d98a42b67ba1c00e12c7abb3708cf7c05Jean-Luc Brouillet
438b99bb1d98a42b67ba1c00e12c7abb3708cf7c05Jean-Luc Brouilletprivate:
4462cc2758c1c2d303861e209f26bddcf4d7564b73Jean-Luc Brouillet    // Constructs a DetachedBufferHandle from a pdx::LocalChannelHandle.
4562cc2758c1c2d303861e209f26bddcf4d7564b73Jean-Luc Brouillet    explicit DetachedBufferHandle(pdx::LocalChannelHandle handle) : mHandle(std::move(handle)) {}
468b99bb1d98a42b67ba1c00e12c7abb3708cf7c05Jean-Luc Brouillet
4762cc2758c1c2d303861e209f26bddcf4d7564b73Jean-Luc Brouillet    pdx::LocalChannelHandle mHandle;
4862cc2758c1c2d303861e209f26bddcf4d7564b73Jean-Luc Brouillet};
498b99bb1d98a42b67ba1c00e12c7abb3708cf7c05Jean-Luc Brouillet
508b99bb1d98a42b67ba1c00e12c7abb3708cf7c05Jean-Luc Brouillet} // namespace android
51c4c264098a728268ad28084ea6e0263d9c1d7868David Gross
5262cc2758c1c2d303861e209f26bddcf4d7564b73Jean-Luc Brouillet#endif // ANDROID_DETACHED_BUFFER_HUB_HANDLE_H
5362cc2758c1c2d303861e209f26bddcf4d7564b73Jean-Luc Brouillet