【发布时间】:2015-03-07 19:42:11
【问题描述】:
我正在开发一个 Eclipse 插件,它需要计算 Eclipse 启动所需的时间。
我可以通过使用org.eclipse.ui.startup扩展点在我的插件中获取自JVM启动以来的时间量,并使用ManagementFactory.getRuntimeMXBean().getUptime()或eclipse.startTime系统属性记录时间。
但是,在启动期间,Eclipse 可能会询问用户工作空间位置,这将计入 JVM 启动时间。由于我的插件试图测量非用户交互时间,这使得上述方法相当无用(除非用户选择了默认工作区位置,但不能保证是这种情况)。
理想情况下,我想知道用户关闭“选择工作区”对话框的时间(或者,如果用户使用默认工作区,那么等效时间)。或者其他尽可能接近的时刻。
我做了一些研究,似乎没有任何官方的扩展点。
我有一种感觉,在足够早的启动级别 (2) 上运行自定义 OSGi 捆绑包可能会发生类似的事情。但是,我不确定它是否真的有效:
- 也许工作区选择对话框是从某个 Eclipse 核心插件中显示的,像其他插件一样从启动级别 4 开始?
- 即使我设法编写了这样一个包,我是否需要修改 Eclipse
config.ini以在其中列出它?或者我如何保证它将在某个启动级别启动(如果它不是一个真正的 Eclipse 插件,而是一个自定义包)? This article 提到了p2.inf,但我的实验还没有成功。
由于我在 OSGi 和 Eclipse 插件开发方面没有太多经验,也许我错过了一些相当明显的东西,并且解决方案比我想象的要简单得多?
更新
经过一番研究,我发现了一个早期的扩展点:StartupMonitor 服务(通常用于自定义启动屏幕或提供其他类型的启动进度监视器,请参阅here 了解更多详细信息)。这可能是我需要的候选者,现在我只需要弄清楚如何让 Eclipse 意识到它(我怀疑我需要将它添加到 config.ini)。
我正在考虑的另一个选择是实现一个 JVM 代理和工具 Eclipse IDEApplication 类,添加一些我需要的代码 sn-ps。然后在eclipse.ini 的JVM 参数中添加该JVM 代理。实际上可能是最简单的。
【问题讨论】:
标签: java eclipse-plugin osgi equinox osgi-bundle