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
This commit is contained in:
Tor Lillqvist 2018-06-19 10:02:42 +03:00
parent 68573b6e06
commit 3b6905e37a
3 changed files with 17 additions and 2 deletions

View file

@ -179,21 +179,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

View file

@ -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 == '/' )

1
sal/osl/unx/system.mm Normal file
View file

@ -0,0 +1 @@
#include "system.cxx"