blob: 31c9536265fdbf1c0756e3e83c1f09109005e12e [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef EMU_HWC2_MINIFENCE_H
#define EMU_HWC2_MINIFENCE_H
#include <utils/RefBase.h>
namespace android {
/* MiniFence is a minimal re-implementation of Fence from libui. It exists to
* avoid linking the HWC2on1Adapter to libui and satisfy Treble requirements.
*/
class MiniFence : public LightRefBase<MiniFence> {
public:
static const sp<MiniFence> NO_FENCE;
// Construct a new MiniFence object with an invalid file descriptor.
MiniFence();
// Construct a new MiniFence object to manage a given fence file descriptor.
// When the new MiniFence object is destructed the file descriptor will be
// closed.
explicit MiniFence(int fenceFd);
// Not copyable or movable.
MiniFence(const MiniFence& rhs) = delete;
MiniFence& operator=(const MiniFence& rhs) = delete;
MiniFence(MiniFence&& rhs) = delete;
MiniFence& operator=(MiniFence&& rhs) = delete;
// Return a duplicate of the fence file descriptor. The caller is
// responsible for closing the returned file descriptor. On error, -1 will
// be returned and errno will indicate the problem.
int dup() const;
private:
// Only allow instantiation using ref counting.
friend class LightRefBase<MiniFence>;
~MiniFence();
int mFenceFd;
};
}
#endif //EMU_HWC2_MINIFENCE_H