OSDN Git Service

Revert "EGL: Ensure surfaces are disconnected when destroyed"
authorPablo Ceballos <pceballos@google.com>
Mon, 25 Apr 2016 20:40:08 +0000 (20:40 +0000)
committerThe Android Automerger <android-build@google.com>
Tue, 26 Apr 2016 19:50:51 +0000 (12:50 -0700)
This reverts commit 541de498ec7356c5e4af92500cf2fb8fc707fd50.

Bug 28295465

Change-Id: If81ed4a5a73a9612579b58291c37c7830ea1f7db

opengl/libs/EGL/eglApi.cpp
opengl/libs/EGL/egl_display.cpp
opengl/libs/EGL/egl_display.h
opengl/libs/EGL/egl_object.cpp
opengl/libs/EGL/egl_object.h

index df639cd..217c821 100644 (file)
@@ -605,7 +605,6 @@ EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface)
     EGLBoolean result = s->cnx->egl.eglDestroySurface(dp->disp.dpy, s->surface);
     if (result == EGL_TRUE) {
         _s.terminate();
-        dp->removeSurface(surface);
     }
     return result;
 }
index c368bad..e335a6c 100644 (file)
@@ -90,31 +90,6 @@ bool egl_display_t::getObject(egl_object_t* object) const {
     return false;
 }
 
-void egl_display_t::addContext(egl_context_t* context) {
-    Mutex::Autolock _l(lock);
-    contexts.add(context);
-}
-
-void egl_display_t::removeContext(egl_context_t* context) {
-    Mutex::Autolock _l(lock);
-    contexts.remove(context);
-}
-
-void egl_display_t::removeSurface(EGLSurface surface) const {
-    Mutex::Autolock _l(lock);
-    for (size_t i = 0; i < contexts.size(); i++) {
-        egl_context_t* context = contexts[i];
-        if (context->read == surface) {
-            SurfaceRef _r(get_surface(context->read));
-            _r.release();
-        }
-        if (context->draw == surface) {
-            SurfaceRef _d(get_surface(context->draw));
-            _d.release();
-        }
-    }
-}
-
 EGLDisplay egl_display_t::getFromNativeDisplay(EGLNativeDisplayType disp) {
     if (uintptr_t(disp) >= NUM_DISPLAYS)
         return NULL;
index 0ede705..2d86295 100644 (file)
@@ -68,13 +68,6 @@ public:
     // add reference to this object. returns true if this is a valid object.
     bool getObject(egl_object_t* object) const;
 
-    // add context to this display's list
-    void addContext(egl_context_t* context);
-    // remove context from this display's list
-    void removeContext(egl_context_t* context);
-    // search for surface on all contexts and remove the references
-    void removeSurface(EGLSurface surface) const;
-
     // These notifications allow the display to keep track of how many window
     // surfaces exist, which it uses to decide whether to hibernate the
     // underlying EGL implementation. They can be called by any thread without
@@ -142,7 +135,6 @@ private:
     mutable Mutex                       lock, refLock;
     mutable Condition                   refCond;
             SortedVector<egl_object_t*> objects;
-            SortedVector<egl_context_t*> contexts;
             String8 mVendorString;
             String8 mVersionString;
             String8 mClientApiString;
index 8859387..918faa8 100644 (file)
@@ -91,12 +91,6 @@ egl_context_t::egl_context_t(EGLDisplay dpy, EGLContext context, EGLConfig confi
         egl_connection_t const* cnx, int version) :
     egl_object_t(get_display_nowake(dpy)), dpy(dpy), context(context),
             config(config), read(0), draw(0), cnx(cnx), version(version) {
-    get_display_nowake(dpy)->addContext(this);
-}
-
-void egl_context_t::terminate() {
-    display->removeContext(this);
-    egl_object_t::terminate();
 }
 
 void egl_context_t::onLooseCurrent() {
index 8268900..17a8304 100644 (file)
@@ -40,12 +40,11 @@ namespace android {
 class egl_display_t;
 
 class egl_object_t {
+    egl_display_t *display;
     mutable volatile int32_t count;
 
 protected:
     virtual ~egl_object_t();
-    virtual void terminate();
-    egl_display_t *display;
 
 public:
     egl_object_t(egl_display_t* display);
@@ -56,6 +55,7 @@ public:
     inline egl_display_t* getDisplay() const { return display; }
 
 private:
+    void terminate();
     static bool get(egl_display_t const* display, egl_object_t* object);
 
 public:
@@ -143,7 +143,6 @@ public:
 class egl_context_t: public egl_object_t {
 protected:
     ~egl_context_t() {}
-    void terminate() override;
 public:
     typedef egl_object_t::LocalRef<egl_context_t, EGLContext> Ref;