[Libreoffice-commits] .: Branch 'feature/android' - jvmfwk/plugins sal/android sal/inc sal/osl sal/Package_inc.mk solenv/inc vcl/android vcl/inc

Michael Meeks michael at kemper.freedesktop.org
Thu Jan 26 02:30:40 PST 2012


 jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx |    2 
 sal/Package_inc.mk                                  |    1 
 sal/android/lo-bootstrap.c                          |    2 
 sal/inc/osl/detail/android-bootstrap.h              |   80 ++++++++++++++++++++
 sal/osl/unx/file.cxx                                |    2 
 sal/osl/unx/file_misc.cxx                           |    4 -
 sal/osl/unx/module.c                                |    2 
 sal/osl/unx/process_impl.cxx                        |    2 
 sal/osl/unx/thread.c                                |   18 ++++
 sal/osl/unx/uunxapi.cxx                             |    2 
 solenv/inc/unxandr/lo-bootstrap.h                   |   77 -------------------
 vcl/android/androidinst.cxx                         |   26 ++++--
 vcl/inc/android/androidinst.hxx                     |    1 
 13 files changed, 126 insertions(+), 93 deletions(-)

New commits:
commit 7c4c1832ccd4830f903d7d647466f96aa6755711
Author: Michael Meeks <michael.meeks at suse.com>
Date:   Thu Jan 26 10:29:38 2012 +0000

    android: move lo-bootstrap to osl/detail, Attach threads as created

diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
index a8d8258..f288821 100644
--- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
+++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
@@ -65,7 +65,7 @@
 #include "diagnostics.h"
 
 #ifdef ANDROID
-#include <lo-bootstrap.h>
+#include <osl/detail/android-bootstrap.h>
 #endif
 
 #if defined HAVE_VALGRIND_H
diff --git a/sal/Package_inc.mk b/sal/Package_inc.mk
index e43de3e..304ab9d 100644
--- a/sal/Package_inc.mk
+++ b/sal/Package_inc.mk
@@ -65,6 +65,7 @@ $(eval $(call gb_Package_add_file,sal_inc,inc/osl/time.h,osl/time.h))
 $(eval $(call gb_Package_add_file,sal_inc,inc/osl/util.h,osl/util.h))
 $(eval $(call gb_Package_add_file,sal_inc,inc/osl/detail/file.h,osl/detail/file.h))
 $(eval $(call gb_Package_add_file,sal_inc,inc/osl/detail/android_native_app_glue.h,osl/detail/android_native_app_glue.h))
+$(eval $(call gb_Package_add_file,sal_inc,inc/osl/detail/android-bootstrap.h,osl/detail/android-bootstrap.h))
 $(eval $(call gb_Package_add_file,sal_inc,inc/rtl/allocator.hxx,rtl/allocator.hxx))
 $(eval $(call gb_Package_add_file,sal_inc,inc/rtl/alloc.h,rtl/alloc.h))
 $(eval $(call gb_Package_add_file,sal_inc,inc/rtl/bootstrap.h,rtl/bootstrap.h))
diff --git a/sal/android/lo-bootstrap.c b/sal/android/lo-bootstrap.c
index 55bc643..98db089 100644
--- a/sal/android/lo-bootstrap.c
+++ b/sal/android/lo-bootstrap.c
@@ -48,7 +48,7 @@
 
 #include "uthash.h"
 
-#include "lo-bootstrap.h"
+#include "osl/detail/android-bootstrap.h"
 
 #pragma GCC diagnostic ignored "-Wdeclaration-after-statement"
 
diff --git a/sal/inc/osl/detail/android-bootstrap.h b/sal/inc/osl/detail/android-bootstrap.h
new file mode 100644
index 0000000..6539687
--- /dev/null
+++ b/sal/inc/osl/detail/android-bootstrap.h
@@ -0,0 +1,80 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http: *www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Major Contributor(s):
+ * Copyright (C) 2011 Tor Lillqvist <tml at iki.fi> (initial developer)
+ * Copyright (C) 2011 SUSE Linux http://suse.com (initial developer's employer)
+ *
+ * All Rights Reserved.
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#ifndef ANDROID_BOOSTRAP_H
+#define ANDROID_BOOSTRAP_H
+#if defined(ANDROID)
+
+#include <jni.h>
+#include <dlfcn.h>
+#include <dirent.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct lo_apk_dir lo_apk_dir;
+
+char **lo_dlneeds(const char *library);
+
+void *lo_dlopen(const char *library);
+
+void *lo_dlsym(void *handle,
+               const char *symbol);
+
+int lo_dladdr(void *addr,
+              Dl_info *info);
+
+void *lo_apkentry(const char *filename,
+                  size_t *size);
+
+lo_apk_dir *lo_apk_opendir(const char *dirname);
+
+struct dirent *lo_apk_readdir(lo_apk_dir *dirp);
+
+int lo_apk_closedir(lo_apk_dir *dirp);
+
+int lo_apk_lstat(const char *path, struct stat *statp);
+
+int lo_dlcall_argc_argv(void *function,
+                        int argc,
+                        const char **argv);
+
+JavaVM *lo_get_javavm(void);
+
+struct android_app *lo_get_app(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ANDROID
+#endif // ANDROID_BOOTSTRAP_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/file.cxx b/sal/osl/unx/file.cxx
index 63e9775..b8a851f 100644
--- a/sal/osl/unx/file.cxx
+++ b/sal/osl/unx/file.cxx
@@ -59,7 +59,7 @@
 #endif /* MACOSX */
 
 #ifdef ANDROID
-#include <lo-bootstrap.h>
+#include <osl/detail/android-bootstrap.h>
 #endif
 
 #ifdef DEBUG_OSL_FILE
diff --git a/sal/osl/unx/file_misc.cxx b/sal/osl/unx/file_misc.cxx
index 260b711..962d7bf 100644
--- a/sal/osl/unx/file_misc.cxx
+++ b/sal/osl/unx/file_misc.cxx
@@ -55,7 +55,7 @@
 #include <algorithm>
 
 #ifdef ANDROID
-#include <lo-bootstrap.h>
+#include <osl/detail/android-bootstrap.h>
 #endif
 
 /************************************************************************
@@ -774,7 +774,7 @@ static oslFileError osl_psz_removeFile( const sal_Char* pszPath )
     int nRet=0;
     struct stat aStat;
 
-    nRet = lstat(pszPath,&aStat);
+    nRet = lstat_c(pszPath,&aStat);
     if ( nRet < 0 )
     {
         nRet=errno;
diff --git a/sal/osl/unx/module.c b/sal/osl/unx/module.c
index 2889a77..792f0cd 100644
--- a/sal/osl/unx/module.c
+++ b/sal/osl/unx/module.c
@@ -44,7 +44,7 @@
 #endif
 
 #ifdef ANDROID
-#include <lo-bootstrap.h>
+#include <osl/detail/android-bootstrap.h>
 #endif
 
 /* implemented in file.c */
diff --git a/sal/osl/unx/process_impl.cxx b/sal/osl/unx/process_impl.cxx
index 83c5c88..d90fdea 100644
--- a/sal/osl/unx/process_impl.cxx
+++ b/sal/osl/unx/process_impl.cxx
@@ -60,7 +60,7 @@
 #include "uunxapi.h"
 
 #ifdef ANDROID
-#include <lo-bootstrap.h>
+#include <osl/detail/android-bootstrap.h>
 #endif
 
 /***************************************
diff --git a/sal/osl/unx/thread.c b/sal/osl/unx/thread.c
index 4128d08..59a0514 100644
--- a/sal/osl/unx/thread.c
+++ b/sal/osl/unx/thread.c
@@ -37,6 +37,10 @@
 #include <rtl/textenc.h>
 #include <rtl/alloc.h>
 #include <sal/macros.h>
+#ifdef ANDROID
+#include <jni.h>
+#include <osl/detail/android-bootstrap.h>
+#endif
 
 #if defined LINUX && ! defined __FreeBSD_kernel__
 #include <sys/prctl.h>
@@ -288,8 +292,22 @@ static void* osl_thread_start_Impl (void* pData)
 
     if (!terminate)
     {
+#ifdef ANDROID
+        {
+            JNIEnv* env = 0;
+            int res = (*lo_get_javavm())->AttachCurrentThread(lo_get_javavm(), &env, NULL); // res == 0
+            fprintf (stderr, "new sal thread started and attached %d!\n", res);
+        }
+#endif
         /* call worker function */
         pImpl->m_WorkerFunction(pImpl->m_pData);
+
+#ifdef ANDROID
+        {
+            int res = (*lo_get_javavm())->DetachCurrentThread(lo_get_javavm());
+            fprintf (stderr, "detached finished sal thread %d!\n", res);
+        }
+#endif
     }
 
     /* call cleanup handler and leave */
diff --git a/sal/osl/unx/uunxapi.cxx b/sal/osl/unx/uunxapi.cxx
index 8abe57f..270f5c3 100644
--- a/sal/osl/unx/uunxapi.cxx
+++ b/sal/osl/unx/uunxapi.cxx
@@ -48,7 +48,7 @@
  #endif
 
  #ifdef ANDROID
- #include <lo-bootstrap.h>
+ #include <osl/detail/android-bootstrap.h>
  #endif
 
  //###########################
diff --git a/solenv/inc/unxandr/lo-bootstrap.h b/solenv/inc/unxandr/lo-bootstrap.h
deleted file mode 100644
index d78d88b..0000000
--- a/solenv/inc/unxandr/lo-bootstrap.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * Version: MPL 1.1 / GPLv3+ / LGPLv3+
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License or as specified alternatively below. You may obtain a copy of
- * the License at http: *www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * Major Contributor(s):
- * Copyright (C) 2011 Tor Lillqvist <tml at iki.fi> (initial developer)
- * Copyright (C) 2011 SUSE Linux http://suse.com (initial developer's employer)
- *
- * All Rights Reserved.
- *
- * For minor contributions see the git repository.
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
- * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
- * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
- * instead of those above.
- */
-
-#if defined(ANDROID)
-
-#include <jni.h>
-#include <dlfcn.h>
-#include <dirent.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct lo_apk_dir lo_apk_dir;
-
-char **lo_dlneeds(const char *library);
-
-void *lo_dlopen(const char *library);
-
-void *lo_dlsym(void *handle,
-               const char *symbol);
-
-int lo_dladdr(void *addr,
-              Dl_info *info);
-
-void *lo_apkentry(const char *filename,
-                  size_t *size);
-
-lo_apk_dir *lo_apk_opendir(const char *dirname);
-
-struct dirent *lo_apk_readdir(lo_apk_dir *dirp);
-
-int lo_apk_closedir(lo_apk_dir *dirp);
-
-int lo_apk_lstat(const char *path, struct stat *statp);
-
-int lo_dlcall_argc_argv(void *function,
-                        int argc,
-                        const char **argv);
-
-JavaVM *lo_get_javavm(void);
-
-struct android_app *lo_get_app(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/android/androidinst.cxx b/vcl/android/androidinst.cxx
index 4772a74..d867fa8 100644
--- a/vcl/android/androidinst.cxx
+++ b/vcl/android/androidinst.cxx
@@ -29,9 +29,10 @@
 #include <android/androidinst.hxx>
 #include <headless/svpdummies.hxx>
 #include <generic/gendata.hxx>
+#include <jni.h>
 #include <android/log.h>
 #include <android/looper.h>
-#include <lo-bootstrap.h>
+#include <osl/detail/android-bootstrap.h>
 #include <osl/detail/android_native_app_glue.h>
 #include <rtl/strbuf.hxx>
 
@@ -78,12 +79,13 @@ static void BlitFrameRegionToWindow(ANativeWindow *pWindow,
                                     const ARect &rSrcRect,
                                     int nDestX, int nDestY)
 {
-    fprintf (stderr, "Blit frame src %d,%d->%d,%d to position %d, %d\n",
+    fprintf (stderr, "Blit frame #2 src %d,%d->%d,%d to position %d, %d\n",
              rSrcRect.left, rSrcRect.top, rSrcRect.right, rSrcRect.bottom,
              nDestX, nDestY);
     ARect aRect;
     ANativeWindow_Buffer aOutBuffer;
     memset ((void *)&aOutBuffer, 0, sizeof (aOutBuffer));
+    fprintf (stderr, "pre lock\n");
     int32_t nRet = ANativeWindow_lock(pWindow, &aOutBuffer, &aRect);
     fprintf (stderr, "locked window %d returned rect: %d,%d->%d,%d "
              "buffer: %dx%d stride %d, format %d, bits %p\n",
@@ -110,6 +112,7 @@ static void BlitFrameRegionToWindow(ANativeWindow *pWindow,
         unsigned char *dp = ( (unsigned char *)aOutBuffer.bits +
                               aOutBuffer.stride * (y + nDestY) +
                               nDestX * 4 /* dest pixel size */ );
+        fprintf (stderr, "y %d, sp %p dp %p\n", y, sp, dp);
         for (unsigned int x = 0; x < (unsigned int)(aSrcRect.right - aSrcRect.left); x++)
         {
             dp[x*4 + 0] = sp[x*3 + 0]; // B
@@ -164,8 +167,7 @@ void AndroidSalInstance::onAppCmd (struct android_app* app, int32_t cmd)
             fprintf (stderr, "we have an app window ! %p %dx%x (%d)\n",
                      pWindow, aRect.right, aRect.bottom,
                      ANativeWindow_getFormat(pWindow));
-
-            RedrawWindows(pWindow);
+            mbQueueReDraw = true;
             break;
         }
         case APP_CMD_WINDOW_RESIZED:
@@ -176,13 +178,13 @@ void AndroidSalInstance::onAppCmd (struct android_app* app, int32_t cmd)
             fprintf (stderr, "app window resized to ! %p %dx%x (%d)\n",
                      pWindow, aRect.right, aRect.bottom,
                      ANativeWindow_getFormat(pWindow));
-            RedrawWindows(pWindow);
+            mbQueueReDraw = true;
             break;
         }
 
         case APP_CMD_WINDOW_REDRAW_NEEDED:
         {
-            RedrawWindows(pWindow);
+            mbQueueReDraw = true;
             break;
         }
 
@@ -259,6 +261,8 @@ extern "C" {
 
 AndroidSalInstance::AndroidSalInstance( SalYieldMutex *pMutex )
     : SvpSalInstance( pMutex )
+    , mpApp( NULL )
+    , mbQueueReDraw( false )
 {
     mpApp = lo_get_app();
     fprintf (stderr, "created Android Sal Instance for app %p window %p\n",
@@ -297,8 +301,12 @@ void AndroidSalInstance::DoReleaseYield (int nTimeoutMS)
     fprintf (stderr, "DoReleaseYield #2 %d ms\n", nTimeoutMS);
     void *outData = NULL;
     int outFd = 0, outEvents = 0;
+
+    if (mbQueueReDraw)
+        nTimeoutMS = 0;
+
     int nRet = ALooper_pollAll(nTimeoutMS, &outFd, &outEvents, &outData);
-    fprintf (stderr, "ret %d %d %d %p\n", nRet, outFd, outEvents, outData);
+    fprintf (stderr, "ret #3 %d %d %d %p\n", nRet, outFd, outEvents, outData);
 
     // acquire yield mutex again
     AcquireYieldMutex(nAcquireCount);
@@ -307,8 +315,10 @@ void AndroidSalInstance::DoReleaseYield (int nTimeoutMS)
     // set a callback in the native app glue's ALooper_addFd ?
     if (nRet == LOOPER_ID_MAIN)
         mpApp->cmdPollSource.process(mpApp, &mpApp->cmdPollSource);
-    if (nRet == LOOPER_ID_INPUT)
+    else if (nRet == LOOPER_ID_INPUT)
         mpApp->inputPollSource.process(mpApp, &mpApp->inputPollSource);
+    else if (mbQueueReDraw)
+        RedrawWindows (mpApp->window);
 }
 
 bool AndroidSalInstance::AnyInput( sal_uInt16 nType )
diff --git a/vcl/inc/android/androidinst.hxx b/vcl/inc/android/androidinst.hxx
index aec2735..e39f147 100644
--- a/vcl/inc/android/androidinst.hxx
+++ b/vcl/inc/android/androidinst.hxx
@@ -57,6 +57,7 @@ public:
 protected:
     virtual void DoReleaseYield( int nTimeoutMS );
     struct android_app *mpApp;
+    bool mbQueueReDraw;
 };
 
 #endif // ANDROID_SALINST_H


More information about the Libreoffice-commits mailing list