]> granicus.if.org Git - imagemagick/commitdiff
Slight performance increase by reducing semaphore calls
authorCristy <urban-warrior@imagemagick.org>
Sat, 16 Sep 2017 14:13:23 +0000 (10:13 -0400)
committerCristy <urban-warrior@imagemagick.org>
Sat, 16 Sep 2017 14:13:49 +0000 (10:13 -0400)
MagickCore/coder.c
MagickCore/magick.c
MagickCore/splay-tree.c
MagickCore/splay-tree.h
MagickCore/type.c

index bf8f847efc05f4e50d81a273ec1e555b59dc3e69..0c647d5e7ea0891da3729040f0c8ee7be6fdef6b 100644 (file)
@@ -472,23 +472,12 @@ MagickPrivate void CoderComponentTerminus(void)
 MagickExport const CoderInfo *GetCoderInfo(const char *name,
   ExceptionInfo *exception)
 {
-  const CoderInfo
-    *coder_info;
-
   assert(exception != (ExceptionInfo *) NULL);
   if (IsCoderTreeInstantiated(exception) == MagickFalse)
     return((const CoderInfo *) NULL);
-  LockSemaphoreInfo(coder_semaphore);
   if ((name == (const char *) NULL) || (LocaleCompare(name,"*") == 0))
-    {
-      ResetSplayTreeIterator(coder_cache);
-      coder_info=(const CoderInfo *) GetNextValueInSplayTree(coder_cache);
-      UnlockSemaphoreInfo(coder_semaphore);
-      return(coder_info);
-    }
-  coder_info=(const CoderInfo *) GetValueFromSplayTree(coder_cache,name);
-  UnlockSemaphoreInfo(coder_semaphore);
-  return(coder_info);
+    return((const CoderInfo *) GetRootValueFromSplayTree(coder_cache));
+  return((const CoderInfo *) GetValueFromSplayTree(coder_cache,name));
 }
 \f
 /*
index 1c590f9ad233f98bc4659b9156b4a9dd36fdf3fe..462e046ddb82afe9224594fbca9db16ae7106164 100644 (file)
@@ -625,13 +625,7 @@ MagickExport const MagickInfo *GetMagickInfo(const char *name,
     }
 #endif
   if ((name == (const char *) NULL) || (LocaleCompare(name,"*") == 0))
-    {
-      LockSemaphoreInfo(magick_semaphore);
-      ResetSplayTreeIterator(magick_list);
-      magick_info=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
-      UnlockSemaphoreInfo(magick_semaphore);
-      return(magick_info);
-    }
+    magick_info=(const MagickInfo *) GetRootValueFromSplayTree(magick_list);
   if (magick_info == (const MagickInfo *) NULL)
     magick_info=(const MagickInfo *) GetValueFromSplayTree(magick_list,name);
   return(magick_info);
index 64d989fc028bc3a42aef9507a85fa8de3bc207a6..5f55bea8f1603cfcf7205313026b151af147b1a8 100644 (file)
@@ -854,6 +854,47 @@ MagickExport const void *GetNextValueInSplayTree(SplayTreeInfo *splay_tree)
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%   G e t R o o t V a l u e F r o m S p l a y T r e e                         %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  GetRootValueFromSplayTree() gets the root value from the splay-tree.
+%
+%  The format of the GetRootValueFromSplayTree method is:
+%
+%      const void *GetRootValueFromSplayTree(SplayTreeInfo *splay_tree)
+%
+%  A description of each parameter follows:
+%
+%    o splay_tree: the splay tree.
+%
+%    o key: the key.
+%
+*/
+MagickExport const void *GetRootValueFromSplayTree(SplayTreeInfo *splay_tree)
+{
+  const void
+    *value;
+
+  assert(splay_tree != (SplayTreeInfo *) NULL);
+  assert(splay_tree->signature == MagickCoreSignature);
+  if (splay_tree->debug != MagickFalse)
+    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
+  LockSemaphoreInfo(splay_tree->semaphore);
+  value=NULL;
+  if (splay_tree->root != (NodeInfo *) NULL)
+    value=splay_tree->root->value;
+  UnlockSemaphoreInfo(splay_tree->semaphore);
+  return(value);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %   G e t V a l u e F r o m S p l a y T r e e                                 %
 %                                                                             %
 %                                                                             %
index 222a2a5efd14b4db71de52c3c12584a14790711d..860ebb00e048a24666a1a1a2ac83cfc5be4845c2 100644 (file)
@@ -33,6 +33,7 @@ extern MagickExport MagickBooleanType
 extern MagickExport const void
   *GetNextKeyInSplayTree(SplayTreeInfo *),
   *GetNextValueInSplayTree(SplayTreeInfo *),
+  *GetRootValueFromSplayTree(SplayTreeInfo *),
   *GetValueFromSplayTree(SplayTreeInfo *,const void *);
 
 extern MagickExport int
index 2b47563df146e162b7854e69ba5ea5bcd8787252..80e73ceab0b7f9f3df34d78bf0c09f991c6ca736 100644 (file)
@@ -277,23 +277,12 @@ static SplayTreeInfo *AcquireTypeCache(const char *filename,
 MagickExport const TypeInfo *GetTypeInfo(const char *name,
   ExceptionInfo *exception)
 {
-  const TypeInfo
-    *type_info;
-
   assert(exception != (ExceptionInfo *) NULL);
   if (IsTypeTreeInstantiated(exception) == MagickFalse)
     return((const TypeInfo *) NULL);
-  LockSemaphoreInfo(type_semaphore);
   if ((name == (const char *) NULL) || (LocaleCompare(name,"*") == 0))
-    {
-      ResetSplayTreeIterator(type_cache);
-      type_info=(const TypeInfo *) GetNextValueInSplayTree(type_cache);
-      UnlockSemaphoreInfo(type_semaphore);
-      return(type_info);
-    }
-  type_info=(const TypeInfo *) GetValueFromSplayTree(type_cache,name);
-  UnlockSemaphoreInfo(type_semaphore);
-  return(type_info);
+    return((const TypeInfo *) GetRootValueFromSplayTree(type_cache));
+  return((const TypeInfo *) GetValueFromSplayTree(type_cache,name));
 }
 \f
 /*