Loading opengl/libs/EGL/egl_display.cpp +16 −8 Original line number Original line Diff line number Diff line Loading @@ -74,7 +74,8 @@ int egl_get_init_count(EGLDisplay dpy) { return eglDisplay ? eglDisplay->getRefsCount() : 0; return eglDisplay ? eglDisplay->getRefsCount() : 0; } } egl_display_t egl_display_t::sDisplay[NUM_DISPLAYS]; std::map<EGLDisplay, std::unique_ptr<egl_display_t>> egl_display_t::displayMap; std::mutex egl_display_t::displayMapLock; egl_display_t::egl_display_t() egl_display_t::egl_display_t() : magic('_dpy'), : magic('_dpy'), Loading @@ -93,11 +94,12 @@ egl_display_t* egl_display_t::get(EGLDisplay dpy) { return nullptr; return nullptr; } } uintptr_t index = uintptr_t(dpy) - 1U; const std::lock_guard<std::mutex> lock(displayMapLock); if (index >= NUM_DISPLAYS || !sDisplay[index].isValid()) { auto search = displayMap.find(dpy); if (search == displayMap.end() || !search->second->isValid()) { return nullptr; return nullptr; } } return &sDisplay[index]; return search->second.get(); } } void egl_display_t::addObject(egl_object_t* object) { void egl_display_t::addObject(egl_object_t* object) { Loading Loading @@ -125,7 +127,7 @@ EGLDisplay egl_display_t::getFromNativeDisplay(EGLNativeDisplayType disp, const EGLAttrib* attrib_list) { const EGLAttrib* attrib_list) { if (uintptr_t(disp) >= NUM_DISPLAYS) return nullptr; if (uintptr_t(disp) >= NUM_DISPLAYS) return nullptr; return sDisplay[uintptr_t(disp)].getPlatformDisplay(disp, attrib_list); return getPlatformDisplay(disp, attrib_list); } } static EGLDisplay getPlatformDisplayAngle(EGLNativeDisplayType display, egl_connection_t* const cnx, static EGLDisplay getPlatformDisplayAngle(EGLNativeDisplayType display, egl_connection_t* const cnx, Loading Loading @@ -170,7 +172,6 @@ static EGLDisplay getPlatformDisplayAngle(EGLNativeDisplayType display, egl_conn EGLDisplay egl_display_t::getPlatformDisplay(EGLNativeDisplayType display, EGLDisplay egl_display_t::getPlatformDisplay(EGLNativeDisplayType display, const EGLAttrib* attrib_list) { const EGLAttrib* attrib_list) { std::lock_guard<std::mutex> _l(lock); ATRACE_CALL(); ATRACE_CALL(); // get our driver loader // get our driver loader Loading Loading @@ -206,13 +207,20 @@ EGLDisplay egl_display_t::getPlatformDisplay(EGLNativeDisplayType display, } } } } disp.dpy = dpy; if (dpy == EGL_NO_DISPLAY) { if (dpy == EGL_NO_DISPLAY) { loader.close(cnx); loader.close(cnx); } else { const std::lock_guard<std::mutex> lock(displayMapLock); if (displayMap.find(dpy) == displayMap.end()) { auto d = std::make_unique<egl_display_t>(); d->disp.dpy = dpy; displayMap[dpy] = std::move(d); } return dpy; } } } } return EGLDisplay(uintptr_t(display) + 1U); return nullptr; } } EGLBoolean egl_display_t::initialize(EGLint* major, EGLint* minor) { EGLBoolean egl_display_t::initialize(EGLint* major, EGLint* minor) { Loading opengl/libs/EGL/egl_display.h +6 −2 Original line number Original line Diff line number Diff line Loading @@ -23,6 +23,8 @@ #include <stdint.h> #include <stdint.h> #include <condition_variable> #include <condition_variable> #include <map> #include <memory> #include <mutex> #include <mutex> #include <string> #include <string> #include <unordered_set> #include <unordered_set> Loading @@ -40,9 +42,11 @@ bool findExtension(const char* exts, const char* name, size_t nameLen = 0); bool needsAndroidPEglMitigation(); bool needsAndroidPEglMitigation(); class EGLAPI egl_display_t { // marked as EGLAPI for testing purposes class EGLAPI egl_display_t { // marked as EGLAPI for testing purposes static egl_display_t sDisplay[NUM_DISPLAYS]; static std::map<EGLDisplay, std::unique_ptr<egl_display_t>> displayMap; static std::mutex displayMapLock; EGLDisplay getDisplay(EGLNativeDisplayType display); EGLDisplay getDisplay(EGLNativeDisplayType display); EGLDisplay getPlatformDisplay(EGLNativeDisplayType display, const EGLAttrib* attrib_list); static EGLDisplay getPlatformDisplay(EGLNativeDisplayType display, const EGLAttrib* attrib_list); void loseCurrentImpl(egl_context_t* cur_c); void loseCurrentImpl(egl_context_t* cur_c); public: public: Loading Loading
opengl/libs/EGL/egl_display.cpp +16 −8 Original line number Original line Diff line number Diff line Loading @@ -74,7 +74,8 @@ int egl_get_init_count(EGLDisplay dpy) { return eglDisplay ? eglDisplay->getRefsCount() : 0; return eglDisplay ? eglDisplay->getRefsCount() : 0; } } egl_display_t egl_display_t::sDisplay[NUM_DISPLAYS]; std::map<EGLDisplay, std::unique_ptr<egl_display_t>> egl_display_t::displayMap; std::mutex egl_display_t::displayMapLock; egl_display_t::egl_display_t() egl_display_t::egl_display_t() : magic('_dpy'), : magic('_dpy'), Loading @@ -93,11 +94,12 @@ egl_display_t* egl_display_t::get(EGLDisplay dpy) { return nullptr; return nullptr; } } uintptr_t index = uintptr_t(dpy) - 1U; const std::lock_guard<std::mutex> lock(displayMapLock); if (index >= NUM_DISPLAYS || !sDisplay[index].isValid()) { auto search = displayMap.find(dpy); if (search == displayMap.end() || !search->second->isValid()) { return nullptr; return nullptr; } } return &sDisplay[index]; return search->second.get(); } } void egl_display_t::addObject(egl_object_t* object) { void egl_display_t::addObject(egl_object_t* object) { Loading Loading @@ -125,7 +127,7 @@ EGLDisplay egl_display_t::getFromNativeDisplay(EGLNativeDisplayType disp, const EGLAttrib* attrib_list) { const EGLAttrib* attrib_list) { if (uintptr_t(disp) >= NUM_DISPLAYS) return nullptr; if (uintptr_t(disp) >= NUM_DISPLAYS) return nullptr; return sDisplay[uintptr_t(disp)].getPlatformDisplay(disp, attrib_list); return getPlatformDisplay(disp, attrib_list); } } static EGLDisplay getPlatformDisplayAngle(EGLNativeDisplayType display, egl_connection_t* const cnx, static EGLDisplay getPlatformDisplayAngle(EGLNativeDisplayType display, egl_connection_t* const cnx, Loading Loading @@ -170,7 +172,6 @@ static EGLDisplay getPlatformDisplayAngle(EGLNativeDisplayType display, egl_conn EGLDisplay egl_display_t::getPlatformDisplay(EGLNativeDisplayType display, EGLDisplay egl_display_t::getPlatformDisplay(EGLNativeDisplayType display, const EGLAttrib* attrib_list) { const EGLAttrib* attrib_list) { std::lock_guard<std::mutex> _l(lock); ATRACE_CALL(); ATRACE_CALL(); // get our driver loader // get our driver loader Loading Loading @@ -206,13 +207,20 @@ EGLDisplay egl_display_t::getPlatformDisplay(EGLNativeDisplayType display, } } } } disp.dpy = dpy; if (dpy == EGL_NO_DISPLAY) { if (dpy == EGL_NO_DISPLAY) { loader.close(cnx); loader.close(cnx); } else { const std::lock_guard<std::mutex> lock(displayMapLock); if (displayMap.find(dpy) == displayMap.end()) { auto d = std::make_unique<egl_display_t>(); d->disp.dpy = dpy; displayMap[dpy] = std::move(d); } return dpy; } } } } return EGLDisplay(uintptr_t(display) + 1U); return nullptr; } } EGLBoolean egl_display_t::initialize(EGLint* major, EGLint* minor) { EGLBoolean egl_display_t::initialize(EGLint* major, EGLint* minor) { Loading
opengl/libs/EGL/egl_display.h +6 −2 Original line number Original line Diff line number Diff line Loading @@ -23,6 +23,8 @@ #include <stdint.h> #include <stdint.h> #include <condition_variable> #include <condition_variable> #include <map> #include <memory> #include <mutex> #include <mutex> #include <string> #include <string> #include <unordered_set> #include <unordered_set> Loading @@ -40,9 +42,11 @@ bool findExtension(const char* exts, const char* name, size_t nameLen = 0); bool needsAndroidPEglMitigation(); bool needsAndroidPEglMitigation(); class EGLAPI egl_display_t { // marked as EGLAPI for testing purposes class EGLAPI egl_display_t { // marked as EGLAPI for testing purposes static egl_display_t sDisplay[NUM_DISPLAYS]; static std::map<EGLDisplay, std::unique_ptr<egl_display_t>> displayMap; static std::mutex displayMapLock; EGLDisplay getDisplay(EGLNativeDisplayType display); EGLDisplay getDisplay(EGLNativeDisplayType display); EGLDisplay getPlatformDisplay(EGLNativeDisplayType display, const EGLAttrib* attrib_list); static EGLDisplay getPlatformDisplay(EGLNativeDisplayType display, const EGLAttrib* attrib_list); void loseCurrentImpl(egl_context_t* cur_c); void loseCurrentImpl(egl_context_t* cur_c); public: public: Loading