[Libreoffice-commits] core.git: 2 commits - android/experimental vcl/android
Tor Lillqvist
tml at iki.fi
Mon Feb 25 05:47:29 PST 2013
android/experimental/desktop/src/org/libreoffice/android/experimental/desktop/Desktop.java | 10
vcl/android/androidinst.cxx | 166 +++++-----
2 files changed, 92 insertions(+), 84 deletions(-)
New commits:
commit e6cccd3df8397a07d6d5e403fa08cf0fd658b31e
Author: Tor Lillqvist <tml at iki.fi>
Date: Mon Feb 25 14:24:39 2013 +0200
Use __android_log_print() instead of fprintf(stderr)
Printing to stderr is not at all any faster or more direct in an Android app
than just using the Android standard logging API.
Note that in a normal Android app, stdout and stderr are not connected
anywhere. (Just like in "GUI" subsystem (as opposed to "console") Windows
programs, heh.) It is our own code in sal/android/lo-bootstrap.c that
redirects stdout and stderr to pipes which we set up and which are read in a
separate thread that we start. The lines read are then, surprise, passed on to
__android_log_print(). Thus writes to stdout or stderr in "normal" LibreOffice
code aren't lost.
But in code that is by definition Android-specific it makes little sense to
use stdout and stderr.
(Much of the affected logging in this change is in NativeActivity-related #if
0'ed code, sure, so won't actually be reached.)
Change-Id: I409114f36f3e535bb144b4bde0d378110b3336a1
diff --git a/vcl/android/androidinst.cxx b/vcl/android/androidinst.cxx
index 8baea41..2ed1585 100644
--- a/vcl/android/androidinst.cxx
+++ b/vcl/android/androidinst.cxx
@@ -37,6 +37,10 @@
#include <rtl/strbuf.hxx>
#include <basebmp/scanlineformats.hxx>
+#define LOGTAG "LibreOffice/androidinst"
+#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, LOGTAG, __VA_ARGS__))
+#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOGTAG, __VA_ARGS__))
+
static bool bHitIdle = false;
class AndroidSalData : public SalGenericData
@@ -185,13 +189,13 @@ static sal_uInt16 KeyToCode(AInputEvent *event)
case AKEYCODE_BUTTON_START:
case AKEYCODE_BUTTON_SELECT:
case AKEYCODE_BUTTON_MODE:
- fprintf (stderr, "un-mapped keycode %d\n", nCode);
+ LOGI("un-mapped keycode %d\n", nCode);
nCode = 0;
break;
#undef MAP_SAME
#undef MAP
}
- fprintf (stderr, "mapped %d -> %d\n", AKeyEvent_getKeyCode(event), nCode);
+ LOGI("mapped %d -> %d\n", AKeyEvent_getKeyCode(event), nCode);
return nCode;
}
@@ -202,7 +206,7 @@ static void BlitFrameRegionToWindow(ANativeWindow_Buffer *pOutBuffer,
const ARect &rSrcRect,
int nDestX, int nDestY)
{
- fprintf (stderr, "Blit frame src %d,%d->%d,%d to position %d, %d\n",
+ LOGI("Blit frame src %d,%d->%d,%d to position %d, %d\n",
rSrcRect.left, rSrcRect.top, rSrcRect.right, rSrcRect.bottom,
nDestX, nDestY);
@@ -252,7 +256,7 @@ static void BlitFrameRegionToWindow(ANativeWindow_Buffer *pOutBuffer,
break;
}
default:
- fprintf (stderr, "unknown pixel format %d !\n", pOutBuffer->format);
+ LOGI("unknown pixel format %d !\n", pOutBuffer->format);
break;
}
}
@@ -271,7 +275,7 @@ void AndroidSalInstance::RedrawWindows(ANativeWindow *pWindow, ANativeWindow_Buf
ANativeWindow_Buffer aOutBuffer;
memset ((void *)&aOutBuffer, 0, sizeof (aOutBuffer));
- fprintf (stderr, "RedrawWindows\n");
+ LOGI("RedrawWindows\n");
int32_t nRet = 0;
if (pBuffer != NULL)
@@ -282,10 +286,10 @@ void AndroidSalInstance::RedrawWindows(ANativeWindow *pWindow, ANativeWindow_Buf
return;
// ARect aRect;
- fprintf (stderr, "pre lock #3\n");
+ LOGI("pre lock #3\n");
nRet = ANativeWindow_lock(pWindow, &aOutBuffer, NULL);
}
- fprintf (stderr, "Frame count: %d locked window %d returned " // rect: %d,%d->%d,%d "
+ LOGI("Frame count: %d locked window %d returned " // rect: %d,%d->%d,%d "
"buffer: %dx%d stride %d, format %d, bits %p\n",
(int)getFrames().size(),
nRet, // aRect.left, aRect.top, aRect.right, aRect.bottom,
@@ -311,7 +315,7 @@ void AndroidSalInstance::RedrawWindows(ANativeWindow *pWindow, ANativeWindow_Buf
if (pFrame->IsVisible())
{
- fprintf( stderr, "render visible frame %d\n", i );
+ LOGI("render visible frame %d\n", i );
#ifndef REGION_RE_RENDER
BlitFrameToWindow (&aOutBuffer, pFrame->getDevice());
#else
@@ -341,12 +345,12 @@ void AndroidSalInstance::RedrawWindows(ANativeWindow *pWindow, ANativeWindow_Buf
}
}
else
- fprintf (stderr, "no buffer for locked window\n");
+ LOGI("no buffer for locked window\n");
if (pBuffer && pWindow)
ANativeWindow_unlockAndPost(pWindow);
- fprintf (stderr, "done render!\n");
+ LOGI("done render!\n");
maRedrawRegion.SetEmpty();
mbQueueReDraw = false;
}
@@ -404,7 +408,7 @@ void AndroidSalInstance::GetWorkArea( Rectangle& rRect )
void AndroidSalInstance::onAppCmd (struct android_app* app, int32_t cmd)
{
- fprintf (stderr, "app cmd for app %p: %s\n", app, app_cmd_name(cmd));
+ LOGI("app cmd for app %p: %s\n", app, app_cmd_name(cmd));
ANativeWindow *pWindow = mpApp->window;
switch (cmd) {
case APP_CMD_INIT_WINDOW:
@@ -416,7 +420,7 @@ void AndroidSalInstance::onAppCmd (struct android_app* app, int32_t cmd)
pWindow, ANativeWindow_getWidth(pWindow),
ANativeWindow_getHeight(pWindow),
WINDOW_FORMAT_RGBA_8888);
- fprintf (stderr, "we have an app window ! %p %dx%x (%d) set %d\n",
+ LOGI("we have an app window ! %p %dx%x (%d) set %d\n",
pWindow, aRect.right, aRect.bottom,
ANativeWindow_getFormat(pWindow), nRet);
maRedrawRegion = Region( Rectangle( 0, 0, ANativeWindow_getWidth(pWindow),
@@ -429,15 +433,15 @@ void AndroidSalInstance::onAppCmd (struct android_app* app, int32_t cmd)
ARect aRect = { 0, 0, 0, 0 };
aRect.right = ANativeWindow_getWidth(pWindow);
aRect.bottom = ANativeWindow_getHeight(pWindow);
- fprintf (stderr, "app window resized to ! %p %dx%x (%d)\n",
- pWindow, aRect.right, aRect.bottom,
- ANativeWindow_getFormat(pWindow));
+ LOGI("app window resized to ! %p %dx%x (%d)\n",
+ pWindow, aRect.right, aRect.bottom,
+ ANativeWindow_getFormat(pWindow));
break;
}
case APP_CMD_WINDOW_REDRAW_NEEDED:
{
- fprintf (stderr, "redraw needed\n");
+ LOGI("redraw needed\n");
maRedrawRegion = Region( Rectangle( 0, 0, ANativeWindow_getWidth(pWindow),
ANativeWindow_getHeight(pWindow) ) );
mbQueueReDraw = true;
@@ -447,12 +451,12 @@ void AndroidSalInstance::onAppCmd (struct android_app* app, int32_t cmd)
case APP_CMD_CONTENT_RECT_CHANGED:
{
ARect aRect = mpApp->contentRect;
- fprintf (stderr, "content rect changed [ k/b popped up etc. ] %d,%d->%d,%d\n",
- aRect.left, aRect.top, aRect.right, aRect.bottom);
+ LOGI("content rect changed [ k/b popped up etc. ] %d,%d->%d,%d\n",
+ aRect.left, aRect.top, aRect.right, aRect.bottom);
break;
}
default:
- fprintf (stderr, "unhandled app cmd %d\n", cmd);
+ LOGI("unhandled app cmd %d\n", cmd);
break;
}
}
@@ -464,7 +468,7 @@ SalFrame *AndroidSalInstance::getFocusFrame() const
{
SalFrame *pFocus = SvpSalFrame::GetFocusFrame();
if (!pFocus) {
- fprintf (stderr, "no focus frame, re-focusing first visible frame\n");
+ LOGI("no focus frame, re-focusing first visible frame\n");
const std::list< SalFrame* >& rFrames( getFrames() );
for( std::list< SalFrame* >::const_iterator it = rFrames.begin(); it != rFrames.end(); ++it )
{
@@ -483,24 +487,24 @@ SalFrame *AndroidSalInstance::getFocusFrame() const
int32_t AndroidSalInstance::onInputEvent (struct android_app* app, AInputEvent* event)
{
bool bHandled = false;
- fprintf (stderr, "input event for app %p, event %p type %d source %d device id %d\n",
- app, event,
- AInputEvent_getType(event),
- AInputEvent_getSource(event),
- AInputEvent_getDeviceId(event));
+ LOGI("input event for app %p, event %p type %d source %d device id %d\n",
+ app, event,
+ AInputEvent_getType(event),
+ AInputEvent_getSource(event),
+ AInputEvent_getDeviceId(event));
switch (AInputEvent_getType(event))
{
case AINPUT_EVENT_TYPE_KEY:
{
int32_t nAction = AKeyEvent_getAction(event);
- fprintf (stderr, "key event keycode %d '%s' %s flags (0x%x) 0x%x\n",
- AKeyEvent_getKeyCode(event),
- nAction == AKEY_EVENT_ACTION_DOWN ? "down" :
- nAction == AKEY_EVENT_ACTION_UP ? "up" : "multiple",
- KeyMetaStateToString(AKeyEvent_getMetaState(event)).getStr(),
- AKeyEvent_getMetaState (event),
- AKeyEvent_getFlags (event));
+ LOGI("key event keycode %d '%s' %s flags (0x%x) 0x%x\n",
+ AKeyEvent_getKeyCode(event),
+ nAction == AKEY_EVENT_ACTION_DOWN ? "down" :
+ nAction == AKEY_EVENT_ACTION_UP ? "up" : "multiple",
+ KeyMetaStateToString(AKeyEvent_getMetaState(event)).getStr(),
+ AKeyEvent_getMetaState (event),
+ AKeyEvent_getFlags (event));
// FIXME: the whole SALEVENT_KEYMODCHANGE stuff is going to be interesting
// can we really emit that ? no input method madness required though.
@@ -534,26 +538,26 @@ int32_t AndroidSalInstance::onInputEvent (struct android_app* app, AInputEvent*
if (pFocus)
bHandled = pFocus->CallCallback( nEvent, &aEvent );
else
- fprintf (stderr, "no focused frame to emit event on\n");
+ LOGI("no focused frame to emit event on\n");
- fprintf( stderr, "bHandled == %s\n", bHandled? "true": "false" );
+ LOGI("bHandled == %s\n", bHandled? "true": "false" );
break;
}
case AINPUT_EVENT_TYPE_MOTION:
{
size_t nPoints = AMotionEvent_getPointerCount(event);
- fprintf (stderr, "motion event %d %g,%g %d points: %s\n",
- AMotionEvent_getAction(event),
- AMotionEvent_getXOffset(event),
- AMotionEvent_getYOffset(event),
- (int)nPoints,
- MotionEdgeFlagsToString(AMotionEvent_getEdgeFlags(event)).getStr());
+ LOGI("motion event %d %g,%g %d points: %s\n",
+ AMotionEvent_getAction(event),
+ AMotionEvent_getXOffset(event),
+ AMotionEvent_getYOffset(event),
+ (int)nPoints,
+ MotionEdgeFlagsToString(AMotionEvent_getEdgeFlags(event)).getStr());
for (size_t i = 0; i < nPoints; i++)
- fprintf(stderr, "\t%d: %g,%g - pressure %g\n",
- (int)i,
- AMotionEvent_getX(event, i),
- AMotionEvent_getY(event, i),
- AMotionEvent_getPressure(event, i));
+ LOGI("\t%d: %g,%g - pressure %g\n",
+ (int)i,
+ AMotionEvent_getX(event, i),
+ AMotionEvent_getY(event, i),
+ AMotionEvent_getPressure(event, i));
SalMouseEvent aMouseEvent;
sal_uInt16 nEvent = 0;
@@ -579,15 +583,15 @@ int32_t AndroidSalInstance::onInputEvent (struct android_app* app, AInputEvent*
if (pFocus)
bHandled = pFocus->CallCallback( nEvent, &aMouseEvent );
else
- fprintf (stderr, "no focused frame to emit event on\n");
+ LOGI("no focused frame to emit event on\n");
- fprintf( stderr, "bHandled == %s\n", bHandled? "true": "false" );
+ LOGI("bHandled == %s\n", bHandled? "true": "false" );
break;
}
default:
- fprintf (stderr, "unknown input event type %p %d\n",
- event, AInputEvent_getType(event));
+ LOGI("unknown input event type %p %d\n",
+ event, AInputEvent_getType(event));
break;
}
return bHandled ? 1 : 0;
@@ -625,25 +629,25 @@ AndroidSalInstance::AndroidSalInstance( SalYieldMutex *pMutex )
: SvpSalInstance( pMutex )
, mbQueueReDraw( false )
{
- fprintf (stderr, "created Android Sal Instance thread: %d\n",
- (int)pthread_self());
+ LOGI("created Android Sal Instance thread: %d\n",
+ (int)pthread_self());
}
AndroidSalInstance::~AndroidSalInstance()
{
- fprintf (stderr, "destroyed Android Sal Instance\n");
+ LOGI("destroyed Android Sal Instance\n");
}
void AndroidSalInstance::Wakeup()
{
- fprintf (stderr, "Wakeup alooper\n");
- fprintf (stderr, "busted - no global looper\n");
+ LOGI("Wakeup alooper\n");
+ LOGI("busted - no global looper\n");
}
void AndroidSalInstance::DoReleaseYield (int nTimeoutMS)
{
if (!bHitIdle)
- fprintf( stderr, "hit idle !\n" );
+ LOGI("hit idle !\n" );
bHitIdle = true;
#if 1
@@ -658,7 +662,7 @@ void AndroidSalInstance::DoReleaseYield (int nTimeoutMS)
static bool beenhere = false;
if (!beenhere)
{
- fprintf (stderr, "**** Huh, %s called in non-NativeActivity app\n", __FUNCTION__);
+ LOGI("**** Huh, %s called in non-NativeActivity app\n", __FUNCTION__);
beenhere = true;
}
return;
@@ -667,8 +671,8 @@ void AndroidSalInstance::DoReleaseYield (int nTimeoutMS)
// release yield mutex
sal_uLong nAcquireCount = ReleaseYieldMutex();
- fprintf (stderr, "DoReleaseYield #3 %d thread: %d ms\n",
- nTimeoutMS, (int)pthread_self());
+ LOGI("DoReleaseYield #3 %d thread: %d ms\n",
+ nTimeoutMS, (int)pthread_self());
struct android_poll_source *pSource = NULL;
int outFd = 0, outEvents = 0;
@@ -678,7 +682,7 @@ void AndroidSalInstance::DoReleaseYield (int nTimeoutMS)
int nRet;
nRet = ALooper_pollAll (nTimeoutMS, &outFd, &outEvents, (void**)&pSource);
- fprintf (stderr, "ret #6 %d %d %d %p\n", nRet, outFd, outEvents, pSource);
+ LOGI("ret #6 %d %d %d %p\n", nRet, outFd, outEvents, pSource);
// acquire yield mutex again
AcquireYieldMutex(nAcquireCount);
@@ -700,7 +704,7 @@ bool AndroidSalInstance::AnyInput( sal_uInt16 nType )
if( (nType & VCL_INPUT_TIMER) != 0 )
return CheckTimeout( false );
// FIXME: ideally we should check our input queue here ...
- fprintf (stderr, "FIXME: AnyInput returns false\n");
+ LOGI("FIXME: AnyInput returns false\n");
return false;
}
@@ -742,16 +746,16 @@ public:
{
long long area = rDamageRect.getWidth() * rDamageRect.getHeight();
// if( area > 32 * 1024 )
- fprintf( stderr, "bitmap damaged %d %d (%dx%d) area %lld\n",
- (int) rDamageRect.getMinX(),
- (int) rDamageRect.getMinY(),
- (int) rDamageRect.getWidth(),
- (int) rDamageRect.getHeight(),
- area );
+ LOGI("bitmap damaged %d %d (%dx%d) area %lld\n",
+ (int) rDamageRect.getMinX(),
+ (int) rDamageRect.getMinY(),
+ (int) rDamageRect.getWidth(),
+ (int) rDamageRect.getHeight(),
+ area );
if (rDamageRect.getWidth() <= 0 ||
rDamageRect.getHeight() <= 0)
{
- fprintf (stderr, "ERROR: damage region has tiny / negative size\n");
+ LOGE("Damage region has tiny / negative size\n");
return;
}
Rectangle aRect( std::max((long) 0, (long) rDamageRect.getMinX() ),
@@ -817,10 +821,10 @@ void SalAbort( const rtl::OUString& rErrorText, bool bDumpCore )
rtl::OUString aError( rErrorText );
if( aError.isEmpty() )
aError = rtl::OUString::createFromAscii("Unknown application error");
- ::fprintf( stderr, "%s\n", rtl::OUStringToOString(rErrorText, osl_getThreadTextEncoding()).getStr() );
+ LOGI("%s\n", rtl::OUStringToOString(rErrorText, osl_getThreadTextEncoding()).getStr() );
- __android_log_print(ANDROID_LOG_INFO, "LibreOffice", "SalAbort: '%s'",
- rtl::OUStringToOString(aError, RTL_TEXTENCODING_ASCII_US).getStr());
+ LOGI("SalAbort: '%s'",
+ rtl::OUStringToOString(aError, RTL_TEXTENCODING_ASCII_US).getStr());
if( bDumpCore )
abort();
else
@@ -847,7 +851,7 @@ SalData::~SalData()
// This is our main entry point:
SalInstance *CreateSalInstance()
{
- fprintf (stderr, "Android: CreateSalInstance!\n");
+ LOGI("Android: CreateSalInstance!\n");
AndroidSalInstance* pInstance = new AndroidSalInstance( new SalYieldMutex() );
new AndroidSalData( pInstance );
// FIXME: we init VCL in a different thread from where we run the mainloop [!] ...
@@ -869,12 +873,12 @@ int AndroidSalSystem::ShowNativeDialog( const rtl::OUString& rTitle,
int nDefButton )
{
(void)rButtons; (void)nDefButton;
- fprintf (stderr, "LibreOffice native dialog '%s': '%s'\n",
- rtl::OUStringToOString(rTitle, RTL_TEXTENCODING_ASCII_US).getStr(),
- rtl::OUStringToOString(rMessage, RTL_TEXTENCODING_ASCII_US).getStr());
- __android_log_print(ANDROID_LOG_INFO, "LibreOffice", "Dialog '%s': '%s'",
- rtl::OUStringToOString(rTitle, RTL_TEXTENCODING_ASCII_US).getStr(),
- rtl::OUStringToOString(rMessage, RTL_TEXTENCODING_ASCII_US).getStr());
+ LOGI("LibreOffice native dialog '%s': '%s'\n",
+ rtl::OUStringToOString(rTitle, RTL_TEXTENCODING_ASCII_US).getStr(),
+ rtl::OUStringToOString(rMessage, RTL_TEXTENCODING_ASCII_US).getStr());
+ LOGI("Dialog '%s': '%s'",
+ rtl::OUStringToOString(rTitle, RTL_TEXTENCODING_ASCII_US).getStr(),
+ rtl::OUStringToOString(rMessage, RTL_TEXTENCODING_ASCII_US).getStr());
if (AndroidSalInstance::getInstance() != NULL)
{
@@ -891,7 +895,7 @@ int AndroidSalSystem::ShowNativeDialog( const rtl::OUString& rTitle,
aVclErrBox.Execute();
}
else
- fprintf (stderr, "VCL not initialized\n");
+ LOGI("VCL not initialized\n");
return 0;
}
@@ -909,19 +913,19 @@ Java_org_libreoffice_experimental_desktop_Desktop_renderVCL(JNIEnv *env,
int ret;
if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < 0) {
- fprintf(stderr, "AndroidBitmap_getInfo() failed ! error=%d", ret);
+ LOGI("AndroidBitmap_getInfo() failed ! error=%d", ret);
return;
}
#if 0
if (info.format != ANDROID_BITMAP_FORMAT_RGB_565) {
- fprintf(stderr, "Bitmap format is not RGB_565 !");
+ LOGI("Bitmap format is not RGB_565 !");
return;
}
#endif
if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) {
- fprintf(stderr, "AndroidBitmap_lockPixels() failed ! error=%d", ret);
+ LOGI("AndroidBitmap_lockPixels() failed ! error=%d", ret);
}
/*
commit 511b9fefe20d5a8a5ca003a7a60b0423d1d3e5be
Author: Tor Lillqvist <tml at iki.fi>
Date: Mon Feb 25 14:17:31 2013 +0200
Use actual size of view instead of hardcoded 1000x600
The View size is available only after the view has been connected to the
activity, it seems, so move the Bitmap creation to onDraw().
Note that the code in SvpSalFrame::SvpSalFrame() in vcl/headless/svpframe.cxx
still hardcodes another (!) size, 800x600. This affcects the size of the
desktop-style "top-level window" displayed by the android/experimental/desktop
app. I didn't yet figure out the right way to pass the actual view size to the
SvpSalFrame. And there is also a hardcoded third (!) size, 1280x750, in
AndroidSalInstance::GetWorkArea(), although I don't know what that affects, if
anything.
Change-Id: I042bf764cd66efa7069c36601170b90d57fa174c
diff --git a/android/experimental/desktop/src/org/libreoffice/android/experimental/desktop/Desktop.java b/android/experimental/desktop/src/org/libreoffice/android/experimental/desktop/Desktop.java
index 3bf2da9..8d5b97d 100644
--- a/android/experimental/desktop/src/org/libreoffice/android/experimental/desktop/Desktop.java
+++ b/android/experimental/desktop/src/org/libreoffice/android/experimental/desktop/Desktop.java
@@ -153,7 +153,6 @@ public class Desktop
class MyXController
implements XController
{
-
XFrame frame;
XModel model;
@@ -297,12 +296,16 @@ public class Desktop
public BitmapView()
{
super(Desktop.this);
- mBitmap = Bitmap.createBitmap(1000, 600, Bitmap.Config.ARGB_8888);
}
- @Override protected void onDraw(Canvas canvas) {
+ @Override protected void onDraw(Canvas canvas)
+ {
// canvas.drawColor(0xFF1ABCDD);
+ if (mBitmap == null) {
+ Log.i(TAG, "calling Bitmap.createBitmap(" + getWidth() + ", " + getHeight() + ", Bitmap.Config.ARGB_8888)");
+ mBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
+ }
renderVCL(mBitmap);
canvas.drawBitmap(mBitmap, 0, 0, null);
@@ -311,4 +314,5 @@ public class Desktop
}
}
}
+
// vim:set shiftwidth=4 softtabstop=4 expandtab:
More information about the Libreoffice-commits
mailing list