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