blob: 896f8aaa6918791c4863f91e55852d5fe4cd4a26 [file] [log] [blame]
Lloyd Pique70d91362018-10-18 16:02:55 -07001/*
2 * Copyright 2018 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
Lloyd Pique441d5042018-10-18 16:49:51 -070019#include <memory>
20
Lloyd Pique70d91362018-10-18 16:02:55 -070021namespace android {
22
23class HWComposer;
24
Lloyd Piqueb97e04f2018-10-18 17:07:05 -070025namespace renderengine {
26class RenderEngine;
27} // namespace renderengine
28
Lloyd Pique70d91362018-10-18 16:02:55 -070029namespace compositionengine {
30
Lloyd Pique45a165a2018-10-19 11:54:47 -070031class Display;
Lloyd Piquefeb73d72018-12-04 17:23:44 -080032class Layer;
Lloyd Pique45a165a2018-10-19 11:54:47 -070033
34struct DisplayCreationArgs;
Lloyd Piquefeb73d72018-12-04 17:23:44 -080035struct LayerCreationArgs;
Lloyd Pique45a165a2018-10-19 11:54:47 -070036
Lloyd Pique70d91362018-10-18 16:02:55 -070037/**
38 * Encapsulates all the interfaces and implementation details for performing
39 * display output composition.
40 */
41class CompositionEngine {
42public:
43 virtual ~CompositionEngine();
Lloyd Pique441d5042018-10-18 16:49:51 -070044
Lloyd Pique45a165a2018-10-19 11:54:47 -070045 // Create a composition Display
46 virtual std::shared_ptr<Display> createDisplay(DisplayCreationArgs&&) = 0;
Lloyd Piquefeb73d72018-12-04 17:23:44 -080047 virtual std::shared_ptr<Layer> createLayer(LayerCreationArgs&&) = 0;
Lloyd Pique45a165a2018-10-19 11:54:47 -070048
Lloyd Pique441d5042018-10-18 16:49:51 -070049 virtual HWComposer& getHwComposer() const = 0;
50 virtual void setHwComposer(std::unique_ptr<HWComposer>) = 0;
Lloyd Piqueb97e04f2018-10-18 17:07:05 -070051
52 virtual renderengine::RenderEngine& getRenderEngine() const = 0;
53 virtual void setRenderEngine(std::unique_ptr<renderengine::RenderEngine>) = 0;
Lloyd Pique70d91362018-10-18 16:02:55 -070054};
55
56} // namespace compositionengine
57} // namespace android