Load libui.so lazily in android_native EGLImage tests.
authorMika Isojärvi <misojarvi@google.com>
Tue, 2 Feb 2016 21:13:48 +0000 (13:13 -0800)
committerMika Isojärvi <misojarvi@google.com>
Tue, 2 Feb 2016 21:13:48 +0000 (13:13 -0800)
Avoid loading libui.so during test hierarchy inflation by loading it
lazily when it's used for the first time instead.

Bug: 26929325
Change-Id: I22348d91d415beae37016ed654e36774bbb5a504

modules/egl/teglAndroidUtil.cpp

index 64cbe9b..e32c18a 100644 (file)
@@ -101,7 +101,8 @@ AndroidNativeClientBuffer::AndroidNativeClientBuffer (const LibUI& lib, GLenum f
 class AndroidNativeImageSource : public ImageSource
 {
 public:
-                                                       AndroidNativeImageSource        (GLenum format) : m_format(format) {}
+                                                       AndroidNativeImageSource        (GLenum format) : m_format(format), m_libui(DE_NULL) {}
+                                                       ~AndroidNativeImageSource       (void);
        MovePtr<ClientBuffer>   createBuffer                            (const glw::Functions&, Texture2D*) const;
        string                                  getRequiredExtension            (void) const { return "EGL_ANDROID_image_native_buffer"; }
        EGLImageKHR                             createImage                                     (const Library& egl, EGLDisplay dpy, EGLContext ctx, EGLClientBuffer clientBuffer) const;
@@ -109,9 +110,26 @@ public:
 
 protected:
        GLenum                                  m_format;
-       LibUI                                   m_libui;
+
+       const LibUI&                    getLibUI                                        (void) const;
+
+private:
+       mutable LibUI*                  m_libui;
 };
 
+AndroidNativeImageSource::~AndroidNativeImageSource (void)
+{
+       delete m_libui;
+}
+
+const LibUI& AndroidNativeImageSource::getLibUI (void) const
+{
+       if (!m_libui)
+               m_libui = new LibUI();
+
+       return *m_libui;
+}
+
 void checkStatus (status_t status)
 {
        if (status != tcu::Android::internal::OK)
@@ -120,7 +138,7 @@ void checkStatus (status_t status)
 
 MovePtr<ClientBuffer> AndroidNativeImageSource::createBuffer (const glw::Functions&, Texture2D* ref) const
 {
-       MovePtr<AndroidNativeClientBuffer>      buffer                  (new AndroidNativeClientBuffer(m_libui, m_format));
+       MovePtr<AndroidNativeClientBuffer>      buffer                  (new AndroidNativeClientBuffer(getLibUI(), m_format));
        GraphicBuffer&                                          graphicBuffer   = buffer->getGraphicBuffer();
        if (ref != DE_NULL)
        {
@@ -157,7 +175,7 @@ MovePtr<ImageSource> createAndroidNativeImageSource (GLenum format)
        {
                return MovePtr<ImageSource>(new AndroidNativeImageSource(format));
        }
-       catch (std::runtime_error& exc)
+       catch (const std::runtime_error& exc)
        {
                return createUnsupportedImageSource(string("Android native buffers unsupported: ") + exc.what(), format);
        }