diff options
author | Tor Lillqvist <tml@collabora.com> | 2018-06-19 10:02:42 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2018-06-19 13:16:40 +0300 |
commit | 3b6905e37a6baac08eaff00e6e42aced7d6896df (patch) | |
tree | e8f8aab8bdd2e0f5764afc4801b480cdcb756b7e /sal/osl | |
parent | 68573b6e0668d2b8bb8c59a864d349d503d8422d (diff) |
Don't waste time in macxp_resolveAlias() on files inside the app bundle
LibreOffice uses its low-level API to look up files inside the app
bundle thousands of times, all the time, and especially when starting
something. Both when the process starts, and when a specific aspects
of the application starts (like after typing a first character into a
Writer document in a session). Having all those, too, go through this
alias (bookmark) resolve dance is just insane. There won't be any
aliases (bookmarks) 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
Diffstat (limited to 'sal/osl')
-rw-r--r-- | sal/osl/unx/system.cxx | 13 | ||||
-rw-r--r-- | sal/osl/unx/system.mm | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/sal/osl/unx/system.cxx b/sal/osl/unx/system.cxx index aacd91a1290a..dee35f5c3b92 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" |