Code drop from //branches/cupcake/...@124589
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();
 };
 
 // ---------------------------------------------------------------------------