CommandScheduler
public
class
CommandScheduler
extends Object
implements
ICommandScheduler
java.lang.Object | |
↳ | com.android.tradefed.command.CommandScheduler |
排程器,可在所有可用裝置上執行 TradeFederation 指令。
會嘗試根據執行時間的總執行次數,為要執行的指令排定優先順序,例如不常執行或執行速度快的指令,會優先於執行時間較長的指令。
會在背景持續執行,直到關機為止。
摘要
巢狀類別 | |
---|---|
enum |
CommandScheduler.HostState
主機不同狀態的列舉值 |
公用建構函式 | |
---|---|
CommandScheduler()
建立 |
公用方法 | |
---|---|
boolean
|
addCommand(String[] args)
將指令新增至排程器。 |
void
|
addCommandFile(String cmdFilePath,
將指定檔案中的所有指令新增至排程器 |
void
|
await()
等待排程器開始執行,包括等待舊 TF 的移交作業完成 (如果適用的話)。 |
static
TradefedDelegator
|
checkDelegation(String[] args)
根據指令列建立委派者,看看是否需要委派執行作業。 |
void
|
completeHandover()
通知指令排程器,已啟動的交接序列已完成,並應在預設通訊埠上重新初始化其遠端管理器。 |
static
|
createReleaseMap(IInvocationContext context, Throwable e)
建立裝置狀態對應,以便適當釋放裝置。 |
ISandbox
|
createSandbox()
建立叫用作業將用於執行的 |
void
|
displayCommandQueue(PrintWriter printWriter)
輸出指令執行佇列狀態的詳細偵錯資訊。 |
void
|
displayCommandsInfo(PrintWriter printWriter, String regex)
輸出目前指令清單。 |
void
|
displayInvocationsInfo(PrintWriter printWriter)
顯示目前叫用作業清單。 |
void
|
dumpCommandsXml(PrintWriter printWriter, String regex)
針對指令轉儲已展開的 XML 檔案,其中包含所有目前指令指定的 |
void
|
execCommand(ICommandScheduler.IScheduledInvocationListener listener, ITestDevice device, String[] args)
直接在已指派的裝置上執行指令。 |
void
|
execCommand(IInvocationContext context, ICommandScheduler.IScheduledInvocationListener listener, String[] args)
直接配置裝置並執行指令,不必使用現有的 |
void
|
execCommand(ICommandScheduler.IScheduledInvocationListener listener, String[] args)
直接配置裝置並執行指令,但不將指令新增至指令佇列。 |
CommandFileWatcher
|
getCommandFileWatcher()
取得此排程器的適當 |
int
|
getExecutingCommandCount()
傳回執行狀態的 Command 數量。 |
CommandScheduler.HostState
|
getHostState()
|
String
|
getInvocationInfo(int invocationId)
指定叫用 ID 後,傳回叫用作業的相關資訊。 |
CommandRunner.ExitCode
|
getLastInvocationExitCode()
傳回上次執行的呼叫的錯誤代碼。 |
Throwable
|
getLastInvocationThrowable()
從上次執行的叫用作業傳回 |
int
|
getReadyCommandCount()
傳回佇列中處於就緒狀態的指令數量。 |
long
|
getShutdownTimeout()
|
void
|
handoverInitiationComplete()
通知指令排程器,目前使用的裝置和指令已完成初始交接交換作業,並可開始排程作業。 |
boolean
|
handoverShutdown(int handoverPort)
啟動 |
void
|
notifyFileChanged(File cmdFile,
|
void
|
removeAllCommands()
從排程器中移除所有指令 |
void
|
run()
這個執行緒的主要執行區塊。 |
void
|
setClearcutClient(ClearcutClient client)
設定用戶端以回報束縛資料 |
boolean
|
shouldShutdownOnCmdfileError()
如果我們需要因指令錯誤而關閉排程器,則傳回 true |
void
|
shutdown()
嘗試安全關閉指令排程器。 |
void
|
shutdownHard(boolean killAdb)
嘗試強制關閉指令排程器。 |
void
|
shutdownHard()
嘗試強制關閉指令排程器。 |
void
|
shutdownOnEmpty()
與 |
void
|
start()
啟動排程器,包括設定記錄、初始化 |
boolean
|
stopInvocation(ITestInvocation invocation)
停止執行中的叫用作業。 |
boolean
|
stopInvocation(int invocationId, String cause)
指定 ID 即可停止執行中的叫用作業。 |
受保護的方法 | |
---|---|
void
|
cleanUp()
關閉記錄,並在退出前執行任何必要的清理作業。 |
IConfiguration
|
createConfiguration(String[] args)
|
IInvocationContext
|
createInvocationContext()
|
IConfigurationFactory
|
getConfigFactory()
工廠方法,用於取得 |
IDeviceManager
|
getDeviceManager()
工廠方法,用於取得 |
TradefedFeatureServer
|
getFeatureServer()
|
IHostOptions
|
getHostOptions()
|
IKeyStoreClient
|
getKeyStoreClient()
使用 |
void
|
initLogging()
初始化 ddmlib 記錄。 |
boolean
|
isShutdown()
|
boolean
|
isShuttingDown()
|
void
|
processReadyCommands(IDeviceManager manager)
|
void
|
waitForAllInvocationThreads()
等待所有叫用執行緒完成。 |
公用建構函式
公用方法
addCommand
public boolean addCommand (String[] args)
將指令新增至排程器。
指令基本上是執行設定的例項,以及相關聯的引數。
如果指定「--help」引數,設定的說明文字就會輸出至 stdout。否則,系統會將設定新增至佇列以便執行。
參數 | |
---|---|
args |
String :設定引數。 |
傳回 | |
---|---|
boolean |
true :指令是否已成功新增 |
擲回 | |
---|---|
ConfigurationException |
addCommandFile
public void addCommandFile (String cmdFilePath,extraArgs)
將指定檔案中的所有指令新增至排程器
參數 | |
---|---|
cmdFilePath |
String :指令檔案的檔案系統路徑 |
extraArgs |
:String 引數的 ERROR(/List) ,用於附加至從檔案解析的每個指令。可以留空,但不得為空值。 |
擲回 | |
---|---|
ConfigurationException |
await
public void await ()
等待排程器開始執行,包括等待舊 TF 的移交作業完成 (如適用)。
checkDelegation
public static TradefedDelegator checkDelegation (String[] args)
根據指令列建立委派者,看看是否需要委派執行作業。
參數 | |
---|---|
args |
String |
傳回 | |
---|---|
TradefedDelegator |
擲回 | |
---|---|
ConfigurationException |
completeHandover
public void completeHandover ()
通知指令排程器,已啟動的交接序列已完成,並且應在預設通訊埠上重新初始化其遠端管理器。
createReleaseMap
public staticcreateReleaseMap (IInvocationContext context, Throwable e)
建立裝置狀態對應,以便適當釋放裝置。
參數 | |
---|---|
context |
IInvocationContext |
e |
Throwable |
傳回 | |
---|---|
|
displayCommandQueue
public void displayCommandQueue (PrintWriter printWriter)
輸出指令執行佇列狀態的詳細偵錯資訊。
displayCommandsInfo
public void displayCommandsInfo (PrintWriter printWriter, String regex)
輸出目前指令的清單。
參數 | |
---|---|
printWriter |
PrintWriter :要輸出的 ERROR(/PrintWriter) 。 |
regex |
String :指令必須符合的規則運算式,才能進行列印。如果為空值,則會列印所有指令。 |
displayInvocationsInfo
public void displayInvocationsInfo (PrintWriter printWriter)
顯示目前叫用作業的清單。
參數 | |
---|---|
printWriter |
PrintWriter :輸出至 ERROR(/PrintWriter) 。 |
dumpCommandsXml
public void dumpCommandsXml (PrintWriter printWriter, String regex)
針對所有目前指令指定的所有 Option
值,轉儲指令的展開 XML 檔案。
參數 | |
---|---|
printWriter |
PrintWriter :要輸出狀態的 ERROR(/PrintWriter) 。 |
regex |
String :指令必須與此規則運算式相符,才能轉儲 XML 檔案。如果為空值,則會轉儲所有指令。 |
execCommand
public void execCommand (ICommandScheduler.IScheduledInvocationListener listener, ITestDevice device, String[] args)
直接在已指派的裝置上執行指令。
參數 | |
---|---|
listener |
ICommandScheduler.IScheduledInvocationListener :要通知的 ICommandScheduler.IScheduledInvocationListener |
device |
ITestDevice :要使用的 ITestDevice |
args |
String :指令引數 |
擲回 | |
---|---|
ConfigurationException |
execCommand
public void execCommand (IInvocationContext context, ICommandScheduler.IScheduledInvocationListener listener, String[] args)
直接配置裝置並執行指令,不必使用現有的 IInvocationContext
將指令新增至指令佇列。
參數 | |
---|---|
context |
IInvocationContext :現有的 IInvocationContext 。 |
listener |
ICommandScheduler.IScheduledInvocationListener :要通知的 ICommandScheduler.IScheduledInvocationListener |
args |
String :指令引數 |
擲回 | |
---|---|
ConfigurationException |
|
NoDeviceException |
execCommand
public void execCommand (ICommandScheduler.IScheduledInvocationListener listener, String[] args)
直接配置裝置並執行指令,但不將指令新增至指令佇列。
參數 | |
---|---|
listener |
ICommandScheduler.IScheduledInvocationListener :要通知的 ICommandScheduler.IScheduledInvocationListener |
args |
String :指令引數 |
擲回 | |
---|---|
ConfigurationException |
|
NoDeviceException |
getCommandFileWatcher
public CommandFileWatcher getCommandFileWatcher ()
取得此排程器的適當 CommandFileWatcher
傳回 | |
---|---|
CommandFileWatcher |
getExecutingCommandCount
public int getExecutingCommandCount ()
傳回執行狀態的 Command 數量。
傳回 | |
---|---|
int |
getInvocationInfo
public String getInvocationInfo (int invocationId)
指定叫用 ID 後,傳回叫用作業的相關資訊。
參數 | |
---|---|
invocationId |
int :叫用作業的追蹤 ID。 |
傳回 | |
---|---|
String |
包含叫用作業相關資訊的 String 。 |
getLastInvocationExitCode
public CommandRunner.ExitCode getLastInvocationExitCode ()
傳回上次執行的叫用作業的錯誤代碼。如果尚未執行任何叫用作業,請傳回 0 (沒有錯誤)。
傳回 | |
---|---|
CommandRunner.ExitCode |
getLastInvocationThrowable
public Throwable getLastInvocationThrowable ()
從上次執行的叫用作業傳回 Throwable
。如果沒有可用的 throwable,則傳回空值。
傳回 | |
---|---|
Throwable |
getReadyCommandCount
public int getReadyCommandCount ()
傳回佇列中處於就緒狀態的指令數量。
傳回 | |
---|---|
int |
getShutdownTimeout
public long getShutdownTimeout ()
傳回 | |
---|---|
long |
handoverInitiationComplete
public void handoverInitiationComplete ()
通知指令排程器,目前使用的裝置和指令已完成初始交接交換作業,可以開始排程作業。
handoverShutdown
public boolean handoverShutdown (int handoverPort)
啟動 shutdown()
,並將其交由同一主機上的其他 tradefed 程序處理。
排程器會在裝置釋放後,通知在該通訊埠上監聽的遠端 tradefed 程序。
參數 | |
---|---|
handoverPort |
int |
傳回 | |
---|---|
boolean |
true (如果啟動交接成功),否則為 false |
notifyFileChanged
public void notifyFileChanged (File cmdFile,extraArgs)
參數 | |
---|---|
cmdFile |
File |
extraArgs |
|
removeAllCommands
public void removeAllCommands ()
從排程器中移除所有指令
得分
public void run ()
這個執行緒的主要執行區塊。
setClearcutClient
public void setClearcutClient (ClearcutClient client)
設定用戶端以回報束縛資料
參數 | |
---|---|
client |
ClearcutClient |
shouldShutdownOnCmdfileError
public boolean shouldShutdownOnCmdfileError ()
如果我們需要因指令錯誤而關閉排程器,則傳回 true
傳回 | |
---|---|
boolean |
關機
public void shutdown ()
嘗試安全關閉指令排程器。
清除等待測試的指令,並要求所有進行中的叫用作業妥善關閉。
在呼叫關閉作業後,排程器主迴圈會等待所有進行中的叫用完成,然後才完全結束。
shutdownHard
public void shutdownHard (boolean killAdb)
嘗試強制關閉指令排程器。
與 shutdown()
類似,但也會選擇終止 ADB 連線,以便「啟動」進行中的叫用作業,讓作業更快完成。
參數 | |
---|---|
killAdb |
boolean |
shutdownHard
public void shutdownHard ()
嘗試強制關閉指令排程器。與 shutdownHard(true) 相同。
shutdownOnEmpty
public void shutdownOnEmpty ()
與 shutdown()
類似,但會等待所有指令執行完畢,再離開。
請注意,如果任何指令處於迴圈模式,排程器就不會結束。
stopInvocation
public boolean stopInvocation (ITestInvocation invocation)
停止執行中的叫用作業。
參數 | |
---|---|
invocation |
ITestInvocation |
傳回 | |
---|---|
boolean |
如果已停止叫用,則傳回 true,否則傳回 false |
stopInvocation
public boolean stopInvocation (int invocationId, String cause)
指定執行中呼叫的 ID,即可停止該呼叫。
參數 | |
---|---|
invocationId |
int :叫用作業的追蹤 ID。 |
cause |
String :停止叫用的原因。 |
傳回 | |
---|---|
boolean |
如果已停止叫用,則傳回 true,否則傳回 false |
受保護的方法
cleanUp
protected void cleanUp ()
關閉記錄,並在退出前執行任何必要的清理作業。
公開,以便單元測試進行模擬。
createConfiguration
protected IConfiguration createConfiguration (String[] args)
參數 | |
---|---|
args |
String |
傳回 | |
---|---|
IConfiguration |
擲回 | |
---|---|
ConfigurationException |
createInvocationContext
protected IInvocationContext createInvocationContext ()
傳回 | |
---|---|
IInvocationContext |
getConfigFactory
protected IConfigurationFactory getConfigFactory ()
用於取得 IConfigurationFactory
參照的工廠方法
傳回 | |
---|---|
IConfigurationFactory |
要使用的 IConfigurationFactory
|
getDeviceManager
protected IDeviceManager getDeviceManager ()
用於取得 IDeviceManager
參照的工廠方法
傳回 | |
---|---|
IDeviceManager |
要使用的 IDeviceManager
|
getHostOptions
protected IHostOptions getHostOptions ()
傳回 | |
---|---|
IHostOptions |
getKeyStoreClient
protected IKeyStoreClient getKeyStoreClient ()
使用 IGlobalConfiguration
中宣告的 IKeyStoreFactory
擷取 IKeyStoreClient
,如果未定義,則為空值。
傳回 | |
---|---|
IKeyStoreClient |
IKeyStoreClient |
initLogging
protected void initLogging ()
初始化 ddmlib 記錄。
公開,以便單元測試進行模擬。
isShutdown
protected boolean isShutdown ()
傳回 | |
---|---|
boolean |
isShuttingDown
protected boolean isShuttingDown ()
傳回 | |
---|---|
boolean |
processReadyCommands
protected void processReadyCommands (IDeviceManager manager)
參數 | |
---|---|
manager |
IDeviceManager |
waitForAllInvocationThreads
protected void waitForAllInvocationThreads ()
等待所有叫用執行緒完成。