1 /*
2  * Copyright 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #include <memory>
20 
21 #include <android-base/unique_fd.h>
22 #include <compositionengine/RenderSurface.h>
23 #include <utils/StrongPointer.h>
24 
25 struct ANativeWindow;
26 
27 namespace android {
28 
29 namespace compositionengine {
30 
31 class CompositionEngine;
32 class Display;
33 class DisplaySurface;
34 
35 struct RenderSurfaceCreationArgs;
36 
37 namespace impl {
38 
39 class RenderSurface : public compositionengine::RenderSurface {
40 public:
41     RenderSurface(const CompositionEngine&, compositionengine::Display&,
42                   const compositionengine::RenderSurfaceCreationArgs&);
43     ~RenderSurface() override;
44 
45     bool isValid() const override;
46     void initialize() override;
47     const ui::Size& getSize() const override;
isProtected()48     bool isProtected() const override { return mProtected; }
49 
50     const sp<Fence>& getClientTargetAcquireFence() const override;
51     void setBufferDataspace(ui::Dataspace) override;
52     void setBufferPixelFormat(ui::PixelFormat) override;
53     void setDisplaySize(const ui::Size&) override;
54     void setProtected(bool useProtected) override;
55     status_t beginFrame(bool mustRecompose) override;
56     void prepareFrame(bool usesClientComposition, bool usesDeviceComposition) override;
57     sp<GraphicBuffer> dequeueBuffer(base::unique_fd* bufferFence) override;
58     void queueBuffer(base::unique_fd readyFence) override;
59     void onPresentDisplayCompleted() override;
60     void flip() override;
61 
62     // Debugging
63     void dump(std::string& result) const override;
64     std::uint32_t getPageFlipCount() const override;
65 
66     // Testing
67     void setPageFlipCountForTest(std::uint32_t);
68     void setSizeForTest(const ui::Size&);
69     sp<GraphicBuffer>& mutableGraphicBufferForTest();
70     base::unique_fd& mutableBufferReadyForTest();
71 
72 private:
73     const compositionengine::CompositionEngine& mCompositionEngine;
74     const compositionengine::Display& mDisplay;
75 
76     // ANativeWindow being rendered into
77     const sp<ANativeWindow> mNativeWindow;
78     // Current buffer being rendered into
79     sp<GraphicBuffer> mGraphicBuffer;
80     const sp<DisplaySurface> mDisplaySurface;
81     ui::Size mSize;
82     bool mProtected{false};
83     std::uint32_t mPageFlipCount{0};
84 };
85 
86 std::unique_ptr<compositionengine::RenderSurface> createRenderSurface(
87         const compositionengine::CompositionEngine&, compositionengine::Display&,
88         const compositionengine::RenderSurfaceCreationArgs&);
89 
90 } // namespace impl
91 } // namespace compositionengine
92 } // namespace android
93