1501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu/* 2501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * Copyright (C) 2017 The Android Open Source Project 3501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * 4501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * Licensed under the Apache License, Version 2.0 (the "License"); 5501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * you may not use this file except in compliance with the License. 6501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * You may obtain a copy of the License at 7501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * 8501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * http://www.apache.org/licenses/LICENSE-2.0 9501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * 10501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * Unless required by applicable law or agreed to in writing, software 11501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * distributed under the License is distributed on an "AS IS" BASIS, 12501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * See the License for the specific language governing permissions and 14501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * limitations under the License. 15501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu */ 16501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 17501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu#ifndef MINIFENCE_H 18501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu#define MINIFENCE_H 19501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 20501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu#include <utils/RefBase.h> 21501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 22501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wunamespace android { 23501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 24501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu/* MiniFence is a minimal re-implementation of Fence from libui. It exists to 25501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu * avoid linking the HWC2on1Adapter to libui and satisfy Treble requirements. 26501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu */ 27501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wuclass MiniFence : public LightRefBase<MiniFence> { 28501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wupublic: 29501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu static const sp<MiniFence> NO_FENCE; 30501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 31501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu // Construct a new MiniFence object with an invalid file descriptor. 32501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu MiniFence(); 33501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 34501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu // Construct a new MiniFence object to manage a given fence file descriptor. 35501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu // When the new MiniFence object is destructed the file descriptor will be 36501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu // closed. 37501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu explicit MiniFence(int fenceFd); 38501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 39501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu // Not copyable or movable. 40501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu MiniFence(const MiniFence& rhs) = delete; 41501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu MiniFence& operator=(const MiniFence& rhs) = delete; 42501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu MiniFence(MiniFence&& rhs) = delete; 43501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu MiniFence& operator=(MiniFence&& rhs) = delete; 44501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 45501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu // Return a duplicate of the fence file descriptor. The caller is 46501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu // responsible for closing the returned file descriptor. On error, -1 will 47501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu // be returned and errno will indicate the problem. 48501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu int dup() const; 49501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 50501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wuprivate: 51501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu // Only allow instantiation using ref counting. 52501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu friend class LightRefBase<MiniFence>; 53501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu ~MiniFence(); 54501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 55501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu int mFenceFd; 56501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu 57501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu}; 58501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu} 59501cc23259ddf6955f7148bfbda1f3a82d315483Chia-I Wu#endif //MINIFENCE_H 60