[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.0' - sal/Library_sal.mk sal/osl

Tor Lillqvist tml at collabora.com
Tue Jun 19 07:53:18 UTC 2018


 sal/Library_sal.mk     |    5 +++--
 sal/osl/unx/system.cxx |   13 +++++++++++++
 sal/osl/unx/system.mm  |    1 +
 3 files changed, 17 insertions(+), 2 deletions(-)

New commits:
commit 17ddc78c2d0ff1b2af82cb8e8ed9c5db3f959d19
Author: Tor Lillqvist <tml at collabora.com>
Date:   Tue Jun 19 10:02:42 2018 +0300

    Don't waste time in macxp_resolveAlias() on files inside the app bundle
    
    LibreOffice uses its low-level API to look up hundreds of files inside
    the app bundle all the time, and especially when starting as a whole,
    or when starting specific aspects of the application (like after
    typing a first character into a Writer document in a session). Having
    all those go through this alias or bookmark dance is just insane.
    There won't be any there.
    
    This shaves almost a second from the delay after typing the first
    character into a Writer document in a session. There is still a
    noticeable delay left, though, likely mostly caused by Python
    (Lightproof) initialisation slowness. (It's cross-platform.)
    
    I would say that it is a bit questionable whether the
    macxp_resolveAlias() functionality is worth it at all, even.
    
    Change-Id: I2461141c6b58738befd0db4902eb25e63b788b79
    Reviewed-on: https://gerrit.libreoffice.org/56081
    Reviewed-by: Andras Timar <andras.timar at collabora.com>
    Tested-by: Andras Timar <andras.timar at collabora.com>

diff --git a/sal/Library_sal.mk b/sal/Library_sal.mk
index 17d89ae79e4a..b0921dd8ff24 100644
--- a/sal/Library_sal.mk
+++ b/sal/Library_sal.mk
@@ -178,21 +178,22 @@ $(eval $(call gb_Library_add_exception_objects,sal,\
 	sal/osl/unx/security \
 	sal/osl/unx/signal \
 	sal/osl/unx/socket \
-	sal/osl/unx/system \
 	sal/osl/unx/tempfile \
 	sal/osl/unx/thread \
 	sal/osl/unx/time \
 	$(if $(filter-out ANDROID IOS,$(OS)), sal/osl/unx/salinit) \
 ))
 
-# Note that the uunxapi.mm file just includes the uunxapi.cxx one
+# Note that the uunxapi.mm file just includes the uunxapi.cxx one. Ditto for system.mm
 ifeq ($(OS),MACOSX)
 $(eval $(call gb_Library_add_objcxxobjects,sal,\
 	sal/osl/unx/uunxapi \
+	sal/osl/unx/system \
 ))
 else
 $(eval $(call gb_Library_add_exception_objects,sal,\
 	sal/osl/unx/uunxapi \
+	sal/osl/unx/system \
 ))
 endif
 
diff --git a/sal/osl/unx/system.cxx b/sal/osl/unx/system.cxx
index 7003b4ff5a41..9b7f05d93b28 100644
--- a/sal/osl/unx/system.cxx
+++ b/sal/osl/unx/system.cxx
@@ -37,6 +37,10 @@
 #define RTL_MUTEX_LOCK
 #define RTL_MUTEX_UNLOCK
 
+#include <premac.h>
+#include <Foundation/Foundation.h>
+#include <postmac.h>
+
 #else //defined(MACOSX)
 
 static pthread_mutex_t getrtl_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -162,6 +166,15 @@ int macxp_resolveAlias(char *path, int buflen)
   CFErrorRef cferror;
   CFDataRef cfbookmark;
 
+  // Don't even try anything for files inside the app bundle. Just a
+  // waste of time.
+
+  static const char * const appBundle = [[[NSBundle mainBundle] bundlePath] UTF8String];
+
+  const size_t appBundleLen = strlen(appBundle);
+  if (strncmp(path, appBundle, appBundleLen) == 0 && path[appBundleLen] == '/')
+      return 0;
+
   char *unprocessedPath = path;
 
   if ( *unprocessedPath == '/' )
diff --git a/sal/osl/unx/system.mm b/sal/osl/unx/system.mm
new file mode 100644
index 000000000000..7495a3e73058
--- /dev/null
+++ b/sal/osl/unx/system.mm
@@ -0,0 +1 @@
+#include "system.cxx"


More information about the Libreoffice-commits mailing list