xref: /aosp_15_r20/frameworks/native/services/surfaceflinger/SurfaceFlingerFactory.h (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker  * Copyright 2018 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker  *
4*38e8c45fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker  *
8*38e8c45fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker  *
10*38e8c45fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker  * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker  */
16*38e8c45fSAndroid Build Coastguard Worker 
17*38e8c45fSAndroid Build Coastguard Worker #pragma once
18*38e8c45fSAndroid Build Coastguard Worker 
19*38e8c45fSAndroid Build Coastguard Worker #include <cinttypes>
20*38e8c45fSAndroid Build Coastguard Worker #include <functional>
21*38e8c45fSAndroid Build Coastguard Worker #include <memory>
22*38e8c45fSAndroid Build Coastguard Worker #include <string>
23*38e8c45fSAndroid Build Coastguard Worker 
24*38e8c45fSAndroid Build Coastguard Worker #include <cutils/compiler.h>
25*38e8c45fSAndroid Build Coastguard Worker #include <utils/StrongPointer.h>
26*38e8c45fSAndroid Build Coastguard Worker 
27*38e8c45fSAndroid Build Coastguard Worker #include <scheduler/Fps.h>
28*38e8c45fSAndroid Build Coastguard Worker 
29*38e8c45fSAndroid Build Coastguard Worker namespace android {
30*38e8c45fSAndroid Build Coastguard Worker 
31*38e8c45fSAndroid Build Coastguard Worker typedef int32_t PixelFormat;
32*38e8c45fSAndroid Build Coastguard Worker 
33*38e8c45fSAndroid Build Coastguard Worker class BufferLayerConsumer;
34*38e8c45fSAndroid Build Coastguard Worker class DisplayDevice;
35*38e8c45fSAndroid Build Coastguard Worker class FrameTracer;
36*38e8c45fSAndroid Build Coastguard Worker class GraphicBuffer;
37*38e8c45fSAndroid Build Coastguard Worker class HWComposer;
38*38e8c45fSAndroid Build Coastguard Worker class IGraphicBufferConsumer;
39*38e8c45fSAndroid Build Coastguard Worker class IGraphicBufferProducer;
40*38e8c45fSAndroid Build Coastguard Worker class Layer;
41*38e8c45fSAndroid Build Coastguard Worker class LayerFE;
42*38e8c45fSAndroid Build Coastguard Worker class SurfaceFlinger;
43*38e8c45fSAndroid Build Coastguard Worker class TimeStats;
44*38e8c45fSAndroid Build Coastguard Worker 
45*38e8c45fSAndroid Build Coastguard Worker struct DisplayDeviceCreationArgs;
46*38e8c45fSAndroid Build Coastguard Worker 
47*38e8c45fSAndroid Build Coastguard Worker namespace compositionengine {
48*38e8c45fSAndroid Build Coastguard Worker class CompositionEngine;
49*38e8c45fSAndroid Build Coastguard Worker } // namespace compositionengine
50*38e8c45fSAndroid Build Coastguard Worker 
51*38e8c45fSAndroid Build Coastguard Worker namespace scheduler {
52*38e8c45fSAndroid Build Coastguard Worker class VsyncConfiguration;
53*38e8c45fSAndroid Build Coastguard Worker class VsyncController;
54*38e8c45fSAndroid Build Coastguard Worker } // namespace scheduler
55*38e8c45fSAndroid Build Coastguard Worker 
56*38e8c45fSAndroid Build Coastguard Worker namespace frametimeline {
57*38e8c45fSAndroid Build Coastguard Worker class FrameTimeline;
58*38e8c45fSAndroid Build Coastguard Worker } // namespace frametimeline
59*38e8c45fSAndroid Build Coastguard Worker 
60*38e8c45fSAndroid Build Coastguard Worker namespace surfaceflinger {
61*38e8c45fSAndroid Build Coastguard Worker 
62*38e8c45fSAndroid Build Coastguard Worker struct LayerCreationArgs;
63*38e8c45fSAndroid Build Coastguard Worker class NativeWindowSurface;
64*38e8c45fSAndroid Build Coastguard Worker 
65*38e8c45fSAndroid Build Coastguard Worker // The interface that SurfaceFlinger uses to create all of the implementations
66*38e8c45fSAndroid Build Coastguard Worker // of each interface.
67*38e8c45fSAndroid Build Coastguard Worker class Factory {
68*38e8c45fSAndroid Build Coastguard Worker public:
69*38e8c45fSAndroid Build Coastguard Worker     virtual std::unique_ptr<HWComposer> createHWComposer(const std::string& serviceName) = 0;
70*38e8c45fSAndroid Build Coastguard Worker     virtual std::unique_ptr<scheduler::VsyncConfiguration> createVsyncConfiguration(
71*38e8c45fSAndroid Build Coastguard Worker             Fps currentRefreshRate) = 0;
72*38e8c45fSAndroid Build Coastguard Worker 
73*38e8c45fSAndroid Build Coastguard Worker     virtual sp<DisplayDevice> createDisplayDevice(DisplayDeviceCreationArgs&) = 0;
74*38e8c45fSAndroid Build Coastguard Worker     virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t width, uint32_t height,
75*38e8c45fSAndroid Build Coastguard Worker                                                   PixelFormat format, uint32_t layerCount,
76*38e8c45fSAndroid Build Coastguard Worker                                                   uint64_t usage, std::string requestorName) = 0;
77*38e8c45fSAndroid Build Coastguard Worker     virtual void createBufferQueue(sp<IGraphicBufferProducer>* outProducer,
78*38e8c45fSAndroid Build Coastguard Worker                                    sp<IGraphicBufferConsumer>* outConsumer,
79*38e8c45fSAndroid Build Coastguard Worker                                    bool consumerIsSurfaceFlinger) = 0;
80*38e8c45fSAndroid Build Coastguard Worker 
81*38e8c45fSAndroid Build Coastguard Worker     virtual std::unique_ptr<surfaceflinger::NativeWindowSurface> createNativeWindowSurface(
82*38e8c45fSAndroid Build Coastguard Worker             const sp<IGraphicBufferProducer>&) = 0;
83*38e8c45fSAndroid Build Coastguard Worker 
84*38e8c45fSAndroid Build Coastguard Worker     virtual std::unique_ptr<compositionengine::CompositionEngine> createCompositionEngine() = 0;
85*38e8c45fSAndroid Build Coastguard Worker 
86*38e8c45fSAndroid Build Coastguard Worker     virtual sp<Layer> createBufferStateLayer(const LayerCreationArgs& args) = 0;
87*38e8c45fSAndroid Build Coastguard Worker     virtual sp<Layer> createEffectLayer(const LayerCreationArgs& args) = 0;
88*38e8c45fSAndroid Build Coastguard Worker     virtual sp<LayerFE> createLayerFE(const std::string& layerName, const Layer* owner) = 0;
89*38e8c45fSAndroid Build Coastguard Worker     virtual std::unique_ptr<FrameTracer> createFrameTracer() = 0;
90*38e8c45fSAndroid Build Coastguard Worker     virtual std::unique_ptr<frametimeline::FrameTimeline> createFrameTimeline(
91*38e8c45fSAndroid Build Coastguard Worker             std::shared_ptr<TimeStats> timeStats, pid_t surfaceFlingerPid) = 0;
92*38e8c45fSAndroid Build Coastguard Worker 
93*38e8c45fSAndroid Build Coastguard Worker protected:
94*38e8c45fSAndroid Build Coastguard Worker     ~Factory() = default;
95*38e8c45fSAndroid Build Coastguard Worker };
96*38e8c45fSAndroid Build Coastguard Worker 
97*38e8c45fSAndroid Build Coastguard Worker ANDROID_API sp<SurfaceFlinger> createSurfaceFlinger();
98*38e8c45fSAndroid Build Coastguard Worker 
99*38e8c45fSAndroid Build Coastguard Worker } // namespace surfaceflinger
100*38e8c45fSAndroid Build Coastguard Worker } // namespace android
101