blob: 8758a801b8fc8664c0b5b8b3e995225280b3c88e [file] [log] [blame]
Mathias Agopiana350ff92010-08-10 17:14:02 -07001/*
2 * Copyright (C) 2010 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#ifndef ANDROID_SF_HWCOMPOSER_H
18#define ANDROID_SF_HWCOMPOSER_H
19
20#include <stdint.h>
21#include <sys/types.h>
22
23#include <EGL/egl.h>
24
25#include <hardware/hwcomposer.h>
26
Mathias Agopianc7d14e22011-08-01 16:32:21 -070027#include <utils/StrongPointer.h>
Mathias Agopian22da60c2011-09-09 00:49:11 -070028#include <utils/Vector.h>
Mathias Agopianc7d14e22011-08-01 16:32:21 -070029
Mathias Agopiana350ff92010-08-10 17:14:02 -070030namespace android {
31// ---------------------------------------------------------------------------
32
Mathias Agopian83727852010-09-23 18:13:21 -070033class String8;
Mathias Agopianc7d14e22011-08-01 16:32:21 -070034class SurfaceFlinger;
Mathias Agopian22da60c2011-09-09 00:49:11 -070035class LayerBase;
Mathias Agopian83727852010-09-23 18:13:21 -070036
Mathias Agopiana350ff92010-08-10 17:14:02 -070037class HWComposer
38{
39public:
40
Mathias Agopianc7d14e22011-08-01 16:32:21 -070041 HWComposer(const sp<SurfaceFlinger>& flinger);
Mathias Agopiana350ff92010-08-10 17:14:02 -070042 ~HWComposer();
43
44 status_t initCheck() const;
45
46 // tells the HAL what the framebuffer is
47 void setFrameBuffer(EGLDisplay dpy, EGLSurface sur);
48
49 // create a work list for numLayers layer
50 status_t createWorkList(size_t numLayers);
51
52 // Asks the HAL what it can do
53 status_t prepare() const;
54
Mathias Agopian7ee4cd52011-09-02 12:22:39 -070055 // disable hwc until next createWorkList
56 status_t disable();
57
Mathias Agopiana350ff92010-08-10 17:14:02 -070058 // commits the list
59 status_t commit() const;
60
Antti Hatalaf5f27122010-09-09 02:33:05 -070061 // release hardware resources
62 status_t release() const;
Mathias Agopiana350ff92010-08-10 17:14:02 -070063
Mathias Agopian45721772010-08-12 15:03:26 -070064 size_t getNumLayers() const;
65 hwc_layer_t* getLayers() const;
Mathias Agopiana350ff92010-08-10 17:14:02 -070066
Mathias Agopian83727852010-09-23 18:13:21 -070067 // for debugging
Mathias Agopian22da60c2011-09-09 00:49:11 -070068 void dump(String8& out, char* scratch, size_t SIZE,
69 const Vector< sp<LayerBase> >& visibleLayersSortedByZ) const;
Mathias Agopian83727852010-09-23 18:13:21 -070070
Mathias Agopiana350ff92010-08-10 17:14:02 -070071private:
Mathias Agopianc7d14e22011-08-01 16:32:21 -070072 struct cb_context {
73 hwc_procs_t procs;
74 HWComposer* hwc;
75 };
76 static void hook_invalidate(struct hwc_procs* procs);
77 void invalidate();
78
79 sp<SurfaceFlinger> mFlinger;
Mathias Agopiana350ff92010-08-10 17:14:02 -070080 hw_module_t const* mModule;
81 hwc_composer_device_t* mHwc;
82 hwc_layer_list_t* mList;
Mathias Agopian45721772010-08-12 15:03:26 -070083 size_t mCapacity;
Mathias Agopiana350ff92010-08-10 17:14:02 -070084 hwc_display_t mDpy;
85 hwc_surface_t mSur;
Mathias Agopianc7d14e22011-08-01 16:32:21 -070086 cb_context mCBContext;
Mathias Agopiana350ff92010-08-10 17:14:02 -070087};
88
89
90// ---------------------------------------------------------------------------
91}; // namespace android
92
93#endif // ANDROID_SF_HWCOMPOSER_H