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