To get MaxTextureSize by using glGetIntegerv not by using environment variable 82/206382/16
authorSeungho, Baek <sbsh.baek@samsung.com>
Fri, 17 May 2019 06:52:29 +0000 (15:52 +0900)
committerSeungho, Baek <sbsh.baek@samsung.com>
Tue, 13 Aug 2019 04:13:20 +0000 (13:13 +0900)
- Save MaxTextureSize in the gl-implementation after Context MakeCurrent
- Get it to the ImageLoader
- Use ConditionalWait to sync between two threads at the first time the DALi app is launching
- Save the MaxTextureSize that is supported at the GPU to a configuration file.
- After second launching of any DALi app, Adaptor read the configuration file without waiting.

Change-Id: I0d9bef5f59086c49c9d44ed6efdb1ae849c6f361
Signed-off-by: Seungho, Baek <sbsh.baek@samsung.com>
.gitignore
build/tizen/adaptor/Makefile.am
build/tizen/adaptor/configure.ac
build/tizen/adaptor/system-cache-path.in [new file with mode: 0644]
dali/internal/adaptor-framework/generic/file-stream-impl-generic.cpp
dali/internal/adaptor/common/adaptor-impl.cpp
dali/internal/adaptor/common/combined-update-render-controller.cpp
dali/internal/adaptor/file.list
dali/internal/graphics/gles/gl-implementation.h
dali/internal/imaging/common/image-loader.cpp
dali/internal/imaging/common/image-loader.h

index 8384ac860e2b0222c90c6dfaabf03e2c26774651..3480ca9db57e2b4f92d531cd1afe4cf32abada09 100644 (file)
@@ -38,3 +38,4 @@ tags
 /debugfiles.list
 /debuglinks.list
 /debugsources.list
+/dali/internal/adaptor/common/system-cache-path.cpp
index e5cbc8e0bd1ac33c912abeb8f71b6fa7409d0a9b..017e16d41728f82ca9580c92eb4445c690d2cb28 100644 (file)
@@ -68,7 +68,8 @@ LIBDALI_ADAPTOR_LA_SOURCES = \
                   $(adaptor_window_system_ubuntu_x11_src_files) \
                   $(devel_api_text_abstraction_src_files) \
                   $(static_libraries_glyphy_src_files) \
-                  $(static_libraries_libunibreak_src_files)
+                  $(static_libraries_libunibreak_src_files) \
+                  $(adaptor_dali_src_file)
 
 if ENABLE_NETWORK_LOGGING
 LIBDALI_ADAPTOR_LA_SOURCES += \
@@ -125,7 +126,8 @@ LIBDALI_ADAPTOR_LA_SOURCES = \
                   $(adaptor_thread_common_src_files) \
                   $(devel_api_text_abstraction_src_files) \
                   $(static_libraries_glyphy_src_files) \
-                  $(static_libraries_libunibreak_src_files)
+                  $(static_libraries_libunibreak_src_files) \
+                  $(adaptor_dali_src_file)
 
 if ECORE_WAYLAND2
 LIBDALI_ADAPTOR_LA_SOURCES += \
@@ -191,7 +193,8 @@ LIBDALI_ADAPTOR_LA_SOURCES = \
                   $(adaptor_thread_common_src_files) \
                   $(devel_api_text_abstraction_src_files) \
                   $(static_libraries_glyphy_src_files) \
-                  $(static_libraries_libunibreak_src_files)
+                  $(static_libraries_libunibreak_src_files) \
+                  $(adaptor_dali_src_file)
 
 if ECORE_WAYLAND2
 LIBDALI_ADAPTOR_LA_SOURCES += \
@@ -256,7 +259,8 @@ LIBDALI_ADAPTOR_LA_SOURCES = \
                   $(adaptor_thread_common_src_files) \
                   $(devel_api_text_abstraction_src_files) \
                   $(static_libraries_glyphy_src_files) \
-                  $(static_libraries_libunibreak_src_files)
+                  $(static_libraries_libunibreak_src_files) \
+                  $(adaptor_dali_src_file)
 
 if ECORE_WAYLAND2
 LIBDALI_ADAPTOR_LA_SOURCES += \
@@ -320,7 +324,8 @@ LIBDALI_ADAPTOR_LA_SOURCES = \
                   $(adaptor_thread_common_src_files) \
                   $(devel_api_text_abstraction_src_files) \
                   $(static_libraries_glyphy_src_files) \
-                  $(static_libraries_libunibreak_src_files)
+                  $(static_libraries_libunibreak_src_files) \
+                  $(adaptor_dali_src_file)
 
 if ECORE_WAYLAND2
 LIBDALI_ADAPTOR_LA_SOURCES += \
@@ -387,7 +392,8 @@ LIBDALI_ADAPTOR_LA_SOURCES = \
                   $(adaptor_thread_common_src_files) \
                   $(devel_api_text_abstraction_src_files) \
                   $(static_libraries_glyphy_src_files) \
-                  $(static_libraries_libunibreak_src_files)
+                  $(static_libraries_libunibreak_src_files) \
+                  $(adaptor_dali_src_file)
 
 if ECORE_WAYLAND2
 LIBDALI_ADAPTOR_LA_SOURCES += \
@@ -409,7 +415,6 @@ endif
 
 endif
 
-
 # Package doc
 package_doxy_dir = ../../../doc
 include ../../../doc/file.list
index a2a542bf002525cf7349ab3ef9a1b28d14ee5f9b..ae20dd28ba85a1cd232a355a2a9a7039c8ed1a1d 100644 (file)
@@ -312,6 +312,13 @@ if test x$FONT_CONFIGURATION_FILE != x; then
   fontConfigurationFile=$FONT_CONFIGURATION_FILE
 fi
 
+if test "x$enable_profile" = "xUBUNTU"; then
+  cachePath=$HOME
+else
+  cachePath="/home/owner"
+fi # ubuntu profile test
+
+AC_SUBST(cachePath)
 AC_SUBST(dataReadWriteDir)
 AC_SUBST(dataReadOnlyDir)
 AC_SUBST(DALI_ADAPTOR_CFLAGS)
@@ -328,6 +335,7 @@ AC_CONFIG_FILES([
   Makefile
   dali-adaptor.pc
   dali-adaptor-integration.pc
+  ../../../dali/internal/adaptor/common/system-cache-path.cpp:./system-cache-path.in
 ])
 
 if test "x$freetype_bitmap_support" = "xyes"; then
diff --git a/build/tizen/adaptor/system-cache-path.in b/build/tizen/adaptor/system-cache-path.in
new file mode 100644 (file)
index 0000000..816be33
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// EXTERNAL INCLUDES
+#include <string>
+#include <cstdlib>
+
+std::string GetSystemCachePath()
+{
+  return std::string( "@cachePath@/.cache/dali_common_caches/" );
+}
\ No newline at end of file
index 7273b942577f90ed9b77b0a322db7c3850deddaf..1a3095106af98ece760f1df1519d58a8dbe7de82 100644 (file)
@@ -106,19 +106,19 @@ std::iostream& FileStream::Impl::GetStream()
     return mBufferStream;
   }
 
-  std::ios_base::openmode openMode = std::ios::ate;
-  if( mMode & Dali::FileStream::BINARY )
-  {
-    openMode |= std::ios::binary;
-  }
-
+  std::ios_base::openmode openMode;
   if( mMode & Dali::FileStream::WRITE )
   {
-    openMode |= std::ios::out;
+    openMode = ( std::ios::out | std::ios::ate );
   }
   else
   {
-    openMode |= std::ios::in;
+    openMode = std::ios::in;
+  }
+
+  if( mMode & Dali::FileStream::BINARY )
+  {
+    openMode |= std::ios::binary;
   }
 
   if( !mFileName.empty() )
index 6256e0478312faacd88bff60c9c59281f494fcb5..d42eff54f6e664113dfeb284cc4b2d9f908f73bc 100755 (executable)
@@ -34,6 +34,8 @@
 #include <dali/integration-api/events/wheel-event-integ.h>
 #include <dali/integration-api/processor-interface.h>
 
+#include <fstream>
+
 // INTERNAL INCLUDES
 #include <dali/public-api/dali-adaptor-common.h>
 #include <dali/internal/system/common/thread-controller.h>
 #include <dali/internal/imaging/common/image-loader-plugin-proxy.h>
 #include <dali/internal/imaging/common/image-loader.h>
 
+#include <dali/devel-api/adaptor-framework/file-stream.h>
 
 using Dali::TextAbstraction::FontClient;
 
+extern std::string GetSystemCachePath();
+
 namespace Dali
 {
 
@@ -284,6 +289,40 @@ void Adaptor::Initialize( GraphicsFactory& graphicsFactory, Dali::Configuration:
   {
     Dali::TizenPlatform::ImageLoader::SetMaxTextureSize( mEnvironmentOptions->GetMaxTextureSize() );
   }
+
+  std::string systemCachePath = GetSystemCachePath();
+  if ( systemCachePath.c_str() != NULL )
+  {
+    Dali::FileStream fileStream( systemCachePath + "gpu-environment.conf", Dali::FileStream::READ | Dali::FileStream::TEXT );
+    std::fstream& stream = dynamic_cast<std::fstream&>( fileStream.GetStream() );
+    if( stream.is_open() )
+    {
+      std::string line;
+      while( std::getline( stream, line ) )
+      {
+        line.erase( line.find_last_not_of( " \t\r\n" ) + 1 );
+        line.erase( 0, line.find_first_not_of( " \t\r\n" ) );
+        if( '#' == *( line.cbegin() ) || line == "" )
+        {
+          continue;
+        }
+
+        std::istringstream stream( line );
+        std::string environmentVariableName, environmentVariableValue;
+        std::getline(stream, environmentVariableName, ' ');
+        if( environmentVariableName == "DALI_ENV_MAX_TEXTURE_SIZE" && mEnvironmentOptions->GetMaxTextureSize() == 0 )
+        {
+          std::getline(stream, environmentVariableValue);
+          setenv( environmentVariableName.c_str() , environmentVariableValue.c_str(), 1 );
+          Dali::TizenPlatform::ImageLoader::SetMaxTextureSize( std::atoi( environmentVariableValue.c_str() ) );
+        }
+      }
+    }
+    else
+    {
+      DALI_LOG_ERROR( "Fail to open file : %s\n", ( systemCachePath + "gpu-environment.conf" ).c_str() );
+    }
+  }
 }
 
 Adaptor::~Adaptor()
@@ -353,6 +392,31 @@ void Adaptor::Start()
   // Initialize the thread controller
   mThreadController->Initialize();
 
+  if( !Dali::TizenPlatform::ImageLoader::MaxTextureSizeUpdated() )
+  {
+    auto eglGraphics = static_cast<EglGraphics *>( mGraphics );
+    GlImplementation& mGLES = eglGraphics->GetGlesInterface();
+    Dali::TizenPlatform::ImageLoader::SetMaxTextureSize( mGLES.GetMaxTextureSize() );
+
+    std::string systemCachePath = GetSystemCachePath();
+    if( systemCachePath.c_str() != NULL )
+    {
+      const int dir_err = system( std::string( "mkdir " + systemCachePath ).c_str() );
+      if (-1 == dir_err)
+      {
+          printf("Error creating directory!n");
+          exit(1);
+      }
+
+      Dali::FileStream fileStream( systemCachePath + "gpu-environment.conf", Dali::FileStream::WRITE | Dali::FileStream::TEXT );
+      std::fstream& configFile = dynamic_cast<std::fstream&>( fileStream.GetStream() );
+      if( configFile.is_open() )
+      {
+        configFile << "DALI_ENV_MAX_TEXTURE_SIZE " << mGLES.GetMaxTextureSize() << std::endl;
+      }
+    }
+  }
+
   ProcessCoreEvents(); // Ensure any startup messages are processed.
 
   // Initialize the image loader plugin
index aae33400eeb40a1ab7c3d459fb3a9f58cce360a2..94693d2056cb1d6c58469dbec3286d648b358333 100644 (file)
@@ -493,6 +493,8 @@ void CombinedUpdateRenderController::UpdateRenderThread()
     }
   }
 
+  eglGraphics->GetGlesInterface().ContextCreated();
+
   // Tell core it has a context
   mCore.ContextCreated();
 
index 803b95babc73bec6997be336998bcd6c4566075b..b10b5b85f94b6ce9c8462606f574aafb0b65daba 100644 (file)
@@ -7,7 +7,8 @@ adaptor_adaptor_common_src_files=\
     ${adaptor_adaptor_dir}/common/adaptor.cpp \
     ${adaptor_adaptor_dir}/common/adaptor-builder-impl.cpp \
     ${adaptor_adaptor_dir}/common/application-impl.cpp \
-    ${adaptor_adaptor_dir}/common/combined-update-render-controller.cpp
+    ${adaptor_adaptor_dir}/common/combined-update-render-controller.cpp \
+    ${adaptor_adaptor_dir}/common/system-cache-path.cpp
 
 # module: adaptor, backend: tizen-wayland
 adaptor_adaptor_tizen_wayland_src_files=\
index 8c279f448ab39697dc0315fa28a3bf571d8663b1..9ccc0151bd3949ea0ffaa0ff4c8e6e1e923f3f59 100644 (file)
@@ -23,6 +23,7 @@
 #include <cstdlib>
 #include <GLES2/gl2.h>
 #include <dali/integration-api/gl-abstraction.h>
+#include <dali/devel-api/threading/conditional-wait.h>
 
 // INTERNAL INCLUDES
 #include <dali/internal/graphics/gles/gles-abstraction.h>
@@ -49,7 +50,10 @@ class GlImplementation : public Dali::Integration::GlAbstraction
 public:
   GlImplementation()
     : mGlesVersion( 30 ),
-      mIsSurfacelessContextSupported( false )
+      mIsSurfacelessContextSupported( false ),
+      mIsContextCreated( false ),
+      mContextCreatedWaitCondition(),
+      mMaxTextureSize( 0 )
   {
     mImpl.reset( new Gles3Implementation() );
   }
@@ -66,6 +70,17 @@ public:
     /* Do nothing in main implementation */
   }
 
+  void ContextCreated()
+  {
+    glGetIntegerv( GL_MAX_TEXTURE_SIZE, &mMaxTextureSize );
+
+    if( !mIsContextCreated )
+    {
+      mContextCreatedWaitCondition.Notify();
+    }
+    mIsContextCreated = true;
+  }
+
   void SetGlesVersion( const int32_t glesVersion )
   {
     if( mGlesVersion != glesVersion )
@@ -103,6 +118,15 @@ public:
     return convert;
   }
 
+  int GetMaxTextureSize()
+  {
+    if( !mIsContextCreated )
+    {
+      mContextCreatedWaitCondition.Wait();
+    }
+    return mMaxTextureSize;
+  }
+
   /* OpenGL ES 2.0 */
 
   void ActiveTexture( GLenum texture )
@@ -1340,6 +1364,9 @@ public:
 private:
   int32_t mGlesVersion;
   bool mIsSurfacelessContextSupported;
+  bool mIsContextCreated;
+  ConditionalWait mContextCreatedWaitCondition;
+  GLint mMaxTextureSize;
   std::unique_ptr<GlesAbstraction> mImpl;
 };
 
index b83878ecd51438baa67b854bb28a6e96731b267d..598079682c6a5cbb29bbd0dac32fd3bf0e67f713 100755 (executable)
@@ -47,6 +47,8 @@ Integration::Log::Filter* gLogFilter = Debug::Filter::New( Debug::Concise, false
 
 static unsigned int gMaxTextureSize = 4096;
 
+static bool gMaxTextureSizeUpdated = false;
+
 /**
  * Enum for file formats, has to be in sync with BITMAP_LOADER_LOOKUP_TABLE
  */
@@ -418,6 +420,7 @@ ImageDimensions GetClosestImageSize( Integration::ResourcePointer resourceBuffer
 void SetMaxTextureSize( unsigned int size )
 {
   gMaxTextureSize = size;
+  gMaxTextureSizeUpdated = true;
 }
 
 unsigned int GetMaxTextureSize()
@@ -425,6 +428,11 @@ unsigned int GetMaxTextureSize()
   return gMaxTextureSize;
 }
 
+bool MaxTextureSizeUpdated()
+{
+  return gMaxTextureSizeUpdated;
+}
+
 } // ImageLoader
 } // TizenPlatform
 } // Dali
index 55f16805fafceebf178418d06fa7c0f85cc64343..a7c42a0f2205abfe6117d02e6d6673b9271df1cb 100644 (file)
@@ -95,6 +95,13 @@ void SetMaxTextureSize( unsigned int size );
  */
 unsigned int GetMaxTextureSize();
 
+/**
+ * @brief Check the gMaxTextureSize is updated or not.
+ *
+ * @return Whether the gMaxTextureSize is updated or not.
+ */
+bool MaxTextureSizeUpdated();
+
 } // ImageLoader
 } // TizenPlatform
 } // Dali