開始使用Adobe Scout
http://www.adobe.com/devnet/flashruntimes/articles/adobe-scout-gettin g-started.html
ADOBE SCOUT 是下一代為桌面和移動端的FLASH 內容分析的工具,它可以讓你從內部觀察flash 的運行,這在過去是不可能的。更棒的是,它真的非常簡單非常容易上手,沒有復雜的安裝步驟。
在過去,你可以用FLASH BUILDER 的 PROFILER 在ACTIONSCRIPT 的代碼級別觀察FLASH 的運行,但所有FLASH PLAYER 的內容操作對你來說是隱藏起來的。如果你在渲染或不正確地使用了某個api 時,原來的分析器不可能指出你的錯誤,因為你不能看到在場景後面發生了什麼。
SCOUT 通過收集正在進行的內部數據解決了這個問題。它幫你明白你的代碼如何和運行時交互,因此你可以真正發現執行時錯誤的根源。
ADOBE SCOUT 是如何工作的
SCOUT 依賴telemetry 功能,這個功能在Flash Player 11.4 和 Adobe AIR 3.4 中引入的。該功能在ACTIONSCRIPT 代碼執行的同時收集FLASH 運行時的內部的詳細信息,並且把它發送給SCOUT ,SCOUT 再把它清晰地簡明地圖形地呈現出來,因此你可以快速的診斷執行時的錯誤。
SCOUT 不需要DEBUG 版本的FLASH PLAYER ,這意味著你可以用發行版的環境,在用戶最終運行的swf 和網頁中分析你的內容。再重要的是,SCOUT 可以快速的分析你的內容,因些,你可以更加關注用戶體驗時執行的問題。
在SWF 中開啟高級的telemetry 功能
你不必作任何特殊的事來開啟SCOUT ,僅僅是在SCOUT 運行時運行你的swf ,你就可以看到一個新的會話出現了,並且數據傳了進來。但默認的狀態下swf 僅僅為scout 提供了一些最基本的信息,為了得到所有可以得到數據,如ACTIONSCRIPT 代碼的信息,渲染時顯示列表的詳細信息,STAGE3D 信息,你需要在swf 文件中打開advanced telemetry ,ADOBE 不默認暴露這些信息的原因是防止一些人用scout 輕鬆的得到你的flahs 內容的詳細信息。儘管這樣別急,開啟這個功能很簡單,SCOUT 已經提供。
有幾個不同的方式開啟advanced telemetry.
使用Flash Builder 4.7
最簡單的方式開啟advanced telemetry. ,ADOBE 推薦的,它內置了SCOUT 的支持。4.7 有新的ACTIONSCIRPT編譯選項開啟advanced telemetry. 。選擇 Enable Detailed Telemetry 如下圖
使用Flash Professional
如果你在使用Flash Professional ,沒有集成可視的選項,在下個版本中ADOBE 會加入,但同時你可以下載使用PYTHON 腳本(add-opt-in.py) 在 https://github.com/adamcath/ telemetry-utils. 如果你還沒在安裝PYTHON ,訪問http://python.org 。然後你僅僅運行add-opt-in.py 對你的swf 裡就可以了。這個方法對已存在的swf 或不方便再編譯的swf 。
已開啟advanced telemetry. 的例子
Hungry Hero (Starling) http://www.hungryherogame.com
Feathers Components Demo (Feathers) http://feathersui.com/examples/components-explorer
Invawayders (Away3D) http://awaymedia.co.uk/projects/invawayders/Main.html
Back yard
Demo (Coppercube) http://www.ambiera.com/coppercube/demo.php?demo=backyard&mode =flash
僅需要打開scout ,訪問上述鏈接。
本地和遠程分析
使用SCOUT 需要下面的組件
Flash Player 11.4 (plugin or standalone) or Adobe AIR 3.4.
Adobe Scout
如果你正分析的內容和scout 在同一台機器上,上面的已經夠了,只需要打開scout ,運行swf 就可以了。
你也可以在不同的機器上分別運行scout 和swf ,這叫遠程分析。這樣的情況很普遍:
一個桌面機器正在運行swf ,但另一台電腦運行SCOUT 。這非常有用對於debug 一個遠程項目或對於不能運行scout 的機器來說。
一個移動設備正運行相應的內容,另一台電腦運行scout 。這對於開發移動項目來說是非常有用的,因為你需要調整執行效果在特定的設備上。
對桌面內容的遠程分析
如果你正運行你的內容在另一台機器,你可以控制Flash telemetry 數據到任何一台正在運行SCOUT 的機器。你需要創建一個叫.telemetry.cfg 的文件在運行flash 內容的機器上,它的位置依賴於你的操作系統。
MacOS: ~/.telemetry.cfg
Windows: %HOMEDRIVE%%HOMEPATH%\.telemetry.cfg
注:如果你的內容在chrome 裡運行,在文章最後有一列表被頻繁問道的問題。
假設SCOUT 運行在192.168.1.20:7934 ,為了連接到它,文件內容是這樣的
TelemetryAddress=192.168.1.20:7934
SamplerEnabled = true
CPUCapture = true
DisplayObjectCapture = false
Stage3DCapture = false
上面後四行響應了scout 中的“新會話的設置”,但需要在這裡重點指出的是你必須手動輸入這些如果你在進行遠程分析。你進行配置之後,只需要運行你的內容,它就會出現在scout 裡。
為移動設備遠程分析AIR
在應用Scout Companion 的幫助下移動設備的配置已經變得非常簡單了,對IOS 和ANDROID 的都已經可以下載了。下載安裝之後,你可以使用你本地的SCOUT 了,然後在SCOUT 裡配置想要接收哪些數據。
使用Scout Companion 時注意
確保的你設備和電腦連接在相同的網絡裡,登陸Scout Companion ,它會尋找運行SCOUT 的電腦,它會顯示一系列運行scout 中的電腦。
當你電腦的名子出現時,點擊它
在SCOUT 桌面裡,選擇你想接收的數據,你會看見它會反應在Companion 上
登陸你的AIR 應用,你會看見多了一個新的會話
在scout 中開始新的會話
如果你在運行本地的flash 內容,或者跟著上面的指導作的,那麼你已經開始分析了。只需要登陸你的內容,一個新的會話就會出現在SCOUT 中,你的內容可以是安裝了標準版本player 的瀏覽器中,或者通過AIR 。當你看到一個有很多顏色的圖表出現就說明它開始工作了。
Flash Player 只是開始運行的時候檢查是否有scout 在運行,如果flash player 已經運行後啟動scout ,那麼你必須重新啟動你的內容。在屏幕左邊,你一系列打開的會話,會顯示出swf 文件的名子和它的域。如果你想新的數據傳進來,只需要點擊紅方塊。如果你把你的flash 內容停止後,會話會自動停止。
默認情況下,所有你加載的flash 內容會在SCOUT 中開始一個新的會話。這使得啟動分析非常簡單,但如果你同時在瀏覽器中打開其它的flash 內容也會被加載進來這令人非常討厭。
為更好的控制,你可以告訴scout 過慮掉你不想要的會話。如果你點擊過慮圖標,scout 僅會開始和選擇的那個swf 有相同名子的會話。這意味著你可以在瀏覽器上訪問各種內容而你選擇的那個會話不會在列表中沉下去,而一旦你開始具有相同名的swf 時scout 又能開始新的會話。
設置新的會話
現在你可以在scout 裡開始一個新的會話了,你可以開始考慮什麼樣的數據你想收集。在屏幕的左邊所有會話之上你可以看到有一個叫“新會話的設置”標籤。這代表你可以讓flash player 傳遞不同數據過來。注意一些scout 的功能只有收集到相關數據時才會工作。
開始一個新的會話前,檢查這些收集數據選擇項,因為會話開始之後就不能改變了,事先考慮好你需要觀測的數據非常重要。如果你對執行的觀測如在某個函數上的時間花費感興趣,僅需要收集低功效的數據。如果你索性將所有數據都收集起來,定時傳過來的數據可能不准確,因為flash player 不得不收集額外的工作來收集和傳送數據。
這裡有一條簡明的策略:
基本的遙測是一直都被允許的,它提供關於flash player 正在持續工作的信息,和CPU 顯存的一些基本信息。
ACTIONSCRIPT 採樣器通過定期的調用棧的快照測量執行你的代碼的時間花費。它種方式效率比較低,因為它使用statistical sampling ,如果你用足夠長的一段時間觀察採樣器,它能準確指出哪些函數花費大量時間。
CPU 使用狀態會定期測量操作系統報告的FLASH PLAYER 對cpu 的消耗。它和MAC 的活動監視器或windows的任務管理器看到的恰好一樣。
顯示列表渲染的詳細信息會提供正在渲染的可見的展示在屏幕上的所有對象的詳細分解。它會讓你知識屏幕的哪個區域花費大量時間渲染。
STAGE3D 記錄捕捉每一條STAGE3D 的命令,因些你可以在scout 裡重複單步測試它們。由於非常容易在幾分種裡產生GB 級的數據,你可以在選擇記錄模式時選擇延時,它讓你在捕獲STAGE3D 數據時開始統計。記住,開啟任何除基本遙測信息之外的類別,你的swf 必須打開advanced telemetry
使用scout 分析
Scout 用戶界面設計的很簡單高效的去用。有很多可視化的功能使用明白數據並過濾掉不需要的信息,這樣你可以快速的發現執行時的問題所在。界面有很多不同的面板,乍一看有點壓抑,但當你得知每一個部分的詳細信息你就會明白它們是如何合理的組織在一起的
面板可以通過簡單的拖拽tab 就可以重新設置位置。如果你關閉一個面板,你可以在window 菜單裡再次打開。一個具體的佈局被叫作工作空間,你可以在window 菜單保存並切換工作空間。
你可以隱藏左邊的顯示會話列表的側邊欄,通過點擊折疊按鈕
最重要的面板是幀和時間軸,就是在最中心的圖表。它展示了你的swf 每一幀的時間花費的分解,包括的內存使用情況和事件情況。
為了使一個會話中導航更方便,屏幕最上面展示了一個放大的幀時間 軸示圖。由於它使你看到了整個會話中峰值的所在,所以被叫作會話概況。
會話概況
如果你想跳到某一個時間或會話,如一個大峰值時,簡單的在點擊會話概況中相應的部分,默認下,你會看到一個圖表展示每一幀的時間花費,但你可以右鍵它著其它額外的圖表。如
下圖所示。
這些和幀和時間軸上看到的圖表是一致的,並且在整個會話過程中你可以選擇他們中的任意得到這種圖表的全部視圖。這在最後監視整個過程中的內存使用特別有用。例如,如果你運行你的程序足夠長時間,一個非常慢的內存洩露可以很清晰的在會話概況的圖表中看到。
幀和時間軸
在scout 裡最主要的用於定位執行問題的面板是幀和時間軸。在面板最上面的圖表裡顯示了幀時間 軸,把整個會話分解為各個單獨的幀,並且顯示了每一幀消耗的時間
最需要注意的是紅色的線。它代表在程序中設定的fps 下預定的每幀執行時間。例如一個swf fps 是30 幀,那麼預定的執行時間就是33ms ,也就是說如果每幀花費走過33ms ,你的程序會變得卡,這是真的不想發生的。
上圖清晰的展示了哪一幀超過預算時間並且需要注意。你可能好奇為什麼紅色的線會變,因為在你的程序動態的改變了framerate.
下面需要注意的是幀時間 軸圖表上的顏色是變化的。每一個顏色代表執行時不同的活動,所以你可以看到每一幀上最花費時間的是什麼。
藍色 執行as
綠色 顯示列表渲染
黃色 網絡和視頻
橙色 其它(垃圾處理,事件處理等等)
不用記住這些顏色的含意。右邊的總結面板會顯示每種顏色的含義。當你鼠標移到某一個條上時也會出現相應的提示,如下圖。
在幀和時間軸面板裡還有其它幾種圖表。CPU 監控一目了然,需要注意的是多核的cpu 使用可能超過100% 。內存分解反應了相應執行活動的內存使用,顏色的含義和上面一樣。
通過點擊開關按鈕你可以選擇顯示哪個面板。
如果你點擊事件,你會看到事件軌道在內存圖表下彈出。每一個水平軌代表一種具體類型的事件,高亮度的藍色條告訴你有多少事件在這幀發生。
事件軌道如下
鼠標 有多少鼠標事件發生
鍵盤 有多少鍵盤事件發生
網絡 有多少網絡io 操作發生
定時器 timer 類正在被使用
渲染 是否正在渲染
Trace 事件 在你的as 代碼裡是否有trace() 函數被調用。
正如你所看到的,幀和時間軸面板讓你快速發現你應用的熱點,識別哪里花費了大量的時間並且為什麼花費這麼多時間。
總結面板
總結面板是對幀和時間軸面板中不同顏色的圖表的描述,但它不只是圖例的作用。你可以在幀和時間軸面板裡點選或拖一系列幀。總結面板然後對這些幀進行統計,這樣你可以看到這段時間裡執行的整體情況。
下圖展示了選擇了兩 幀的總結面板。第一個要注意的是左上角的幀頻率。圖裡只有1.8fps ,而起始設置的目標是24 ,因些幀頻超過248% 的預算時間。內容運行的不流暢,你肯定要知道發生了什麼。
請看分解的時間,你可以看到最主要的時間是花費在as 代碼上。這暗示你可能想調查代碼在作什麼,然後去優化它。在scout 裡有其它的幾個面板幫你作這件事,一會你會看到。注意,如果你點擊右邊齒輪狀的icon, 可以選擇是顯示全部時間還是每一幀的下平均時間。
假設,由於代碼確實有問題,你可能想過濾掉其它的分類,以便專注在as 代碼的執行上。在scout 裡有不同的顏色,這可能會使人分心,因些需要花幾秒鐘過濾掉你不想要的東西。點擊as 分類,你可以看到其它的分類變成灰色的了。更重要的是,幀時間 軸也被過濾了,這樣你可以看到每幀僅有as 代碼的圖表。實際上,所有在scout 裡的顏色都被過濾了,這讓你非常簡單的專注在你關心的數據上。
在過濾的分類上再點一下,更詳細的信息分類會展示出來。如下圖Bitmap 以更詳細的分類說明。
首要活動
首要活動面板展示了比總結面板更詳細的關於flash player 內容所發生的內容的信息。它不是把時間分解成高級別的分類,而是展示了一個詳細的活動的分解,如處理特殊事件。如下圖
活動序列
活動序列面板顯示了哪個活動花費最多時間,但是它通常對查看每一個活動的精確序列非常有用。這是活動序列面板最主要的目的。不像首要活動面板那樣統計很多個幀,活動序列面板只顯示單幀的信息(否則就有太多的信息需要顯示了)。
在活動序列面板裡展示了簡明的順序和一幀中嵌套的活動。例如,在上圖中,你可以看到92% 的時間花費在處理enterframe 事件上,並且這依次引起了gameObjectDie 事件,這個事件花費了61% 的時間,你可以同時看到不少的垃圾回收在處理的時候發生和文本佈局的更新。
默認情況下,活動花費少於0.5ms 被過濾掉不顯示在活動序列和首要活動面板裡,這樣你可以專心於最花費時間的操作上。你可以點擊面板左上面的過濾按鈕來選擇是否過濾這些小活動。
注意這裡的顏色含義和總結面板裡的一樣,這樣你可以把不同面板裡的內容聯繫起來。在總結面板裡過濾一個類別也會在這兩個面板裡過濾掉相應的活動。
from:http://blog.sina.com.cn/s/blog_6bfa2fc10101bqn5.html
from:http://blog.sina.com.cn/s/blog_6bfa2fc10101bqn5.html
沒有留言:
張貼留言