Merge pull request #1491 from akallabeth/android_profiler

Android profiler
This commit is contained in:
Bernhard Miklautz 2013-10-01 00:53:35 -07:00
commit 2cb6f5407a
6 changed files with 115 additions and 2 deletions

View File

@ -277,7 +277,17 @@ if(ANDROID)
else()
message(STATUS "FREERDP_ANDROID_EXTERNAL_SSL_PATH not set! - Needs to be set if openssl is not found in the android NDK (which usually isn't)")
endif()
if(WITH_GPROF)
if (NOT FREERDP_ANDROID_EXTERNAL_PROFILER_PATH)
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler")
set(FREERDP_ANDROID_EXTERNAL_PROFILER_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler")
else()
message(STATUS "FREERDP_ANDROID_EXTERNAL_PROFILER_PATH not set!")
endif()
endif()
endif()
endif()
set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_ANDROID_EXTERNAL_SSL_PATH})
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/client/Android/FreeRDPCore/libs/${ANDROID_ABI})
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/scripts/regenerate_jni_headers.sh.cmake ${CMAKE_CURRENT_SOURCE_DIR}/scripts/regenerate_jni_headers.sh @ONLY)
@ -451,6 +461,16 @@ set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
# Android profiling
if(ANDROID)
if(WITH_GPROF)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
set(PROFILER_LIBRARIES
"${FREERDP_ANDROID_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a")
include_directories("${FREERDP_ANDROID_EXTERNAL_PROFILER_PATH}")
endif()
endif()
# Unit Tests
include(CTest)

View File

@ -34,6 +34,10 @@
#include "android_debug.h"
#include "android_cliprdr.h"
#if defined(WITH_GPROF)
#include "jni/prof.h"
#endif
struct thread_data
{
freerdp* instance;
@ -378,6 +382,10 @@ JNIEXPORT jint JNICALL jni_freerdp_new(JNIEnv *env, jclass cls)
{
freerdp* instance;
#if defined(WITH_GPROF)
monstartup("libfreerdp-android.so");
#endif
// create instance
instance = freerdp_new();
instance->PreConnect = android_pre_connect;
@ -401,6 +409,10 @@ JNIEXPORT void JNICALL jni_freerdp_free(JNIEnv *env, jclass cls, jint instance)
{
freerdp* inst = (freerdp*)instance;
freerdp_free(inst);
#if defined(WITH_GPROF)
moncleanup();
#endif
}
JNIEXPORT jboolean JNICALL jni_freerdp_connect(JNIEnv *env, jclass cls, jint instance)

View File

@ -12,6 +12,7 @@ endif()
option(WITH_MANPAGES "Generate manpages." ON)
option(WITH_PROFILER "Compile profiler." OFF)
option(WITH_GPROF "Compile with GProf profiler." OFF)
if((TARGET_ARCH MATCHES "x86|x64") AND (NOT DEFINED WITH_SSE2))
option(WITH_SSE2 "Enable SSE2 optimization." ON)

View File

@ -37,6 +37,7 @@
/* Options */
#cmakedefine WITH_PROFILER
#cmakedefine WITH_GPROF
#cmakedefine WITH_SSE2
#cmakedefine WITH_NEON
#cmakedefine WITH_IPP

View File

@ -52,12 +52,13 @@ if(MONOLITHIC_BUILD)
set(${MODULE_PREFIX}_OBJECTS ${${MODULE_PREFIX}_OBJECTS} "$<TARGET_OBJECTS:${MODULE_NAME}-${${MODULE_PREFIX}_SUBMODULE}>")
endforeach()
add_library(${MODULE_NAME} dummy.c ${${MODULE_PREFIX}_OBJECTS})
add_library(${MODULE_NAME} dummy.c
${${MODULE_PREFIX}_OBJECTS})
set_target_properties(${MODULE_NAME} PROPERTIES LINKER_LANGUAGE C)
set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION} PREFIX "lib")
target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})
target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS} ${PROFILER_LIBRARIES})
install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)

View File

@ -0,0 +1,78 @@
#!/bin/sh
#
# This script checks out or updates and builds third party libraries
# required for the android build.
#
# Specifically these are:
# - OpenSSL
# - Android NDK Profiler
#
# Usage:
# android_setup_build_env.sh <source root>
OPENSSL_SCM=https://github.com/bmiklautz/android-external-openssl-ndk-static
NDK_PROFILER_SCM=https://github.com/richq/android-ndk-profiler
SCRIPT_NAME=`basename $0`
if [ $# -ne 1 ]; then
echo "Missing command line argument."
echo "$SCRIPT_NAME <FreeRDP source>"
exit -1
fi
if [ ! -d $1 ]; then
echo "Argument '$1' is not a directory."
exit -2
fi
SRC=`realpath $1`
echo "Using '$SRC' as root."
echo "Preparing OpenSSL..."
OPENSSL_SRC=$SRC/external/openssl
if [ -d $OPENSSL_SRC ]; then
cd $OPENSSL_SRC
git pull
RETVAL=$?
else
git clone $OPENSSL_SCM $OPENSSL_SRC
RETVAL=$?
cd $OPENSSL_SRC
fi
if [ $RETVAL -ne 0 ]; then
echo "Failed to execute git command [$RETVAL]"
exit -3
fi
ndk-build
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
echo "Failed to execute ndk-build command [$RETVAL]"
exit -4
fi
echo "Preparing NDK profiler..."
NDK_PROFILER_SRC=$SRC/external/android-ndk-profiler
if [ -d $NDK_PROFILER_SRC ]; then
cd $NDK_PROFILER_SRC
git pull
RETVAL=$?
else
git clone $NDK_PROFILER_SCM $NDK_PROFILER_SRC
RETVAL=$?
cd $NDK_PROFILER_SRC
fi
if [ $RETVAL -ne 0 ]; then
echo "Failed to execute git command [$RETVAL]"
exit -5
fi
ndk-build
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
echo "Failed to execute ndk-build command [$RETVAL]"
exit -6
fi
echo "Prepared external libraries, you can now build the application."
exit 0