Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6786c92 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "SF transactions are now O(1) wrt IPC instead of O(N)."

parents ac7c11cf 698c0873
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
namespace android {

class Parcel;
class ISurfaceComposerClient;

struct layer_state_t {

@@ -68,6 +69,13 @@ struct layer_state_t {
            Region          transparentRegion;
};

struct ComposerState {
    sp<ISurfaceComposerClient> client;
    layer_state_t state;
    status_t    write(Parcel& output) const;
    status_t    read(const Parcel& input);
};

}; // namespace android

#endif // ANDROID_SF_LAYER_STATE_H
+3 −4
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ namespace android {
// ----------------------------------------------------------------------------

class IMemoryHeap;
class ComposerState;

class ISurfaceComposer : public IInterface
{
@@ -105,8 +106,7 @@ public:
    virtual sp<IMemoryHeap> getCblk() const = 0;

    /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
    virtual void openGlobalTransaction() = 0;
    virtual void closeGlobalTransaction() = 0;
    virtual void setTransactionState(const Vector<ComposerState>& state) = 0;

    /* [un]freeze display. requires ACCESS_SURFACE_FLINGER permission */
    virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags) = 0;
@@ -149,8 +149,7 @@ public:
        CREATE_CONNECTION,
        CREATE_GRAPHIC_BUFFER_ALLOC,
        GET_CBLK,
        OPEN_GLOBAL_TRANSACTION,
        CLOSE_GLOBAL_TRANSACTION,
        SET_TRANSACTION_STATE,
        SET_ORIENTATION,
        FREEZE_DISPLAY,
        UNFREEZE_DISPLAY,
+0 −7
Original line number Diff line number Diff line
@@ -37,8 +37,6 @@ typedef int32_t DisplayID;

// ----------------------------------------------------------------------------

class layer_state_t;

class ISurfaceComposerClient : public IInterface
{
public:
@@ -69,11 +67,6 @@ public:
     * Requires ACCESS_SURFACE_FLINGER permission
     */
    virtual status_t    destroySurface(SurfaceID sid) = 0;

    /*
     * Requires ACCESS_SURFACE_FLINGER permission
     */
    virtual status_t    setState(int32_t count, const layer_state_t* states) = 0;
};

// ----------------------------------------------------------------------------
+9 −17
Original line number Diff line number Diff line
@@ -37,10 +37,12 @@ namespace android {
// ---------------------------------------------------------------------------

class DisplayInfo;
class Composer;
class IMemoryHeap;
class ISurfaceComposer;
class Region;
class surface_flinger_cblk_t;
struct layer_state_t;

// ---------------------------------------------------------------------------

@@ -59,8 +61,11 @@ public:

// ---------------------------------------------------------------------------

class Composer;

class SurfaceComposerClient : public RefBase
{
    friend class Composer;
public:    
                SurfaceComposerClient();
    virtual     ~SurfaceComposerClient();
@@ -101,13 +106,7 @@ public:
    // All composer parameters must be changed within a transaction
    // several surfaces can be updated in one transaction, all changes are
    // committed at once when the transaction is closed.
    // CloseTransaction() usually requires an IPC with the server.
    
    //! Open a composer transaction
    status_t    openTransaction();

    //! commit the transaction
    status_t    closeTransaction();
    // closeGlobalTransaction() usually requires an IPC with the server.

    //! Open a composer transaction on all active SurfaceComposerClients.
    static void openGlobalTransaction();
@@ -152,19 +151,12 @@ public:

private:
    virtual void onFirstRef();
    inline layer_state_t*   get_state_l(SurfaceID id);
    layer_state_t*          lockLayerState(SurfaceID id);
    inline void             unlockLayerState();
    Composer& getComposer();

    mutable     Mutex                       mLock;
                SortedVector<layer_state_t>         mStates;
                int32_t                             mTransactionOpen;
                layer_state_t*                      mPrebuiltLayerState;

                // these don't need to be protected because they never change
                // after assignment
                status_t                    mStatus;
                sp<ISurfaceComposerClient>  mClient;
                Composer&                   mComposer;
};

// ---------------------------------------------------------------------------
+2 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ namespace android {
template <class TYPE>
class SortedVector : private SortedVectorImpl
{
    friend class Vector<TYPE>;

public:
            typedef TYPE    value_type;
    
Loading