1 测试工具的实现
1.1 调研目的
目前正在进行针对Unicore架构的Dalvik虚拟机改写,为了保证整个Android操作系统在Unicore上的正常运行,我们试图先独立测试改写后的Dalvik虚拟机;而Android2.1源码中包含了dalvik虚拟机的测试工具,其目录位于/android2.1/dalvik/tests下,我们先对它进行调研,看能否用它来测试我们改写后的dalvik虚拟机。
调研分为三部分进行,首先了解该测试工具的实现方式,其次介绍它的使用方法,最后评估用它测试修改后的dalvik虚拟机的可行性。
1.2 tests简介
首先分析/android2.1/dalvik/tests目录的结构:
-tests dalvik测试工具和测试代码文件夹。
--001——078 文件夹,保存了78个测试代码,主要由/src/*.java(测试所需代码)
以及xpected.txt(测试期望结果文档)和info.txt(测试说明文档);
--ect 试工具的最终实现脚本,用Linux shell命令格式写成;
--run-all-tests 执行文件,测试所有78个测试代码;
--run-test 可执行文件,指定参数来测试特定的测试代码。
1.3 测试工具的实现
通过上节的介绍,要理解测试工具是如何实现对dalvik虚拟机的测试,就必须理解run-test可执行文件(run-all-tests可以看做是逐一调用run-tests),下面将具体介绍该可执行文件的实现方式。
1.3.1 run-test的参数
1.3.1.1 综述
进入/android2.1/dalvik/tests,在Linux shell下输入命令:
./run-test –help
可以出现使用帮助,罗列并解释如下:
run-test –help 打印帮助信息
run-test [options] [test-name] 正常运行命令的格式
run-test --dev [options] [test-name] 开发模式(运行结果dump到stdout)
run-test --update [options] [test-name] 更新模式(运行结果代替expect.txt)
运行参数:
--fast 使用快速解释器(默认)
-jit 使用JIT
--portable 使用可移植的解释器
--debug 等待调试器的连接
--no-verify 关闭校对功能(默认打开)
--no-optimize 关闭代码优化功能(默认打开)
--no-precise 关闭精确GC功能(默认打开)
--zygote 从Zygote进程创建当前进程,如果使用,当前运行参数会被忽视
--local 使用主机-本地(host-local)模拟器
--valgrind 本地运行时使用内存监测
--reference 使用主机-本地参考(host-local reference)模拟器
通过帮助信息我们了解到,run-test有正常模式、开发模式、更新模式三种模式和多种参数,下面对参数的含义进行更详细的说明,并评估了该参数对于我们使用本测试工具的价值,在下文中我们根据需要进一步调研一部分参数:
参数 含义 价值
fast dalvik的解释器采用快速解释器,与可移植型解释器相对 高
jit android2.2开始采用的jit技术 低
portable dalvik解释器采用可移植型解释器,与快速解释器相对 高
debug 调试用,等待调试器连接 高
verify dexopt的校对模式,dexopt用于dex代码的优化 中
optimize dexopt的优化模式 中
precise GC管理的一个选项 低
zygote 直接从Zygote进程创建测试进程 中
local 使用local设备(不是host上的虚拟机)来测试 高
valgrind --local并且添加了内存管理的东西 低
reference 可使用host上的模拟器,模拟local设备的虚拟机进行测试 高