2013-03-25 91 views
0

我剛剛在Performance Tips and Tricks for Flex and Flash Development上觀看過這段視頻,它列出了使用和創建Flex時測量的3件事情。如何測試項目渲染器的性能?

  • 創作
  • 驗證
  • 渲染

如何衡量我自己的項目,這些項目嗎?在我的情況下,更具體的這個問題,我該如何測試創建我的項目渲染器需要多長時間,驗證它並呈現它?

在測試項目渲染器的性能時,所有這些事件的總數是我應該使用的總時間嗎?我的意思是一旦它被創建,那麼重要的是渲染和驗證是否正確?

我的意思是,如果我有一個項目渲染我想我可以用下面的代碼找出創建時間:如果

<itemrenderer initialize="trace('initialized at='+getTimer())" creationComplete="trace('created at='+getTimer())" /> 

不知道這是正確的。但是驗證和渲染呢?

+0

http://stackoverflow.com/questions/7558678/flex-profiler-alternative – ethrbunny 2013-03-25 19:56:25

+0

謝謝@ethrbunny但我需要特定的代碼。 – 2013-03-25 20:43:48

+0

我建議你使用一個探查器來代替你的代碼。 – ethrbunny 2013-03-26 13:04:35

回答

0

這裏是我到目前爲止有:

timeLabel.text += "\nAbstractDataGridItemRenderer: " + testGridItemRenderer(AbstractDataGridItemRenderer, data, 50); 

而且功能:

 public function testItemRenderer(renderer:Class, data:Object, iterations:int = 1000, resetTime:Boolean = false):int { 
      var layoutManager:LayoutManager = LayoutManager.getInstance(); 
      var time:int = getTimer(); 
      var itemRenderer:IItemRenderer; 

      for (var i:int;i<iterations;i++) { 
       itemRenderer = new renderer(); 
       itemRenderer.data = data.name + i; 
       itemRenderer.width = 300; 
       itemRenderer.height = 30; 
       itemRenderer.y = i * 30; 
       itemRenderer.label = LabelUtil.itemToLabel(data, "label"); 
       addElement(itemRenderer); 
       //trace("initialized = " + ILayoutManagerClient(itemRenderer).initialized); 
       layoutManager.validateClient(ILayoutManagerClient(itemRenderer), false); 
       //trace("initialized = " + ILayoutManagerClient(itemRenderer).initialized); 
      } 

      if (resetTime) { 
       time = getTimer(); 
       for (i=0;i<iterations;i++) { 
        itemRenderer.data = data.name + i; 
        itemRenderer.label = LabelUtil.itemToLabel(data, "label"); 
        //addElement(itemRenderer); 
        //trace("initialized = " + ILayoutManagerClient(itemRenderer).initialized); 
        layoutManager.validateClient(ILayoutManagerClient(itemRenderer), false); 
        //trace("initialized = " + ILayoutManagerClient(itemRenderer).initialized); 
       } 
       return getTimer() - time; 
      } 

      return getTimer() - time; 
     } 

我不知道這是否是正確的,但它給我幾個電話號碼的工作。我寧願不將它添加到舞臺上,但似乎我必須這樣做才能使其初始化。提交,測量和佈局:

Initialized當一個對象是否已通過佈局的所有三個階段 是真實的。

更新。我添加了重置階段。這留下了渲染階段。

1

你在正確的軌道上。

要點是從getTimer中獲取兩個值,並使用差異來確定操作花費的時間。

理想情況下,你是第一個getTimer()將在構造函數中。如果你正在處理MXML組件;沒有構造函數,所以我會使用preinitialize事件。我們可以把這個號碼叫做timer1。

當組件初始化完成時會觸發creationComplete事件。這包括第一個「渲染」事件。我們可以調用這個nnumber timer2。

執行:

timer2-timer1 

爲了跟蹤創建一塊Flex組件的生命週期。這也將包括第一個渲染過程。

出於Flex組件的目的;我會說渲染是運行commitProperties(),measure()和updateDisplayList()的過程。跟蹤這個技巧的訣竅是,你不知道哪一個 - 如果有的話 - 將被調用,因爲它取決於什麼被無效。

驗證是組件運行時的一個持續過程;這會導致組件被重新渲染。

我可能會聽render事件啓動你的計時器;和updateComplete事件來跟蹤組件的渲染何時完成。