141f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian/*
241f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian * Copyright (C) 2011 The Android Open Source Project
341f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian *
441f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
541f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian * you may not use this file except in compliance with the License.
641f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian * You may obtain a copy of the License at
741f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian *
841f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
941f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian *
1041f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian * Unless required by applicable law or agreed to in writing, software
1141f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
1241f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1341f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian * See the License for the specific language governing permissions and
1441f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian * limitations under the License.
1541f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian */
1641f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
1741f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian#ifndef ANDROID_PRIVATE_GUI_COMPOSER_SERVICE_H
1841f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian#define ANDROID_PRIVATE_GUI_COMPOSER_SERVICE_H
1941f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
2041f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian#include <stdint.h>
2141f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian#include <sys/types.h>
2241f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
2341f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian#include <utils/Singleton.h>
2441f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian#include <utils/StrongPointer.h>
2541f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
2641f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
2741f673c9b3aac0d96e41c928845c39186d565212Mathias Agopiannamespace android {
2841f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
2941f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian// ---------------------------------------------------------------------------
3041f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
3141f673c9b3aac0d96e41c928845c39186d565212Mathias Agopianclass IMemoryHeap;
3241f673c9b3aac0d96e41c928845c39186d565212Mathias Agopianclass ISurfaceComposer;
3341f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
3441f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian// ---------------------------------------------------------------------------
3541f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
366652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden// This holds our connection to the composer service (i.e. SurfaceFlinger).
376652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden// If the remote side goes away, we will re-establish the connection.
386652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden// Users of this class should not retain the value from
396652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden// getComposerService() for an extended period.
406652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden//
416652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden// (It's not clear that using Singleton is useful here anymore.)
4241f673c9b3aac0d96e41c928845c39186d565212Mathias Agopianclass ComposerService : public Singleton<ComposerService>
4341f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian{
4441f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian    sp<ISurfaceComposer> mComposerService;
456652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden    sp<IBinder::DeathRecipient> mDeathObserver;
466652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden    Mutex mLock;
476652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden
4841f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian    ComposerService();
496652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden    void connectLocked();
506652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden    void composerServiceDied();
5141f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian    friend class Singleton<ComposerService>;
5241f673c9b3aac0d96e41c928845c39186d565212Mathias Agopianpublic:
536652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden
546652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden    // Get a connection to the Composer Service.  This will block until
556652b3edcb7ef5402c05db12f477ceb23c27d6ecAndy McFadden    // a connection is established.
5641f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian    static sp<ISurfaceComposer> getComposerService();
5741f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian};
5841f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
5941f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian// ---------------------------------------------------------------------------
6041f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian}; // namespace android
6141f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian
6241f673c9b3aac0d96e41c928845c39186d565212Mathias Agopian#endif // ANDROID_PRIVATE_GUI_COMPOSER_SERVICE_H
63