19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_SURFACE_FLINGER_H
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_SURFACE_FLINGER_H
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h>
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h>
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/SortedVector.h>
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/KeyedVector.h>
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/threads.h>
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Atomic.h>
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Errors.h>
281473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian#include <utils/RefBase.h>
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian#include <binder/IMemory.h>
31151e859e0fc3a930bdf6d270d275e69e9eba0cbfMathias Agopian#include <binder/Permission.h>
32151e859e0fc3a930bdf6d270d275e69e9eba0cbfMathias Agopian
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/PixelFormat.h>
34000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/ISurfaceComposer.h>
35000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/ISurfaceFlingerClient.h>
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Barrier.h"
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Layer.h"
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Tokenizer.h"
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
416ead5d9f140529edfb744584fa5427b84b4dc13aMathias Agopian#include "MessageQueue.h"
426ead5d9f140529edfb744584fa5427b84b4dc13aMathias Agopian
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct copybit_device_t;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct overlay_device_t;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Client;
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass BClient;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass DisplayHardware;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass FreezeLock;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Layer;
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LayerBuffer;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef int32_t ClientID;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define LIKELY( exp )       (__builtin_expect( (exp) != 0, true  ))
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define UNLIKELY( exp )     (__builtin_expect( (exp) != 0, false ))
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
646edf5af578c1ab1fcd44b7c08ca371456e4b7430Mathias Agopianclass Client : public RefBase
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Client(ClientID cid, const sp<SurfaceFlinger>& flinger);
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ~Client();
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int32_t                 generateId(int pid);
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void                    free(int32_t id);
721473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian            status_t                bindLayer(const sp<LayerBaseClient>& layer, int32_t id);
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    inline  bool                    isValid(int32_t i) const;
751473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    sp<LayerBaseClient>             getLayerUser(int32_t i) const;
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void                            dump(const char* what);
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
78d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian    const Vector< wp<LayerBaseClient> >& getLayers() const {
79d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian        return mLayers;
80d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian    }
81d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian
82d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian    const sp<IMemoryHeap>& getControlBlockMemory() const {
83d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian        return mCblkHeap;
84d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian    }
85d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // pointer to this client's control block
879779b221e999583ff89e0dfc40e56398737adbb3Mathias Agopian    SharedClient*           ctrlblk;
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ClientID                cid;
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
92d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian    int getClientPid() const { return mPid; }
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
941473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    int                             mPid;
951473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    uint32_t                        mBitmap;
961473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    SortedVector<uint8_t>           mInUse;
971473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    Vector< wp<LayerBaseClient> >   mLayers;
98d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian    sp<IMemoryHeap>                 mCblkHeap;
991473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    sp<SurfaceFlinger>              mFlinger;
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass GraphicPlane
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static status_t orientationToTransfrom(int orientation, int w, int h,
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Transform* tr);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                GraphicPlane();
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                ~GraphicPlane();
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        bool                    initialized() const;
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        void                    setDisplayHardware(DisplayHardware *);
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        status_t                setOrientation(int orientation);
1173552f53c8370ced8680951f4ac811a126da02b0eMathias Agopian        int                     getOrientation() const { return mOrientation; }
11866c77a5b42517b15c933431e12445b856d804ce5Mathias Agopian        int                     getWidth() const;
11966c77a5b42517b15c933431e12445b856d804ce5Mathias Agopian        int                     getHeight() const;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const DisplayHardware&  displayHardware() const;
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const Transform&        transform() const;
1231473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        EGLDisplay              getEGLDisplay() const;
1241473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                GraphicPlane(const GraphicPlane&);
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        GraphicPlane            operator = (const GraphicPlane&);
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        DisplayHardware*        mHw;
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Transform               mGlobalTransform;
13166c77a5b42517b15c933431e12445b856d804ce5Mathias Agopian        Transform               mDisplayTransform;
1323552f53c8370ced8680951f4ac811a126da02b0eMathias Agopian        int                     mOrientation;
13366c77a5b42517b15c933431e12445b856d804ce5Mathias Agopian        float                   mDisplayWidth;
13466c77a5b42517b15c933431e12445b856d804ce5Mathias Agopian        float                   mDisplayHeight;
13566c77a5b42517b15c933431e12445b856d804ce5Mathias Agopian        int                     mWidth;
13666c77a5b42517b15c933431e12445b856d804ce5Mathias Agopian        int                     mHeight;
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum {
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    eTransactionNeeded      = 0x01,
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    eTraversalNeeded        = 0x02
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SurfaceFlinger : public BnSurfaceComposer, protected Thread
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static void instantiate();
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static void shutdown();
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    SurfaceFlinger();
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual         ~SurfaceFlinger();
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void    init();
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t onTransact(
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags);
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t dump(int fd, const Vector<String16>& args);
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ISurfaceComposer interface
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual sp<ISurfaceFlingerClient>   createConnection();
163d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian    virtual sp<IMemoryHeap>             getCblk() const;
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void                        bootFinished();
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void                        openGlobalTransaction();
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void                        closeGlobalTransaction();
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t                    freezeDisplay(DisplayID dpy, uint32_t flags);
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t                    unfreezeDisplay(DisplayID dpy, uint32_t flags);
169eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian    virtual int                         setOrientation(DisplayID dpy, int orientation, uint32_t flags);
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void                        signal() const;
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void                        screenReleased(DisplayID dpy);
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void                        screenAcquired(DisplayID dpy);
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            overlay_control_device_t* getOverlayEngine() const;
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1781473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    status_t removeLayer(const sp<LayerBase>& layer);
1791473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    status_t addLayer(const sp<LayerBase>& layer);
1801473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    status_t invalidateLayerVisibility(const sp<LayerBase>& layer);
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    friend class BClient;
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    friend class LayerBase;
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    friend class LayerBuffer;
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    friend class LayerBaseClient;
18794aadce3a266fc63c2ae81e67c847a89c4961ef4Mathias Agopian    friend class LayerBaseClient::Surface;
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    friend class Layer;
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    friend class LayerBlur;
1909cc88529e4cbf54df3eed968666472d3fa658d13Mathias Agopian    friend class LayerDim;
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1925d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian    sp<ISurface> createSurface(ClientID client, int pid, const String8& name,
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ISurfaceFlingerClient::surface_data_t* params,
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            DisplayID display, uint32_t w, uint32_t h, PixelFormat format,
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            uint32_t flags);
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1971473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    sp<LayerBaseClient> createNormalSurfaceLocked(
1986edf5af578c1ab1fcd44b7c08ca371456e4b7430Mathias Agopian            const sp<Client>& client, DisplayID display,
19918b6b49ea5235fb6c0802db9a0cc2c6dd20646cbMathias Agopian            int32_t id, uint32_t w, uint32_t h, uint32_t flags,
20018b6b49ea5235fb6c0802db9a0cc2c6dd20646cbMathias Agopian            PixelFormat& format);
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2021473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    sp<LayerBaseClient> createBlurSurfaceLocked(
2036edf5af578c1ab1fcd44b7c08ca371456e4b7430Mathias Agopian            const sp<Client>& client, DisplayID display,
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int32_t id, uint32_t w, uint32_t h, uint32_t flags);
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2061473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    sp<LayerBaseClient> createDimSurfaceLocked(
2076edf5af578c1ab1fcd44b7c08ca371456e4b7430Mathias Agopian            const sp<Client>& client, DisplayID display,
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int32_t id, uint32_t w, uint32_t h, uint32_t flags);
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2101473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    sp<LayerBaseClient> createPushBuffersSurfaceLocked(
2116edf5af578c1ab1fcd44b7c08ca371456e4b7430Mathias Agopian            const sp<Client>& client, DisplayID display,
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int32_t id, uint32_t w, uint32_t h, uint32_t flags);
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2146cf0db228ca275dfcda57d79c55e5fa306809632Mathias Agopian    status_t removeSurface(SurfaceID surface_id);
2156cf0db228ca275dfcda57d79c55e5fa306809632Mathias Agopian    status_t destroySurface(const sp<LayerBaseClient>& layer);
2161473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    status_t setClientState(ClientID cid, int32_t count, const layer_state_t* states);
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    class LayerVector {
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public:
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        inline              LayerVector() { }
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            LayerVector(const LayerVector&);
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        inline size_t       size() const { return layers.size(); }
2241473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        inline sp<LayerBase> const* array() const { return layers.array(); }
2251473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        ssize_t             add(const sp<LayerBase>&, Vector< sp<LayerBase> >::compar_t);
2261473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        ssize_t             remove(const sp<LayerBase>&);
2271473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        ssize_t             reorder(const sp<LayerBase>&, Vector< sp<LayerBase> >::compar_t);
2281473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        ssize_t             indexOf(const sp<LayerBase>& key, size_t guess=0) const;
2291473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        inline sp<LayerBase> operator [] (size_t i) const { return layers[i]; }
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private:
2311473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        KeyedVector< sp<LayerBase> , size_t> lookup;
2321473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        Vector< sp<LayerBase> >              layers;
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    struct State {
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        State() {
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            orientation = ISurfaceComposer::eOrientationDefault;
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            freezeDisplay = 0;
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        LayerVector     layersSortedByZ;
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        uint8_t         orientation;
242eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian        uint8_t         orientationType;
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        uint8_t         freezeDisplay;
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual bool        threadLoop();
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    readyToRun();
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void        onFirstRef();
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25008c19beee4c8a2fce3f9d2baa78c9d436bedf65dAndy McFaddenpublic:     // hack to work around gcc 4.0.3 bug
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const GraphicPlane&     graphicPlane(int dpy) const;
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          GraphicPlane&     graphicPlane(int dpy);
25308c19beee4c8a2fce3f9d2baa78c9d436bedf65dAndy McFaddenprivate:
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        waitForEvent();
256fa0a4bde3fa520aa10de88239af04b45a3e28da0Andy McFaddenpublic:     // hack to work around gcc 4.0.3 bug
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        signalEvent();
258fa0a4bde3fa520aa10de88239af04b45a3e28da0Andy McFaddenprivate:
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        signalDelayedEvent(nsecs_t delay);
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        handleConsoleEvents();
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        handleTransaction(uint32_t transactionFlags);
2632d5ee25556cb363700dc5127f88ca05fb9493e14Mathias Agopian            void        handleTransactionLocked(
2642d5ee25556cb363700dc5127f88ca05fb9493e14Mathias Agopian                            uint32_t transactionFlags,
2652d5ee25556cb363700dc5127f88ca05fb9493e14Mathias Agopian                            Vector< sp<LayerBase> >& ditchedLayers);
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        computeVisibleRegions(
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            LayerVector& currentLayers,
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            Region& dirtyRegion,
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            Region& wormholeRegion);
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        handlePageFlip();
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            bool        lockPageFlip(const LayerVector& currentLayers);
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        unlockPageFlip(const LayerVector& currentLayers);
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        handleRepaint();
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        postFramebuffer();
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        composeSurfaces(const Region& dirty);
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        unlockClients();
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        destroyConnection(ClientID cid);
2821473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian            sp<LayerBaseClient> getLayerUser_l(SurfaceID index) const;
2831473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian            status_t    addLayer_l(const sp<LayerBase>& layer);
2841473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian            status_t    removeLayer_l(const sp<LayerBase>& layer);
2856cf0db228ca275dfcda57d79c55e5fa306809632Mathias Agopian            status_t    purgatorizeLayer_l(const sp<LayerBase>& layer);
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        free_resources_l();
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            uint32_t    getTransactionFlags(uint32_t flags);
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            uint32_t    setTransactionFlags(uint32_t flags, nsecs_t delay = 0);
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        commitTransaction();
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            friend class FreezeLock;
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sp<FreezeLock> getFreezeLock() const;
2950e44976aa425b0c2a0dcf6ec8db918e6a6f51b1aMathias Agopian            inline void incFreezeCount() {
2960e44976aa425b0c2a0dcf6ec8db918e6a6f51b1aMathias Agopian                if (mFreezeCount == 0)
2970e44976aa425b0c2a0dcf6ec8db918e6a6f51b1aMathias Agopian                    mFreezeDisplayTime = 0;
2980e44976aa425b0c2a0dcf6ec8db918e6a6f51b1aMathias Agopian                mFreezeCount++;
2990e44976aa425b0c2a0dcf6ec8db918e6a6f51b1aMathias Agopian            }
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            inline void decFreezeCount() { if (mFreezeCount > 0) mFreezeCount--; }
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            inline bool hasFreezeRequest() const { return mFreezeDisplay; }
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            inline bool isFrozen() const {
3036950e428feaccc8164b989ef64e771a99948797aMathias Agopian                return (mFreezeDisplay || mFreezeCount>0) && mBootFinished;
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        debugFlashRegions();
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        debugShowFPS() const;
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        drawWormhole() const;
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3116ead5d9f140529edfb744584fa5427b84b4dc13aMathias Agopian
3126ead5d9f140529edfb744584fa5427b84b4dc13aMathias Agopian    mutable     MessageQueue    mEventQueue;
3136ead5d9f140529edfb744584fa5427b84b4dc13aMathias Agopian
3146ead5d9f140529edfb744584fa5427b84b4dc13aMathias Agopian
3156ead5d9f140529edfb744584fa5427b84b4dc13aMathias Agopian
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // access must be protected by mStateLock
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    mutable     Mutex                   mStateLock;
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                State                   mCurrentState;
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                State                   mDrawingState;
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    volatile    int32_t                 mTransactionFlags;
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    volatile    int32_t                 mTransactionCount;
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Condition               mTransactionCV;
3239779b221e999583ff89e0dfc40e56398737adbb3Mathias Agopian                bool                    mResizeTransationPending;
3246cf0db228ca275dfcda57d79c55e5fa306809632Mathias Agopian
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // protected by mStateLock (but we could use another lock)
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Tokenizer                               mTokens;
3276edf5af578c1ab1fcd44b7c08ca371456e4b7430Mathias Agopian                DefaultKeyedVector<ClientID, sp<Client> >   mClientsMap;
3281473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian                DefaultKeyedVector<SurfaceID, sp<LayerBaseClient> >   mLayerMap;
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                GraphicPlane                            mGraphicPlanes[1];
3301473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian                bool                                    mLayersRemoved;
3316edf5af578c1ab1fcd44b7c08ca371456e4b7430Mathias Agopian                Vector< sp<Client> >                    mDisconnectedClients;
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // constant members (no synchronization needed for access)
334d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian                sp<IMemoryHeap>             mServerHeap;
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                surface_flinger_cblk_t*     mServerCblk;
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                GLuint                      mWormholeTexName;
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                nsecs_t                     mBootTime;
338151e859e0fc3a930bdf6d270d275e69e9eba0cbfMathias Agopian                Permission                  mHardwareTest;
339151e859e0fc3a930bdf6d270d275e69e9eba0cbfMathias Agopian                Permission                  mAccessSurfaceFlinger;
340151e859e0fc3a930bdf6d270d275e69e9eba0cbfMathias Agopian                Permission                  mDump;
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // Can only accessed from the main thread, these members
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // don't need synchronization
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Region                      mDirtyRegion;
34512cedff50ca229a5d025e1011f1518c32e858138Mathias Agopian                Region                      mDirtyRegionRemovedLayer;
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Region                      mInvalidRegion;
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Region                      mWormholeRegion;
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                bool                        mVisibleRegionsDirty;
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                bool                        mDeferReleaseConsole;
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                bool                        mFreezeDisplay;
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int32_t                     mFreezeCount;
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                nsecs_t                     mFreezeDisplayTime;
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // don't use a lock for these, we don't care
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int                         mDebugRegion;
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int                         mDebugBackground;
357a8d49178f94e025be8be00460739315b9c273e4cMathias Agopian                volatile nsecs_t            mDebugInSwapBuffers;
358a8d49178f94e025be8be00460739315b9c273e4cMathias Agopian                nsecs_t                     mLastSwapBufferTime;
359a8d49178f94e025be8be00460739315b9c273e4cMathias Agopian                volatile nsecs_t            mDebugInTransaction;
360a8d49178f94e025be8be00460739315b9c273e4cMathias Agopian                nsecs_t                     mLastTransactionTime;
3616950e428feaccc8164b989ef64e771a99948797aMathias Agopian                bool                        mBootFinished;
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // these are thread safe
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    mutable     Barrier                     mReadyToRunBarrier;
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // atomic variables
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                enum {
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    eConsoleReleased = 1,
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    eConsoleAcquired = 2
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                };
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   volatile     int32_t                     mConsoleSignals;
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   // only written in the main thread, only read in other threads
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   volatile     int32_t                     mSecureFrameBuffer;
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass FreezeLock : public LightRefBase<FreezeLock> {
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SurfaceFlinger* mFlinger;
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    FreezeLock(SurfaceFlinger* flinger)
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        : mFlinger(flinger) {
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mFlinger->incFreezeCount();
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ~FreezeLock() {
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mFlinger->decFreezeCount();
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass BClient : public BnSurfaceFlingerClient
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BClient(SurfaceFlinger *flinger, ClientID cid,
397d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian            const sp<IMemoryHeap>& cblk);
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ~BClient();
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ISurfaceFlingerClient interface
401d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian    virtual sp<IMemoryHeap> getControlBlock() const;
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual sp<ISurface> createSurface(
4045d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian            surface_data_t* params, int pid, const String8& name,
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            DisplayID display, uint32_t w, uint32_t h,PixelFormat format,
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            uint32_t flags);
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t destroySurface(SurfaceID surfaceId);
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t setState(int32_t count, const layer_state_t* states);
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ClientID            mId;
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SurfaceFlinger*     mFlinger;
414d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian    sp<IMemoryHeap>     mCblk;
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // ANDROID_SURFACE_FLINGER_H
421