From e806b23e27d873516ba2c232c7d5f6c3bbfad370 Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Fri, 7 Oct 2011 12:46:20 +0100 Subject: ARM opts in draw_scale.c; updated android build opts. Kammerer reports 90%+ of CPU time is spent in the image scaling code for his documents on Android. In this commit we provide ARM optimised cores for the common scaling routines (1/2/4 components). Tests indicate this doubles the speed of rendering for a bitmap heavy PDF file on an HTC desire. This code is included if ARCH_ARM is defined. If ARCH_THUMB is defined then extra instructions are added to ensure correct interworking. We also update the Android jni makefiles to set these defines. We update the ReadMe.txt with more explicit instructions and update with more modern ndk/sdk versions. We update build.xml in line with new sdk releases. --- android/jni/Core.mk | 3 ++- android/jni/mupdf.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'android/jni') diff --git a/android/jni/Core.mk b/android/jni/Core.mk index 4c3e75b5..7f145c60 100644 --- a/android/jni/Core.mk +++ b/android/jni/Core.mk @@ -4,6 +4,8 @@ include $(CLEAR_VARS) MY_ROOT := ../.. +LOCAL_CFLAGS += -DARCH_ARM -DARCH_THUMB + LOCAL_C_INCLUDES := \ ../thirdparty/jbig2dec \ ../thirdparty/openjpeg-1.4/libopenjpeg \ @@ -53,7 +55,6 @@ LOCAL_SRC_FILES := \ $(MY_ROOT)/fitz/stm_buffer.c \ $(MY_ROOT)/fitz/stm_open.c \ $(MY_ROOT)/fitz/stm_read.c \ - $(MY_ROOT)/draw/arch_arm.c \ $(MY_ROOT)/draw/arch_port.c \ $(MY_ROOT)/draw/draw_affine.c \ $(MY_ROOT)/draw/draw_blend.c \ diff --git a/android/jni/mupdf.c b/android/jni/mupdf.c index 463899af..a3d45d8d 100644 --- a/android/jni/mupdf.c +++ b/android/jni/mupdf.c @@ -17,6 +17,9 @@ /* Set to 1 to enable debug log traces. */ #define DEBUG 0 +/* Enable to log rendering times (render each frame 100 times and time) */ +#undef TIME_DISPLAY_LIST + /* Globals */ fz_colorspace *colorspace; fz_glyph_cache *glyphcache; @@ -190,7 +193,22 @@ Java_com_artifex_mupdf_MuPDFCore_drawPage(JNIEnv *env, jobject thiz, jobject bit ctm = fz_concat(ctm, fz_scale(xscale, yscale)); bbox = fz_round_rect(fz_transform_rect(ctm,currentMediabox)); dev = fz_new_draw_device(glyphcache, pix); +#ifdef TIME_DISPLAY_LIST + { + clock_t time; + int i; + + LOGE("Executing display list"); + time = clock(); + for (i=0; i<100;i++) { +#endif fz_execute_display_list(currentPageList, dev, ctm, bbox); +#ifdef TIME_DISPLAY_LIST + } + time = clock() - time; + LOGE("100 renders in %d (%d per sec)", time, CLOCKS_PER_SEC); + } +#endif fz_free_device(dev); fz_drop_pixmap(pix); LOGE("Rendered"); -- cgit v1.2.3