diff options
Diffstat (limited to 'libs/surfaceflinger/GPUHardware/GPUHardware.h')
-rw-r--r-- | libs/surfaceflinger/GPUHardware/GPUHardware.h | 77 |
1 files changed, 12 insertions, 65 deletions
diff --git a/libs/surfaceflinger/GPUHardware/GPUHardware.h b/libs/surfaceflinger/GPUHardware/GPUHardware.h index 9a78b99..3354528 100644 --- a/libs/surfaceflinger/GPUHardware/GPUHardware.h +++ b/libs/surfaceflinger/GPUHardware/GPUHardware.h @@ -22,92 +22,39 @@ #include <utils/RefBase.h> #include <utils/threads.h> +#include <utils/KeyedVector.h> + +#include <ui/ISurfaceComposer.h> namespace android { // --------------------------------------------------------------------------- -class GPUHardwareInterface : public RefBase +class IGPUCallback; + +class GPUHardwareInterface : public virtual RefBase { public: virtual void revoke(int pid) = 0; virtual sp<MemoryDealer> request(int pid) = 0; - virtual status_t request(const sp<IGPUCallback>& callback, + virtual status_t request(int pid, const sp<IGPUCallback>& callback, ISurfaceComposer::gpu_info_t* gpu) = 0; virtual status_t friendlyRevoke() = 0; - virtual void unconditionalRevoke() = 0; // used for debugging only... virtual sp<SimpleBestFitAllocator> getAllocator() const = 0; virtual pid_t getOwner() const = 0; + virtual void unconditionalRevoke() = 0; }; // --------------------------------------------------------------------------- -class IMemory; -class MemoryHeapPmem; -class PMemHeap; - -class GPUHardware : public GPUHardwareInterface -{ +class GPUFactory +{ public: - GPUHardware(); - virtual ~GPUHardware(); - - virtual void revoke(int pid); - virtual sp<MemoryDealer> request(int pid); - virtual status_t request(const sp<IGPUCallback>& callback, - ISurfaceComposer::gpu_info_t* gpu); - - virtual status_t friendlyRevoke(); - virtual void unconditionalRevoke(); - - // used for debugging only... - virtual sp<SimpleBestFitAllocator> getAllocator() const; - virtual pid_t getOwner() const { return mOwner; } - -private: - enum { - NO_OWNER = -1, - SURFACE_FAILED = -2 - }; - - void requestLocked(); - void releaseLocked(bool dispose = false); - void takeBackGPULocked(); - - class GPUPart - { - public: - bool surface; - size_t reserved; - GPUPart(); - ~GPUPart(); - const sp<PMemHeapInterface>& getHeap() const; - const sp<MemoryHeapPmem>& getClientHeap() const; - bool isValid() const; - void clear(); - void set(const sp<PMemHeapInterface>& heap); - bool promote(); - sp<IMemory> map(bool clear = false); - void release(bool dispose); - private: - sp<PMemHeapInterface> mHeap; - wp<PMemHeapInterface> mHeapWeak; - sp<MemoryHeapPmem> mClientHeap; - }; - - mutable Mutex mLock; - GPUPart mHeap0; // SMI - GPUPart mHeap1; // EBI1 - GPUPart mHeapR; - sp<MemoryDealer> mAllocator; - pid_t mOwner; - sp<IGPUCallback> mCallback; - wp<SimpleBestFitAllocator> mAllocatorDebug; - - Condition mCondition; + // the gpu factory + static sp<GPUHardwareInterface> getGPU(); }; // --------------------------------------------------------------------------- |