[Libreoffice-commits] core.git: 2 commits - basctl/source

Noel Power noel.power at suse.com
Thu Jun 27 08:39:34 PDT 2013


 basctl/source/basicide/basobj2.cxx |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

New commits:
commit 61027ca6eb450fb20bfe9209ba180fe0606baeab
Author: Noel Power <noel.power at suse.com>
Date:   Thu Jun 27 13:58:48 2013 +0100

    improve performance switching modules in large Libraries fdo#66148
    
    object catalog when updated, updates ( all ) entries and was parsing
    the source for every method in every module
    
    Change-Id: Id68e3c24d597d29a86d3507a7dc20745c96dd2a2

diff --git a/basctl/source/basicide/basobj2.cxx b/basctl/source/basicide/basobj2.cxx
index 7e62558..d5e4b91 100644
--- a/basctl/source/basicide/basobj2.cxx
+++ b/basctl/source/basicide/basobj2.cxx
@@ -42,7 +42,7 @@
 #include <vector>
 #include <algorithm>
 #include <memory>
-
+#include "basic/basmgr.hxx"
 namespace basctl
 {
 
@@ -405,13 +405,25 @@ Sequence< OUString > GetMethodNames( const ScriptDocument& rDocument, const OUSt
     OUString aOUSource;
     if ( rDocument.getModule( rLibName, rModName, aOUSource ) )
     {
-        SbModuleRef xModule = new SbModule( rModName );
-        xModule->SetSource32( aOUSource );
-        sal_uInt16 nCount = xModule->GetMethods()->Count();
+        BasicManager* pBasMgr = rDocument.getBasicManager();
+        StarBASIC* pSb = pBasMgr ? pBasMgr->GetLib( rLibName ) : NULL;
+        SbModule* pMod = pSb ? pSb->FindModule( rModName ) : NULL;
+
+        SbModuleRef xModule;
+        // Only reparse modules if ScriptDocument source is out of sync
+        // with basic's Module
+        if ( !pMod || ( pMod && pMod->GetSource() != aOUSource ) )
+        {
+            xModule = new SbModule( rModName );
+            xModule->SetSource32( aOUSource );
+            pMod = xModule;
+        }
+
+        sal_uInt16 nCount = pMod->GetMethods()->Count();
         sal_uInt16 nRealCount = nCount;
         for ( sal_uInt16 i = 0; i < nCount; i++ )
         {
-            SbMethod* pMethod = (SbMethod*)xModule->GetMethods()->Get( i );
+            SbMethod* pMethod = (SbMethod*)pMod->GetMethods()->Get( i );
             if( pMethod->IsHidden() )
                 --nRealCount;
         }
@@ -420,7 +432,7 @@ Sequence< OUString > GetMethodNames( const ScriptDocument& rDocument, const OUSt
         sal_uInt16 iTarget = 0;
         for ( sal_uInt16 i = 0 ; i < nCount; ++i )
         {
-            SbMethod* pMethod = (SbMethod*)xModule->GetMethods()->Get( i );
+            SbMethod* pMethod = (SbMethod*)pMod->GetMethods()->Get( i );
             if( pMethod->IsHidden() )
                 continue;
             SAL_WARN_IF( !pMethod, "basctl.basicide","Method not found! (NULL)" );
@@ -445,9 +457,20 @@ bool HasMethod (
     OUString aOUSource;
     if ( rDocument.hasModule( rLibName, rModName ) && rDocument.getModule( rLibName, rModName, aOUSource ) )
     {
-        SbModuleRef xModule = new SbModule( rModName );
-        xModule->SetSource32( aOUSource );
-        SbxArray* pMethods = xModule->GetMethods();
+        // Check if we really need to scan the source ( again )
+        BasicManager* pBasMgr = rDocument.getBasicManager();
+        StarBASIC* pSb = pBasMgr ? pBasMgr->GetLib( rLibName ) : NULL;
+        SbModule* pMod = pSb ? pSb->FindModule( rModName ) : NULL;
+        SbModuleRef xModule;
+        // Only reparse modules if ScriptDocument source is out of sync
+        // with basic's Module
+        if ( !pMod || ( pMod && pMod->GetSource() != aOUSource ))
+        {
+            xModule = new SbModule( rModName );
+            xModule->SetSource32( aOUSource );
+            pMod = xModule;
+        }
+        SbxArray* pMethods = pMod->GetMethods();
         if ( pMethods )
         {
             SbMethod* pMethod = (SbMethod*)pMethods->Find( rMethName, SbxCLASS_METHOD );
commit eebf0a6dfa9490a9f59a4e392517a0c93d3da1df
Author: Noel Power <noel.power at suse.com>
Date:   Thu Jun 27 16:26:29 2013 +0100

    Revert "tweak object catalog to improve switching modules in large Libraries"
    
    This reverts commit 21eeeccfa64a4c03554c1fe3715d38c1695245ab.

diff --git a/basctl/source/basicide/basobj2.cxx b/basctl/source/basicide/basobj2.cxx
index 1b1689b..7e62558 100644
--- a/basctl/source/basicide/basobj2.cxx
+++ b/basctl/source/basicide/basobj2.cxx
@@ -42,7 +42,7 @@
 #include <vector>
 #include <algorithm>
 #include <memory>
-#include "basic/basmgr.hxx"
+
 namespace basctl
 {
 
@@ -405,23 +405,13 @@ Sequence< OUString > GetMethodNames( const ScriptDocument& rDocument, const OUSt
     OUString aOUSource;
     if ( rDocument.getModule( rLibName, rModName, aOUSource ) )
     {
-        BasicManager* pBasMgr = rDocument.getBasicManager();
-        StarBASIC* pSb = pBasMgr ? pBasMgr->GetLib( rLibName ) : NULL;
-        SbModule* pMod = pSb ? pSb->FindModule( rModName ) : NULL;
-
-        SbModuleRef xModule;
-        if ( !pMod )
-        {
-            xModule = new SbModule( rModName );
-            xModule->SetSource32( aOUSource );
-            pMod = xModule;
-        }
-
-        sal_uInt16 nCount = pMod->GetMethods()->Count();
+        SbModuleRef xModule = new SbModule( rModName );
+        xModule->SetSource32( aOUSource );
+        sal_uInt16 nCount = xModule->GetMethods()->Count();
         sal_uInt16 nRealCount = nCount;
         for ( sal_uInt16 i = 0; i < nCount; i++ )
         {
-            SbMethod* pMethod = (SbMethod*)pMod->GetMethods()->Get( i );
+            SbMethod* pMethod = (SbMethod*)xModule->GetMethods()->Get( i );
             if( pMethod->IsHidden() )
                 --nRealCount;
         }
@@ -430,7 +420,7 @@ Sequence< OUString > GetMethodNames( const ScriptDocument& rDocument, const OUSt
         sal_uInt16 iTarget = 0;
         for ( sal_uInt16 i = 0 ; i < nCount; ++i )
         {
-            SbMethod* pMethod = (SbMethod*)pMod->GetMethods()->Get( i );
+            SbMethod* pMethod = (SbMethod*)xModule->GetMethods()->Get( i );
             if( pMethod->IsHidden() )
                 continue;
             SAL_WARN_IF( !pMethod, "basctl.basicide","Method not found! (NULL)" );
@@ -455,18 +445,9 @@ bool HasMethod (
     OUString aOUSource;
     if ( rDocument.hasModule( rLibName, rModName ) && rDocument.getModule( rLibName, rModName, aOUSource ) )
     {
-        // Check if we really need to scan the source ( again )
-        BasicManager* pBasMgr = rDocument.getBasicManager();
-        StarBASIC* pSb = pBasMgr ? pBasMgr->GetLib( rLibName ) : NULL;
-        SbModule* pMod = pSb ? pSb->FindModule( rModName ) : NULL;
-        SbModuleRef xModule;
-        if ( !pMod )
-        {
-            xModule = new SbModule( rModName );
-            xModule->SetSource32( aOUSource );
-            pMod = xModule;
-        }
-        SbxArray* pMethods = pMod->GetMethods();
+        SbModuleRef xModule = new SbModule( rModName );
+        xModule->SetSource32( aOUSource );
+        SbxArray* pMethods = xModule->GetMethods();
         if ( pMethods )
         {
             SbMethod* pMethod = (SbMethod*)pMethods->Find( rMethName, SbxCLASS_METHOD );


More information about the Libreoffice-commits mailing list