[Libreoffice-commits] .: android/experimental

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Nov 20 02:02:43 PST 2012


 android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java |  100 ++++++----
 1 file changed, 66 insertions(+), 34 deletions(-)

New commits:
commit 4c359c22e12a8cd6b6b40af60e1a39261737ad2a
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Tue Nov 20 09:42:41 2012 +0100

    android: don't bootstrap after every rotation in DocumentLoader
    
    It seems that previously onCreate served 3 different purposes:
    
    1) bootstrap UNO machinery
    2) load the document
    3) create the view
    
    Ideally it should do the first two only if not done already -- as a
    first step, this commit extracts 1) and does only once.
    
    Change-Id: I087a6b934c05295263080f571c95ef152e4602cb

diff --git a/android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java b/android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
index 806fcab..3837a04 100644
--- a/android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
+++ b/android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
@@ -126,10 +126,7 @@ public class DocumentLoader
     private static final int PAGECACHE_PLUSMINUS = 2;
     private static final int PAGECACHE_SIZE = PAGECACHE_PLUSMINUS*2 + 1;
 
-    long timingOverhead;
-    XComponentContext context;
-    XMultiComponentFactory mcf;
-    XComponentLoader componentLoader;
+    BootstrapContext bootstrapContext;
     XToolkitExperimental toolkit;
     XDevice dummySmallDevice;
     Object doc;
@@ -619,7 +616,7 @@ public class DocumentLoader
             long t0 = System.currentTimeMillis();
             PropertyValue rendererProps[] = renderable.getRenderer(number, doc, renderProps);
             long t1 = System.currentTimeMillis();
-            Log.i(TAG, "getRenderer took " + ((t1-t0)-timingOverhead) + " ms");
+            Log.i(TAG, "getRenderer took " + ((t1-t0)-bootstrapContext.timingOverhead) + " ms");
 
             int pageWidth = 0, pageHeight = 0;
             for (int i = 0; i < rendererProps.length; i++) {
@@ -699,7 +696,7 @@ public class DocumentLoader
             t0 = System.currentTimeMillis();
             renderable.render(number, doc, renderProps);
             t1 = System.currentTimeMillis();
-            Log.i(TAG, "Rendering page " + number + " took " + ((t1-t0)-timingOverhead) + " ms");
+            Log.i(TAG, "Rendering page " + number + " took " + ((t1-t0)-bootstrapContext.timingOverhead) + " ms");
 
             Bootstrap.force_full_alpha_bb(bb, 0, flipper.getWidth() * flipper.getHeight() * 4);
 
@@ -816,12 +813,12 @@ public class DocumentLoader
                 loadProps[2].Value = new Boolean(true);
 
                 long t0 = System.currentTimeMillis();
-                doc = componentLoader.loadComponentFromURL(url, "_blank", 0, loadProps);
+                doc = bootstrapContext.componentLoader.loadComponentFromURL(url, "_blank", 0, loadProps);
                 long t1 = System.currentTimeMillis();
-                Log.i(TAG, "Loading took " + ((t1-t0)-timingOverhead) + " ms");
+                Log.i(TAG, "Loading took " + ((t1-t0)-bootstrapContext.timingOverhead) + " ms");
 
-                Object toolkitService = mcf.createInstanceWithContext
-                    ("com.sun.star.awt.Toolkit", context);
+                Object toolkitService = bootstrapContext.mcf.createInstanceWithContext
+                    ("com.sun.star.awt.Toolkit", bootstrapContext.componentContext);
                 toolkit = (XToolkitExperimental) UnoRuntime.queryInterface(XToolkitExperimental.class, toolkitService);
 
                 renderable = (XRenderable) UnoRuntime.queryInterface(XRenderable.class, doc);
@@ -846,7 +843,7 @@ public class DocumentLoader
                 t0 = System.currentTimeMillis();
                 pageCount = renderable.getRendererCount(doc, renderProps);
                 t1 = System.currentTimeMillis();
-                Log.i(TAG, "getRendererCount: " + pageCount + ", took " + ((t1-t0)-timingOverhead) + " ms");
+                Log.i(TAG, "getRendererCount: " + pageCount + ", took " + ((t1-t0)-bootstrapContext.timingOverhead) + " ms");
             }
             catch (Exception e) {
                 e.printStackTrace(System.err);
@@ -856,6 +853,18 @@ public class DocumentLoader
         }
     }
 
+    /**
+     * This class contains the state that is initialized once and never changes
+     * (not specific to a document or a view).
+     */
+    class BootstrapContext
+    {
+        public long timingOverhead;
+        public XComponentContext componentContext;
+        public XMultiComponentFactory mcf;
+        public XComponentLoader componentLoader;
+    }
+
     static void dumpUNOObject(String objectName, Object object)
     {
         Log.i(TAG, objectName + " is " + (object != null ? object.toString() : "null"));
@@ -924,19 +933,19 @@ public class DocumentLoader
     }
 
     @Override
-    public void onCreate(Bundle savedInstanceState)
-    {
-        super.onCreate(savedInstanceState);
-
-        extras = getIntent().getExtras();
+    public Object onRetainNonConfigurationInstance() {
+        return bootstrapContext;
+    }
 
-        gestureListener = new GestureListener();
-        gestureDetector = new GestureDetector(this, gestureListener);
+    private void initBootstrapContext()
+    {
+        try
+        {
+            bootstrapContext = new BootstrapContext();
 
-        try {
             long t0 = System.currentTimeMillis();
             long t1 = System.currentTimeMillis();
-            timingOverhead = t1 - t0;
+            bootstrapContext.timingOverhead = t1 - t0;
 
             Bootstrap.setup(this);
 
@@ -946,14 +955,45 @@ public class DocumentLoader
             // Log.i(TAG, "Sleeping NOW");
             // Thread.sleep(20000);
 
-            context = com.sun.star.comp.helper.Bootstrap.defaultBootstrap_InitialComponentContext();
+            bootstrapContext.componentContext = com.sun.star.comp.helper.Bootstrap.defaultBootstrap_InitialComponentContext();
+
+            Log.i(TAG, "context is" + (bootstrapContext.componentContext!=null ? " not" : "") + " null");
 
-            Log.i(TAG, "context is" + (context!=null ? " not" : "") + " null");
+            bootstrapContext.mcf = bootstrapContext.componentContext.getServiceManager();
 
-            mcf = context.getServiceManager();
+            Log.i(TAG, "mcf is" + (bootstrapContext.mcf!=null ? " not" : "") + " null");
 
-            Log.i(TAG, "mcf is" + (mcf!=null ? " not" : "") + " null");
+            Bootstrap.initVCL();
+
+            Object desktop = bootstrapContext.mcf.createInstanceWithContext
+                ("com.sun.star.frame.Desktop", bootstrapContext.componentContext);
 
+            Log.i(TAG, "desktop is" + (desktop!=null ? " not" : "") + " null");
+
+            bootstrapContext.componentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, desktop);
+
+            Log.i(TAG, "componentLoader is" + (bootstrapContext.componentLoader!=null ? " not" : "") + " null");
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace(System.err);
+            finish();
+        }
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState)
+    {
+        super.onCreate(savedInstanceState);
+
+        bootstrapContext = (BootstrapContext)getLastNonConfigurationInstance();
+
+        extras = getIntent().getExtras();
+
+        gestureListener = new GestureListener();
+        gestureDetector = new GestureDetector(this, gestureListener);
+
+        try {
             String input = getIntent().getStringExtra("input");
             if (input == null)
                 input = "/assets/test1.odt";
@@ -967,16 +1007,8 @@ public class DocumentLoader
 
             Bootstrap.setCommandArgs(argv);
 
-            Bootstrap.initVCL();
-
-            Object desktop = mcf.createInstanceWithContext
-                ("com.sun.star.frame.Desktop", context);
-
-            Log.i(TAG, "desktop is" + (desktop!=null ? " not" : "") + " null");
-
-            componentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, desktop);
-
-            Log.i(TAG, "componentLoader is" + (componentLoader!=null ? " not" : "") + " null");
+            if (bootstrapContext == null)
+                initBootstrapContext();
 
             // Load the wanted document
             new DocumentLoadTask().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, "file://" + input);


More information about the Libreoffice-commits mailing list