设为首页 加入收藏

TOP

利用BLCR加快Android的启动过程(四)
2014-11-24 07:48:44 来源: 作者: 【 】 浏览:9
Tags:利用 BLCR 加快 Android 启动 过程
in/busybox sh


ec()


{


/system/bin/busybox echo $* >/dev/console;


}


if [ -f /data/zygote.blcr ]; then


ec "***************load saved zygote********************"


/system/bin/cr_restart -f /data/zygote.blcr ;


else


ec "optimised by blcr"


ec "**************start a new zygote******************"


ec "you can contact the author through Email:shuaiwen@yahoo.com.cn"


ec "this is only an original demon version"


ec "release pid:$$."


/system/bin/cr_checkpoint


ec "release pid:$$."


/system/bin/cr_checkpoint


ec "release pid:$$."


/system/bin/app_process $*


fi


需要指出的是运行上面几个不带参数的cr_checkpoint目的为将后面的zygote的pid退后一些,以防下次checkpoint时候遇到pid冲突而导致checkpoint失败。


加入该功能后当系统首次启动会创建/data/zygote.blcr文件,由于需要checkpoint,导致比正常启动时间慢较多。后续只要该文件存在,系统就会跨过类加载过程,进而加快启动速度。


4 测试验证


下表列出了虚拟机加入blcr前和blcr后的10次的启动速度。


Emulator启动参数如下:


emulator.exe -kernel zImage -show-kernel -partition-size 200 -memory 200 -skindir ./skins -skin WQVGA432 -shell -sysdir ./ -data userdata.img -ramdisk ramdisk.img -system system.img -sdcard sdcard.img -sdcard sdcard.img



模式
启动时间(单位:秒)

采用blcr
42
43
42
36
42
41
42
38
39
43

正常启动
64
63
50
57
65
54
52
45
53
49


启用blcr后平均启动时间为41,相比正常启动平均时间55秒快了14秒。启动时间的改善是明显的。





参考1:http://osdir.com/ml/android-platform/2009-07/msg00276.html



附部分android.mk文件



cat ./libcr/Android.mk


# Copyright 2006 The Android Open Source Project



LOCAL_PATH := $(my-dir)



include $(CLEAR_VARS)


LOCAL_SHARED_LIBRARIES := libcutils


LOCAL_SHARED_LIBRARIES += libdl


LOCAL_SHARED_LIBRARIES += libc


lib_SOURCES = \


cr_omit.c



LOCAL_SRC_FILES:= $(lib_SOURCES)



LOCAL_C_INCLUDES := \


$(KERNEL_HEADERS) \


$(LOCAL_PATH)/../include \


$(LOCAL_PATH)/../ \


$(LOCAL_PATH)/arch/arm/



LOCAL_CFLAGS := -DHAVE_CONFIG_H -DSHUAIWEN


LOCAL_PRELINK_MODULE := false


LOCAL_MODULE := libcr_omit


include $(BUILD_SHARED_LIBRARY)



#libcr_run.so


include $(CLEAR_VARS)


LOCAL_SHARED_LIBRARIES := libcutils


LOCAL_SHARED_LIBRARIES += libdl


LOCAL_SHARED_LIBRARIES += libc


lib_SOURCES = \


cr_run.c



LOCAL_SRC_FILES:= $(lib_SOURCES)



LOCAL_C_INCLUDES := \


$(KERNEL_HEADERS) \


$(LOCAL_PATH)/../include \


$(LOCAL_PATH)/../ \


$(LOCAL_PATH)/arch/arm/



LOCAL_CFLAGS := -DHAVE_CONFIG_H -DSHUAIWEN


LOCAL_PRELINK_MODULE := false


LOCAL_MODULE := libcr_run


include $(BUILD_SHARED_LIBRARY)



#libcr


include $(CLEAR_VARS)


LOCAL_SHARED_LIBRARIES := libcutils


LOCAL_SHARED_LIBRARIES += libdl


LOCAL_SHARED_LIBRARIES += libc


lib_SOURCES = \


cr_async.c.arm \


cr_trace.c \


cr_core.c.arm \


cr_sig_sync.c.arm \


cr_cs.c.arm \


cr_pthread.c \


cr_strerror.c \


cr_request.c \


cr_syscall.c.arm \


cr_omit.c \


cr_run.c



LOCAL_SRC_FILES:= $(lib_SOURCES)



LOCAL_C_INCLUDES := \


$(KERNEL_HEADERS) \


$(LOCAL_PATH)/../include \


$(LOCAL_PATH)/../ \


$(LOCAL_PATH)/arch/arm/



LOCAL_CFLAGS := -DHAVE_CONFIG_H -DSHUAIWEN -g


LOCAL_PRELINK_MODULE := false


LOCAL_MODULE := libcr


include $(BUILD_SHARED_LIBRARY)



cat ./util/cr_restart/Android.mk


LOCAL_PATH := $(my-dir)



include $(CLEAR_VARS)


LOCAL_SHARED_LIBRARIES := libcutils


LOCAL_SHARED_LIBRARIES += libdl


LOCAL_SHARED_LIBRARIES += libc


LOCAL_SHARED_LIBRARIES += libcr_run


LOCAL_SHARED_LIBRARIES += libcr


LOCAL_SRC_FILES:=cr_restart.c


LOCAL_C_INCLUDES := \


$(

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在Android中加入抓屏软件fbdump. 下一篇在Android中加入充电指示

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++ Lambda表达式保 (2025-12-26 05:49:45)
·C++ Lambda表达式的 (2025-12-26 05:49:42)
·深入浅出 C++ Lambda (2025-12-26 05:49:40)
·C语言指针从入门到基 (2025-12-26 05:21:36)
·【C语言指针初阶】C (2025-12-26 05:21:33)