• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2021, 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 #include <unordered_set>
21 
22 #include "include/IComposerHal.h"
23 
24 class ExynosDevice;
25 class ExynosDisplay;
26 class ExynosLayer;
27 
28 struct exynos_hwc2_device_t;
29 typedef struct exynos_hwc2_device_t ExynosHWCCtx;
30 
31 namespace aidl::android::hardware::graphics::composer3::impl {
32 
33 // Forward aidl call to Exynos HWC
34 class HalImpl : public IComposerHal {
35   public:
36     HalImpl(std::unique_ptr<ExynosDevice> device);
37     virtual ~HalImpl() = default;
38 
39     void getCapabilities(std::vector<Capability>* caps) override;
40     void dumpDebugInfo(std::string* output) override;
41     bool hasCapability(Capability cap) override;
42 
43     void registerEventCallback(EventCallback* callback) override;
44     void unregisterEventCallback() override;
45 
46     int32_t acceptDisplayChanges(int64_t display) override;
47     int32_t createLayer(int64_t display, int64_t* outLayer) override;
48     int32_t createVirtualDisplay(uint32_t width, uint32_t height, AidlPixelFormat format,
49                                  VirtualDisplay* outDisplay) override;
50     int32_t destroyLayer(int64_t display, int64_t layer) override;
51     int32_t destroyVirtualDisplay(int64_t display) override;
52     int32_t flushDisplayBrightnessChange(int64_t display) override;
53     int32_t getActiveConfig(int64_t display, int32_t* outConfig) override;
54     int32_t getColorModes(int64_t display, std::vector<ColorMode>* outModes) override;
55 
56     int32_t getDataspaceSaturationMatrix(common::Dataspace dataspace,
57                                          std::vector<float>* matrix) override;
58     int32_t getDisplayAttribute(int64_t display, int32_t config, DisplayAttribute attribute,
59                                 int32_t* outValue) override;
60     int32_t getDisplayBrightnessSupport(int64_t display, bool& outSupport) override;
61     int32_t getDisplayCapabilities(int64_t display, std::vector<DisplayCapability>* caps) override;
62     int32_t getDisplayConfigs(int64_t display, std::vector<int32_t>* configs) override;
63     int32_t getDisplayConnectionType(int64_t display, DisplayConnectionType* outType) override;
64     int32_t getDisplayIdentificationData(int64_t display, DisplayIdentification* id) override;
65     int32_t getDisplayName(int64_t display, std::string* outName) override;
66     int32_t getDisplayVsyncPeriod(int64_t display, int32_t* outVsyncPeriod) override;
67     int32_t getDisplayedContentSample(int64_t display, int64_t maxFrames, int64_t timestamp,
68                                       DisplayContentSample* samples) override;
69     int32_t getDisplayedContentSamplingAttributes(int64_t display,
70                                                   DisplayContentSamplingAttributes* attrs) override;
71     int32_t getDisplayPhysicalOrientation(int64_t display, common::Transform* orientation) override;
72     int32_t getDozeSupport(int64_t display, bool& outSupport) override;
73     int32_t getHdrCapabilities(int64_t display, HdrCapabilities* caps) override;
74     int32_t getOverlaySupport(OverlayProperties* caps) override;
75     int32_t getMaxVirtualDisplayCount(int32_t* count) override;
76     int32_t getPerFrameMetadataKeys(int64_t display,
77                                     std::vector<PerFrameMetadataKey>* keys) override;
78 
79     int32_t getReadbackBufferAttributes(int64_t display, ReadbackBufferAttributes* attrs) override;
80     int32_t getReadbackBufferFence(int64_t display,
81                                    ndk::ScopedFileDescriptor* acquireFence) override;
82     int32_t getRenderIntents(int64_t display, ColorMode mode,
83                              std::vector<RenderIntent>* intents) override;
84     int32_t getSupportedContentTypes(int64_t display, std::vector<ContentType>* types) override;
85     int32_t presentDisplay(int64_t display, ndk::ScopedFileDescriptor& fence,
86                            std::vector<int64_t>* outLayers,
87                            std::vector<ndk::ScopedFileDescriptor>* outReleaseFences) override;
88     int32_t setActiveConfig(int64_t display, int32_t config) override;
89     int32_t setActiveConfigWithConstraints(
90             int64_t display, int32_t config,
91             const VsyncPeriodChangeConstraints& vsyncPeriodChangeConstraints,
92             VsyncPeriodChangeTimeline* timeline) override;
93     int32_t setBootDisplayConfig(int64_t display, int32_t config) override;
94     int32_t clearBootDisplayConfig(int64_t display) override;
95     int32_t getPreferredBootDisplayConfig(int64_t display, int32_t* config) override;
96     int32_t getHdrConversionCapabilities(std::vector<common::HdrConversionCapability>*) override;
97     int32_t setHdrConversionStrategy(const common::HdrConversionStrategy&, common::Hdr*) override;
98     int32_t setAutoLowLatencyMode(int64_t display, bool on) override;
99     int32_t setClientTarget(int64_t display, buffer_handle_t target,
100                             const ndk::ScopedFileDescriptor& fence, common::Dataspace dataspace,
101                             const std::vector<common::Rect>& damage) override;
102     int32_t getHasClientComposition(int64_t display, bool& outHasClientComp) override;
103     int32_t setColorMode(int64_t display, ColorMode mode, RenderIntent intent) override;
104     int32_t setColorTransform(int64_t display, const std::vector<float>& matrix) override;
105     int32_t setContentType(int64_t display, ContentType contentType) override;
106     int32_t setDisplayBrightness(int64_t display, float brightness) override;
107     int32_t setDisplayedContentSamplingEnabled(int64_t display, bool enable,
108                                                FormatColorComponent componentMask,
109                                                int64_t maxFrames) override;
110     int32_t setLayerBlendMode(int64_t display, int64_t layer, common::BlendMode mode) override;
111     int32_t setLayerBuffer(int64_t display, int64_t layer, buffer_handle_t buffer,
112                            const ndk::ScopedFileDescriptor& acquireFence) override;
113     int32_t setLayerColor(int64_t display, int64_t layer, Color color) override;
114     int32_t setLayerColorTransform(int64_t display, int64_t layer,
115                                    const std::vector<float>& matrix) override;
116     int32_t setLayerCompositionType(int64_t display, int64_t layer, Composition type) override;
117     int32_t setLayerCursorPosition(int64_t display, int64_t layer, int32_t x, int32_t y) override;
118     int32_t setLayerDataspace(int64_t display, int64_t layer, common::Dataspace dataspace) override;
119     int32_t setLayerDisplayFrame(int64_t display, int64_t layer,
120                                  const common::Rect& frame) override;
121     int32_t setLayerPerFrameMetadata(int64_t display, int64_t layer,
122                             const std::vector<std::optional<PerFrameMetadata>>& metadata) override;
123     int32_t setLayerPerFrameMetadataBlobs(int64_t display, int64_t layer,
124                             const std::vector<std::optional<PerFrameMetadataBlob>>& blobs) override;
125     int32_t setLayerPlaneAlpha(int64_t display, int64_t layer, float alpha) override;
126     int32_t setLayerSidebandStream(int64_t display, int64_t layer,
127                                    buffer_handle_t stream) override;
128     int32_t setLayerSourceCrop(int64_t display, int64_t layer, const common::FRect& crop) override;
129     int32_t setLayerSurfaceDamage(int64_t display, int64_t layer,
130                                   const std::vector<std::optional<common::Rect>>& damage) override;
131     int32_t setLayerTransform(int64_t display, int64_t layer, common::Transform transform) override;
132     int32_t setLayerVisibleRegion(int64_t display, int64_t layer,
133                           const std::vector<std::optional<common::Rect>>& visible) override;
134     int32_t setLayerBrightness(int64_t display, int64_t layer, float brightness) override;
135     int32_t setLayerZOrder(int64_t display, int64_t layer, uint32_t z) override;
136     int32_t setOutputBuffer(int64_t display, buffer_handle_t buffer,
137                             const ndk::ScopedFileDescriptor& releaseFence) override;
138     int32_t setPowerMode(int64_t display, PowerMode mode) override;
139     int32_t setReadbackBuffer(int64_t display, buffer_handle_t buffer,
140                               const ndk::ScopedFileDescriptor& releaseFence) override;
141     int32_t setVsyncEnabled(int64_t display, bool enabled) override;
142     int32_t getDisplayIdleTimerSupport(int64_t display, bool& outSupport) override;
143     int32_t getDisplayMultiThreadedPresentSupport(const int64_t& display,
144                                                   bool& outSupport) override;
145     int32_t setIdleTimerEnabled(int64_t display, int32_t timeout) override;
146     int32_t getRCDLayerSupport(int64_t display, bool& outSupport) override;
147     int32_t setLayerBlockingRegion(
148             int64_t display, int64_t layer,
149             const std::vector<std::optional<common::Rect>>& blockingRegion) override;
150     int32_t validateDisplay(int64_t display, std::vector<int64_t>* outChangedLayers,
151                             std::vector<Composition>* outCompositionTypes,
152                             uint32_t* outDisplayRequestMask,
153                             std::vector<int64_t>* outRequestedLayers,
154                             std::vector<int32_t>* outRequestMasks,
155                             ClientTargetProperty* outClientTargetProperty,
156                             DimmingStage* outDimmingStage) override;
157     int32_t setExpectedPresentTime(
158             int64_t display,
159             const std::optional<ClockMonotonicTimestamp> expectedPresentTime) override;
160 
getEventCallback()161     EventCallback* getEventCallback() { return mEventCallback; }
162     int32_t setRefreshRateChangedCallbackDebugEnabled(int64_t display, bool enabled) override;
163 
164 private:
165     void initCaps();
166     int32_t getHalDisplay(int64_t display, ExynosDisplay*& halDisplay);
167     int32_t getHalLayer(int64_t display, int64_t layer, ExynosLayer*& halLayer);
168 
169     std::unique_ptr<ExynosDevice> mDevice;
170     EventCallback* mEventCallback;
171 #ifdef USES_HWC_SERVICES
172     std::unique_ptr<ExynosHWCCtx> mHwcCtx;
173 #endif
174     std::unordered_set<Capability> mCaps;
175 };
176 
177 } // namespace aidl::android::hardware::graphics::composer3::impl
178