CommandScheduler
  public
  
  
  
  class
  CommandScheduler
  
    extends Object
  
  
  
  
  
      implements
      
        ICommandScheduler
      
  
  
| java.lang.Object | |
| ↳ | com.android.tradefed.command.CommandScheduler | 
排程器,可在所有可用裝置上執行 TradeFederation 指令。
會嘗試根據執行時間的總執行次數,為要執行的指令排定優先順序,例如不常執行或執行速度快的指令,會優先於執行時間較長的指令。
會在背景持續執行,直到關機為止。
摘要
公用建構函式 | |
|---|---|
      
      CommandScheduler()
      
      
        建立   | 
  |
公用方法 | |
|---|---|
        
        
        
        
        
        Pair<Boolean, Integer>
     | 
  
    
      
      addCommand(String[] args)
      
      
        將指令新增至排程器。  | 
  
        
        
        
        
        
        void
     | 
  
    
      
      addCommandFile(String cmdFilePath, 
      
        將指定檔案中的所有指令新增至排程器  | 
  
        
        
        
        
        
        void
     | 
  
    
      
      await()
      
      
        等待排程器開始執行,包括等待舊 TF 的移交作業完成 (如適用)。  | 
  
        
        
        static
        
        
        TradefedDelegator
     | 
  
    
      
      checkDelegation(String[] args)
      
      
        根據指令列建立委派者,看看是否需要委派執行作業。  | 
  
        
        
        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 檔案,其中包含所有目前指令指定的   | 
  
        
        
        
        
        
        long
     | 
  
    
      
      execCommand(ICommandScheduler.IScheduledInvocationListener listener, ITestDevice device, String[] args)
      
      
        直接在已指派的裝置上執行指令。  | 
  
        
        
        
        
        
        long
     | 
  
    
      
      execCommand(ICommandScheduler.IScheduledInvocationListener listener, 
      
        直接在已指派的裝置上執行指令。  | 
  
        
        
        
        
        
        long
     | 
  
    
      
      execCommand(IInvocationContext context, ICommandScheduler.IScheduledInvocationListener listener, String[] args)
      
      
        直接配置裝置並執行指令,不必使用現有的   | 
  
        
        
        
        
        
        long
     | 
  
    
      
      execCommand(ICommandScheduler.IScheduledInvocationListener listener, String[] args)
      
      
        直接配置裝置並執行指令,但不將指令新增至指令佇列。  | 
  
        
        
        
        
        
        CommandFileWatcher
     | 
  
    
      
      getCommandFileWatcher()
      
      
        取得此排程器的適當 CommandFileWatcher  | 
  
        
        
        
        
        
        int
     | 
  
    
      
      getExecutingCommandCount()
      
      
        傳回執行狀態的 Command 數量。  | 
  
        
        
        
        
        
        CommandScheduler.HostState
     | 
  
    
      
      getHostState()
      
      
     | 
  
        
        
        
        
        
        String
     | 
  
    
      
      getInvocationInfo(int invocationId)
      
      
        指定叫用 ID 後,傳回叫用作業的相關資訊。  | 
  
        
        
        
        
        
        CommandRunner.ExitCode
     | 
  
    
      
      getLastInvocationExitCode()
      
      
        傳回上次執行的呼叫的錯誤代碼。  | 
  
        
        
        
        
        
        Throwable
     | 
  
    
      
      getLastInvocationThrowable()
      
      
        從上次執行的叫用作業傳回   | 
  
        
        
        
        
        
        int
     | 
  
    
      
      getReadyCommandCount()
      
      
        傳回佇列中處於就緒狀態的指令數量。  | 
  
        
        
        
        
        
        long
     | 
  
    
      
      getShutdownTimeout()
      
      
     | 
  
        
        
        
        
        
        boolean
     | 
  
    
      
      isDeviceInInvocationThread(ITestDevice device)
      
      
        如果裝置由有效的叫用執行緒使用,則傳回 true。  | 
  
        
        
        
        
        
        boolean
     | 
  
    
      
      isShuttingDown()
      
      
     | 
  
        
        
        
        
        
        void
     | 
  
    
      
      notifyFileChanged(File cmdFile, 
      
     | 
  
        
        
        
        
        
        void
     | 
  
    
      
      removeAllCommands()
      
      
        從排程器中移除所有指令  | 
  
        
        
        
        
        
        void
     | 
  
    
      
      run()
      
      
        這個執行緒的主要執行區塊。  | 
  
        
        
        
        
        
        void
     | 
  
    
      
      setClearcutClient(ClearcutClient client)
      
      
        將用戶端設為回報束縛資料  | 
  
        
        
        
        
        
        boolean
     | 
  
    
      
      shouldShutdownOnCmdfileError()
      
      
        如果我們需要因指令錯誤而關閉排程器,則傳回 true  | 
  
        
        
        
        
        
        void
     | 
  
    
      
      shutdown(boolean notifyStop)
      
      
        嘗試安全關閉指令排程器。  | 
  
        
        
        
        
        
        void
     | 
  
    
      
      shutdownHard(boolean killAdb)
      
      
        嘗試強制關閉指令排程器。  | 
  
        
        
        
        
        
        void
     | 
  
    
      
      shutdownHard()
      
      
        嘗試強制關閉指令排程器。  | 
  
        
        
        
        
        
        void
     | 
  
    
      
      shutdownOnEmpty()
      
      
        與   | 
  
        
        
        
        
        
        void
     | 
  
    
      
      start()
      
      
        啟動排程器,包括設定記錄、初始化   | 
  
        
        
        
        
        
        boolean
     | 
  
    
      
      stopInvocation(ITestInvocation invocation)
      
      
        停止執行中的叫用作業。  | 
  
        
        
        
        
        
        boolean
     | 
  
    
      
      stopInvocation(int invocationId, String cause)
      
      
        指定執行中呼叫的 ID,即可停止該呼叫。  | 
  
        
        
        
        
        
        void
     | 
  
    
      
      stopScheduling()
      
      
        停止安排及接受新測試,但不會停止 Tradefed。  | 
  
受保護的方法 | |
|---|---|
        
        
        
        
        
        void
     | 
  
    
      
      cleanUp()
      
      
        關閉記錄,並在退出前執行任何必要的清理作業。  | 
  
        
        
        
        
        
        IConfiguration
     | 
  
    
      
      createConfiguration(String[] args)
      
      
     | 
  
        
        
        
        
        
        IInvocationContext
     | 
  
    
      
      createInvocationContext()
      
      
     | 
  
        
        
        
        
        
        void
     | 
  
    
      
      dryRunCommandReporting(ICommandScheduler.IScheduledInvocationListener handler, IConfiguration config)
      
      
        判斷指定指令是否為模擬測試。  | 
  
        
        
        
        
        
        long
     | 
  
    
      
      execCommand(IInvocationContext context, ICommandScheduler.IScheduledInvocationListener listener, 
      
     | 
  
        
        
        
        
        
        IConfigurationFactory
     | 
  
    
      
      getConfigFactory()
      
      
        工廠方法,用於取得   | 
  
        
        
        
        
        
        DeviceManagementGrpcServer
     | 
  
    
      
      getDeviceManagementServer()
      
      
     | 
  
        
        
        
        
        
        IDeviceManager
     | 
  
    
      
      getDeviceManager()
      
      
        工廠方法,用於取得   | 
  
        
        
        
        
        
        TradefedFeatureServer
     | 
  
    
      
      getFeatureServer()
      
      
     | 
  
        
        
        
        
        
        IHostOptions
     | 
  
    
      
      getHostOptions()
      
      
     | 
  
        
        
        
        
        
        IKeyStoreClient
     | 
  
    
      
      getKeyStoreClient()
      
      
        使用   | 
  
        
        
        
        
        
        TestInvocationManagementServer
     | 
  
    
      
      getTestInvocationManagementServer()
      
      
     | 
  
        
        
        
        
        
        void
     | 
  
    
      
      initLogging()
      
      
        初始化 ddmlib 記錄。  | 
  
        
        
        
        
        
        boolean
     | 
  
    
      
      isShutdown()
      
      
     | 
  
        
        
        
        
        
        void
     | 
  
    
      
      processReadyCommands(IDeviceManager manager)
      
      
     | 
  
公用建構函式
公用方法
addCommand
public Pair<Boolean, Integer> addCommand (String[] args)
將指令新增至排程器。
指令基本上是執行設定的例項,以及相關的引數。
如果指定「--help」引數,設定的說明文字就會輸出至 stdout。否則,系統會將設定新增至佇列以便執行。
| 參數 | |
|---|---|
args | 
        
          String:設定引數。 | 
      
| 傳回 | |
|---|---|
Pair<Boolean, Integer> | 
        一組值,如果指令已成功新增,第一個值為布林值 true。如果指令已成功新增,第二個值即為已知的指令追蹤器 ID(非負值);如果為所有裝置新增指令,則會傳回 0,否則為 -1。 | 
      
| 擲回 | |
|---|---|
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 | 
        |
| 擲回 | |
|---|---|
 | 
          com.android.tradefed.config.ConfigurationException | 
ConfigurationException | 
          |
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 long execCommand (ICommandScheduler.IScheduledInvocationListener listener, ITestDevice device, String[] args)
直接在已指派的裝置上執行指令。
| 參數 | |
|---|---|
listener | 
        
          ICommandScheduler.IScheduledInvocationListener:要通知的 ICommandScheduler.IScheduledInvocationListener | 
      
device | 
        
          ITestDevice:要使用的 ITestDevice | 
      
args | 
        
          String:指令引數 | 
      
| 傳回 | |
|---|---|
long | 
        排定指令的叫用 ID。 | 
| 擲回 | |
|---|---|
ConfigurationException | 
          |
execCommand
public long execCommand (ICommandScheduler.IScheduledInvocationListener listener,reservedDevices, String[] args) 
直接在已指派的裝置上執行指令。
| 參數 | |
|---|---|
listener | 
        
          ICommandScheduler.IScheduledInvocationListener:要通知的 ICommandScheduler.IScheduledInvocationListener | 
      
reservedDevices | 
        
          :要使用的 ERROR(/List | 
      
args | 
        
          String:指令引數 | 
      
| 傳回 | |
|---|---|
long | 
        排定指令的叫用 ID。 | 
| 擲回 | |
|---|---|
ConfigurationException | 
          |
execCommand
public long execCommand (IInvocationContext context, ICommandScheduler.IScheduledInvocationListener listener, String[] args)
直接配置裝置並執行指令,不必使用現有的 IInvocationContext 將指令新增至指令佇列。
| 參數 | |
|---|---|
context | 
        
          IInvocationContext:現有的 IInvocationContext。 | 
      
listener | 
        
          ICommandScheduler.IScheduledInvocationListener:要通知的 ICommandScheduler.IScheduledInvocationListener | 
      
args | 
        
          String:指令引數 | 
      
| 傳回 | |
|---|---|
long | 
        |
| 擲回 | |
|---|---|
ConfigurationException | 
          |
NoDeviceException | 
          |
execCommand
public long execCommand (ICommandScheduler.IScheduledInvocationListener listener, String[] args)
直接配置裝置並執行指令,但不將指令新增至指令佇列。
| 參數 | |
|---|---|
listener | 
        
          ICommandScheduler.IScheduledInvocationListener:要通知的 ICommandScheduler.IScheduledInvocationListener | 
      
args | 
        
          String:指令引數 | 
      
| 傳回 | |
|---|---|
long | 
        排定指令的叫用 ID。 | 
| 擲回 | |
|---|---|
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 | 
        |
isDeviceInInvocationThread
public boolean isDeviceInInvocationThread (ITestDevice device)
如果裝置是由有效的叫用程式執行緒使用,則會傳回 true。
| 參數 | |
|---|---|
device | 
        
          ITestDevice  | 
      
| 傳回 | |
|---|---|
boolean | 
        |
isShuttingDown
public boolean isShuttingDown ()
| 傳回 | |
|---|---|
boolean | 
        |
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 (boolean notifyStop)
嘗試安全關閉指令排程器。
| 參數 | |
|---|---|
notifyStop | 
        
          boolean:如果為 true,會通知 TF 關閉的叫用作業。 | 
      
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 | 
stopScheduling
public void stopScheduling ()
停止安排及接受新測試,但不會停止 Tradefed。這表示要啟用兩步驟關機程序,先排空所有執行中的測試,然後終止 Tradefed 程序。
受保護的方法
cleanUp
protected void cleanUp ()
關閉記錄,並在退出前執行任何必要的清理作業。
公開,以便單元測試進行模擬。
createConfiguration
protected IConfiguration createConfiguration (String[] args)
| 參數 | |
|---|---|
args | 
        
          String  | 
      
| 傳回 | |
|---|---|
IConfiguration | 
        |
| 擲回 | |
|---|---|
ConfigurationException | 
          |
createInvocationContext
protected IInvocationContext createInvocationContext ()
| 傳回 | |
|---|---|
IInvocationContext | 
        |
dryRunCommandReporting
protected void dryRunCommandReporting (ICommandScheduler.IScheduledInvocationListener handler, IConfiguration config)
判斷指定指令是否為模擬測試。如果指令是模擬執行,請驗證指令。如果有任何設定問題,系統會擲回 ConfigurationException。
| 參數 | |
|---|---|
handler | 
        
          ICommandScheduler.IScheduledInvocationListener:ERROR(/InvocationEventHandler) 用於回報模擬執行驗證的事件。 | 
      
config | 
        
          IConfiguration  | 
      
| 傳回 | |
|---|---|
void | 
        如果指令是模擬執行,則傳回 true;否則傳回 false。 | 
| 擲回 | |
|---|---|
 | 
          com.android.tradefed.config.ConfigurationException | 
ConfigurationException | 
          |
execCommand
protected long execCommand (IInvocationContext context, ICommandScheduler.IScheduledInvocationListener listener,reservedDevices, String[] args) 
| 參數 | |
|---|---|
context | 
        
          IInvocationContext  | 
      
listener | 
        
          ICommandScheduler.IScheduledInvocationListener  | 
      
reservedDevices | 
        
            | 
      
args | 
        
          String  | 
      
| 傳回 | |
|---|---|
long | 
        |
| 擲回 | |
|---|---|
ConfigurationException | 
          |
getConfigFactory
protected IConfigurationFactory getConfigFactory ()
用於取得 IConfigurationFactory 參照的工廠方法
| 傳回 | |
|---|---|
IConfigurationFactory | 
        要使用的 IConfigurationFactory | 
      
getDeviceManagementServer
protected DeviceManagementGrpcServer getDeviceManagementServer ()
| 傳回 | |
|---|---|
DeviceManagementGrpcServer | 
        |
getDeviceManager
protected IDeviceManager getDeviceManager ()
用於取得 IDeviceManager 參照的工廠方法
| 傳回 | |
|---|---|
IDeviceManager | 
        要使用的 IDeviceManager | 
      
getKeyStoreClient
protected IKeyStoreClient getKeyStoreClient ()
使用 IGlobalConfiguration 中宣告的 IKeyStoreFactory 擷取 IKeyStoreClient,如果未定義,則為空值。
| 傳回 | |
|---|---|
IKeyStoreClient | 
        IKeyStoreClient | 
getTestInvocationManagementServer
protected TestInvocationManagementServer getTestInvocationManagementServer ()
| 傳回 | |
|---|---|
TestInvocationManagementServer | 
        |
initLogging
protected void initLogging ()
初始化 ddmlib 記錄。
公開,以便單元測試進行模擬。
isShutdown
protected boolean isShutdown ()
| 傳回 | |
|---|---|
boolean | 
        |
processReadyCommands
protected void processReadyCommands (IDeviceManager manager)
| 參數 | |
|---|---|
manager | 
        
          IDeviceManager  |