| 2015ÄêÒÁʼ£¬Google·¢²¼Á˹ØÓÚAndroidÐÔÄÜÓÅ»¯µä·¶µÄרÌ⣬һ¹²16¸ö¶ÌÊÓÆµ£¬Ã¿¸ö3-5·ÖÖÓ£¬°ïÖú¿ª·¢Õß´´½¨¸ü¿ì¸üÓÅÐãµÄAndroid
App¡£¿Î³ÌרÌâ²»½ö½ö½éÉÜÁËAndroidϵͳÖÐÓйØÐÔÄÜÎÊÌâµÄµ×²ã¹¤×÷ÔÀí£¬Í¬Ê±Ò²½éÉÜÁËÈçºÎͨ¹ý¹¤¾ßÀ´ÕÒ³öÐÔÄÜÎÊÌâÒÔ¼°ÌáÉýÐÔÄܵĽ¨Òé¡£
Ö÷Òª´ÓÈý¸ö·½ÃæÕ¹¿ª£¬AndroidµÄäÖȾ»úÖÆ£¬ÄÚ´æÓëGC£¬µçÁ¿ÓÅ»¯¡£ÏÂÃæÊǶÔÕâЩÎÊÌâºÍ½¨ÒéµÄ×ܽáÊáÀí¡£
0)Render Performance
´ó¶àÊýÓû§¸ÐÖªµ½µÄ¿¨¶ÙµÈÐÔÄÜÎÊÌâµÄ×îÖ÷Òª¸ùÔ´¶¼ÊÇÒòΪäÖȾÐÔÄÜ¡£´ÓÉè¼ÆÊ¦µÄ½Ç¶È£¬ËûÃÇÏ£ÍûAppÄܹ»Óиü¶àµÄ¶¯»£¬Í¼Æ¬µÈʱÉÐÔªËØÀ´ÊµÏÖÁ÷³©µÄÓû§ÌåÑé¡£µ«ÊÇAndroidϵͳºÜÓпÉÄÜÎÞ·¨¼°Ê±Íê³ÉÄÇЩ¸´ÔӵĽçÃæäÖȾ²Ù×÷¡£Androidϵͳÿ¸ô16ms·¢³öVSYNCÐźţ¬
´¥·¢¶ÔUI½øÐÐäÖȾ£¬Èç¹ûÿ´ÎäÖȾ¶¼³É¹¦£¬ÕâÑù¾ÍÄܹ»´ïµ½Á÷³©µÄ»ÃæËùÐèÒªµÄ60fps£¬ÎªÁËÄܹ»ÊµÏÖ60fps£¬ÕâÒâζ×ųÌÐòµÄ´ó¶àÊý²Ù×÷¶¼±ØÐëÔÚ16msÄÚÍê³É¡£

Èç¹ûÄãµÄij¸ö²Ù×÷»¨·Ñʱ¼äÊÇ24ms£¬ÏµÍ³Ôڵõ½VSYNCÐźŵÄʱºò¾ÍÎÞ·¨½øÐÐÕý³£äÖȾ£¬ÕâÑù¾Í·¢ÉúÁ˶ªÖ¡ÏÖÏó¡£ÄÇôÓû§ÔÚ32msÄÚ¿´µ½µÄ»áÊÇͬһ֡»Ãæ¡£

Óû§ÈÝÒ×ÔÚUIÖ´Ðж¯»»òÕß»¬¶¯ListViewµÄʱºò¸ÐÖªµ½¿¨¶Ù²»Á÷³©£¬ÊÇÒòΪÕâÀïµÄ²Ù×÷Ïà¶Ô¸´ÔÓ£¬ÈÝÒ×·¢Éú¶ªÖ¡µÄÏÖÏ󣬴Ӷø¸Ð¾õ¿¨¶Ù¡£ÓкܶàÔÒò¿ÉÒÔµ¼Ö¶ªÖ¡£¬Ò²ÐíÊÇÒòΪÄãµÄlayoutÌ«¹ý¸´ÔÓ£¬ÎÞ·¨ÔÚ16msÄÚÍê³ÉäÖȾ£¬ÓпÉÄÜÊÇÒòΪÄãµÄUIÉÏÓвãµþÌ«¶àµÄ»æÖƵ¥Ôª£¬»¹ÓпÉÄÜÊÇÒòΪ¶¯»Ö´ÐеĴÎÊý¹ý¶à¡£ÕâЩ¶¼»áµ¼ÖÂCPU»òÕßGPU¸ºÔعýÖØ¡£
ÎÒÃÇ¿ÉÒÔͨ¹ýһЩ¹¤¾ßÀ´¶¨Î»ÎÊÌ⣬±ÈÈç¿ÉÒÔʹÓÃHierarchyViewerÀ´²éÕÒActivityÖеIJ¼¾ÖÊÇ·ñ¹ýÓÚ¸´ÔÓ£¬Ò²¿ÉÒÔʹÓÃÊÖ»úÉèÖÃÀïÃæµÄ¿ª·¢ÕßÑ¡Ï´ò¿ªShow
GPU OverdrawµÈÑ¡Ïî½øÐй۲졣Ä㻹¿ÉÒÔʹÓÃTraceViewÀ´¹Û²ìCPUµÄÖ´ÐÐÇé¿ö£¬¸ü¼Ó¿ì½ÝµÄÕÒµ½ÐÔÄÜÆ¿¾±¡£
1)Understanding Overdraw
Overdraw(¹ý¶È»æÖÆ)ÃèÊöµÄÊÇÆÁÄ»ÉϵÄij¸öÏñËØÔÚͬһ֡µÄʱ¼äÄÚ±»»æÖÆÁ˶à´Î¡£ÔÚ¶à²ã´ÎµÄUI½á¹¹ÀïÃæ£¬Èç¹û²»¿É¼ûµÄUIÒ²ÔÚ×ö»æÖƵIJÙ×÷£¬Õâ¾Í»áµ¼ÖÂijЩÏñËØÇøÓò±»»æÖÆÁ˶à´Î¡£Õâ¾ÍÀË·Ñ´óÁ¿µÄCPUÒÔ¼°GPU×ÊÔ´¡£

µ±Éè¼ÆÉÏ×·Çó¸ü»ªÀöµÄÊÓ¾õЧ¹ûµÄʱºò£¬ÎÒÃǾÍÈÝÒ×ÏÝÈë²ÉÓÃÔ½À´Ô½¶àµÄ²ãµþ×é¼þÀ´ÊµÏÖÕâÖÖÊÓ¾õЧ¹ûµÄ¹ÖȦ¡£ÕâºÜÈÝÒ×µ¼Ö´óÁ¿µÄÐÔÄÜÎÊÌ⣬ΪÁË»ñµÃ×î¼ÑµÄÐÔÄÜ£¬ÎÒÃDZØÐ뾡Á¿¼õÉÙOverdrawµÄÇé¿ö·¢Éú¡£
ÐÒÔ˵ÄÊÇ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÊÖ»úÉèÖÃÀïÃæµÄ¿ª·¢ÕßÑ¡Ï´ò¿ªShow GPU OverdrawµÄÑ¡Ï¿ÉÒÔ¹Û²ìUIÉϵÄOverdrawÇé¿ö¡£

À¶É«£¬µÂÌ£¬µºì£¬Éîºì´ú±íÁË4ÖÖ²»Í¬³Ì¶ÈµÄOverdrawÇé¿ö£¬ÎÒÃǵÄÄ¿±ê¾ÍÊǾ¡Á¿¼õÉÙºìÉ«Overdraw£¬¿´µ½¸ü¶àµÄÀ¶É«ÇøÓò¡£
OverdrawÓÐʱºòÊÇÒòΪÄãµÄUI²¼¾Ö´æÔÚ´óÁ¿ÖصþµÄ²¿·Ö£¬»¹ÓеÄʱºòÊÇÒòΪ·Ç±ØÐëµÄÖØµþ±³¾°¡£ÀýÈçij¸öActivityÓÐÒ»¸ö±³¾°£¬È»ºóÀïÃæµÄLayoutÓÖÓÐ×Ô¼ºµÄ±³¾°£¬Í¬Ê±×ÓViewÓÖ·Ö±ðÓÐ×Ô¼ºµÄ±³¾°¡£½ö½öÊÇͨ¹ýÒÆ³ý·Ç±ØÐëµÄ±³¾°Í¼Æ¬£¬Õâ¾ÍÄܹ»¼õÉÙ´óÁ¿µÄºìÉ«OverdrawÇøÓò£¬
Ôö¼ÓÀ¶É«ÇøÓòµÄÕ¼±È¡£ÕâÒ»´ëÊ©Äܹ»ÏÔÖøÌáÉý³ÌÐòÐÔÄÜ¡£
2)Understanding VSYNC
ΪÁËÀí½âAppÊÇÈçºÎ½øÐÐäÖȾµÄ£¬ÎÒÃDZØÐëÁ˽âÊÖ»úÓ²¼þÊÇÈçºÎ¹¤×÷£¬ÄÇô¾Í±ØÐëÀí½âʲôÊÇVSYNC¡£
ÔÚ½²½âVSYNC֮ǰ£¬ÎÒÃÇÐèÒªÁ˽âÁ½¸öÏà¹ØµÄ¸ÅÄ
1.Refresh Rate£º´ú±íÁËÆÁÄ»ÔÚÒ»ÃëÄÚË¢ÐÂÆÁÄ»µÄ´ÎÊý£¬ÕâÈ¡¾öÓÚÓ²¼þµÄ¹Ì¶¨²ÎÊý£¬ÀýÈç60Hz¡£
2.Frame Rate£º´ú±íÁËGPUÔÚÒ»ÃëÄÚ»æÖƲÙ×÷µÄÖ¡Êý£¬ÀýÈç30fps£¬60fps¡£
GPU»á»ñȡͼÐÎÊý¾Ý½øÐÐäÖȾ£¬È»ºóÓ²¼þ¸ºÔð°ÑäÖȾºóµÄÄÚÈݳÊÏÖµ½ÆÁÄ»ÉÏ£¬ËûÃÇÁ½Õß²»Í£µÄ½øÐÐÐ×÷¡£

²»ÐÒµÄÊÇ£¬Ë¢ÐÂÆµÂʺÍÖ¡Âʲ¢²»ÊÇ×ÜÄܹ»±£³ÖÏàͬµÄ½Ú×à¡£Èç¹û·¢ÉúÖ¡ÂÊÓëË¢ÐÂÆµÂʲ»Ò»ÖµÄÇé¿ö£¬¾Í»áÈÝÒ׳öÏÖTearingµÄÏÖÏó(»ÃæÉÏÏÂÁ½²¿·ÖÏÔʾÄÚÈÝ·¢Éú¶ÏÁÑ£¬À´×Ô²»Í¬µÄÁ½Ö¡Êý¾Ý·¢ÉúÖØµþ)¡£

Àí½âͼÏñäÖȾÀïÃæµÄË«ÖØÓëÈýÖØ»º´æ»úÖÆ£¬Õâ¸ö¸ÅÄî±È½Ï¸´ÔÓ£¬ÇëÒÆ²½²é¿´ÕâÀhttp://source.android.com/devices/graphics/index.html£¬»¹ÓÐÕâÀïhttp://article.yeeyan.org/view/37503/304664¡£
ͨ³£À´Ëµ£¬Ö¡Âʳ¬¹ýË¢ÐÂÆµÂÊÖ»ÊÇÒ»ÖÖÀíÏëµÄ×´¿ö£¬ÔÚ³¬¹ý60fpsµÄÇé¿öÏ£¬GPUËù²úÉúµÄÖ¡Êý¾Ý»áÒòΪµÈ´ýVSYNCµÄË¢ÐÂÐÅÏ¢¶ø±»Holdס£¬ÕâÑùÄܹ»±£³Öÿ´Îˢж¼ÓÐʵ¼ÊµÄеÄÊý¾Ý¿ÉÒÔÏÔʾ¡£µ«ÊÇÎÒÃÇÓöµ½¸ü¶àµÄÇé¿öÊÇÖ¡ÂÊСÓÚË¢ÐÂÆµÂÊ¡£

ÔÚÕâÖÖÇé¿öÏ£¬Ä³Ð©Ö¡ÏÔʾµÄ»ÃæÄÚÈݾͻáÓëÉÏÒ»Ö¡µÄ»ÃæÏàͬ¡£Ôã¸âµÄÊÂÇéÊÇ£¬Ö¡ÂÊ´Ó³¬¹ý60fpsͻȻµôµ½60fpsÒÔÏ£¬ÕâÑù¾Í»á·¢ÉúLAG£¬JANK£¬HITCHINGµÈ¿¨¶ÙµôÖ¡µÄ²»Ë³»¬µÄÇé¿ö¡£ÕâÒ²ÊÇÓû§¸ÐÊܲ»ºÃµÄÔÒòËùÔÚ¡£
3)Tool:Profile GPU Rendering
ÐÔÄÜÎÊÌâÈç´ËµÄÂé·³£¬ÐÒºÃÎÒÃÇ¿ÉÒÔÓй¤¾ßÀ´½øÐе÷ÊÔ¡£´ò¿ªÊÖ»úÀïÃæµÄ¿ª·¢ÕßÑ¡ÏѡÔñProfile
GPU Rendering£¬Ñ¡ÖÐOn screen as barsµÄÑ¡Ïî¡£

Ñ¡ÔñÁËÕâÑùÒÔºó£¬ÎÒÃÇ¿ÉÒÔÔÚÊÖ»ú»ÃæÉÏ¿´µ½·á¸»µÄGPU»æÖÆÍ¼ÐÎÐÅÏ¢£¬·Ö±ð¹ØÓÚStatusBar£¬NavBar£¬¼¤»îµÄ³ÌÐòActivityÇøÓòµÄGPU
RendingÐÅÏ¢¡£

Ëæ×ŽçÃæµÄˢУ¬½çÃæÉÏ»á¹ö¶¯ÏÔʾ´¹Ö±µÄÖù״ͼÀ´±íʾÿ֡»ÃæËùÐèÒªäÖȾµÄʱ¼ä£¬Öù״ͼԽ¸ß±íʾ»¨·ÑµÄäÖȾʱ¼äÔ½³¤¡£

ÖмäÓÐÒ»¸ùÂÌÉ«µÄºáÏߣ¬´ú±í16ms£¬ÎÒÃÇÐèҪȷ±£Ã¿Ò»Ö¡»¨·ÑµÄ×Üʱ¼ä¶¼µÍÓÚÕâÌõºáÏߣ¬ÕâÑù²ÅÄܹ»±ÜÃâ³öÏÖ¿¨¶ÙµÄÎÊÌâ¡£

ÿһÌõÖù×´Ïß¶¼°üº¬Èý²¿·Ö£¬À¶É«´ú±í²âÁ¿»æÖÆDisplay ListµÄʱ¼ä£¬ºìÉ«´ú±íOpenGLäÖȾDisplay
ListËùÐèÒªµÄʱ¼ä£¬»ÆÉ«´ú±íCPUµÈ´ýGPU´¦ÀíµÄʱ¼ä¡£
4)Why 60fps?
ÎÒÃÇͨ³£¶¼»áÌáµ½60fpsÓë16ms£¬¿ÉÊÇÖªµÀΪºÎ»áÊÇÒÔ³ÌÐòÊÇ·ñ´ïµ½60fpsÀ´×÷ΪAppÐÔÄܵĺâÁ¿±ê×¼Âð£¿ÕâÊÇÒòΪÈËÑÛÓë´óÄÔÖ®¼äµÄÐ×÷ÎÞ·¨¸ÐÖª³¬¹ý60fpsµÄ»Ãæ¸üС£
12fps´ó¸ÅÀàËÆÊÖ¶¯¿ìËÙ·¶¯Êé¼®µÄÖ¡ÂÊ£¬ÕâÃ÷ÏÔÊÇ¿ÉÒÔ¸ÐÖªµ½²»¹»Ë³»¬µÄ¡£24fpsʹµÃÈËÑÛ¸ÐÖªµÄÊÇÁ¬ÐøÏßÐÔµÄÔ˶¯£¬ÕâÆäʵÊǹ鹦ÓÚÔ˶¯Ä£ºýµÄЧ¹û¡£24fpsÊǵçÓ°½ºÈ¦Í¨³£Ê¹ÓõÄÖ¡ÂÊ£¬ÒòΪÕâ¸öÖ¡ÂÊÒѾ×ã¹»Ö§³Å´ó²¿·ÖµçÓ°»ÃæÐèÒª±í´ïµÄÄÚÈÝ£¬Í¬Ê±Äܹ»×î´óµÄ¼õÉÙ·ÑÓÃÖ§³ö¡£
µ«ÊǵÍÓÚ30fpsÊÇÎÞ·¨Ë³³©±íÏÖѤÀöµÄ»ÃæÄÚÈݵ쬴Ëʱ¾ÍÐèÒªÓõ½60fpsÀ´´ïµ½ÏëÒªµÄЧ¹û£¬µ±È»³¬¹ý60fpsÊÇûÓбØÒªµÄ¡£
¿ª·¢appµÄÐÔÄÜÄ¿±ê¾ÍÊDZ£³Ö60fps£¬ÕâÒâζ×Åÿһ֡ÄãÖ»ÓÐ16ms=1000/60µÄʱ¼äÀ´´¦ÀíËùÓеÄÈÎÎñ¡£
5)Android, UI and the GPU
Á˽âAndroidÊÇÈçºÎÀûÓÃGPU½øÐÐ»ÃæäÖȾÓÐÖúÓÚÎÒÃǸüºÃµÄÀí½âÐÔÄÜÎÊÌâ¡£ÄÇôһ¸ö×îʵ¼ÊµÄÎÊÌâÊÇ£ºactivityµÄ»ÃæÊÇÈçºÎ»æÖƵ½ÆÁÄ»Éϵģ¿ÄÇЩ¸´ÔÓµÄXML²¼¾ÖÎļþÓÖÊÇÈçºÎÄܹ»±»Ê¶±ð²¢»æÖƳöÀ´µÄ£¿

ResterizationÕ¤¸ñ»¯ÊÇ»æÖÆÄÇЩButton£¬Shape£¬Path£¬String£¬BitmapµÈ×é¼þ×î»ù´¡µÄ²Ù×÷¡£Ëü°ÑÄÇЩ×é¼þ²ð·Öµ½²»Í¬µÄÏñËØÉϽøÐÐÏÔʾ¡£ÕâÊÇÒ»¸öºÜ·ÑʱµÄ²Ù×÷£¬GPUµÄÒýÈë¾ÍÊÇΪÁ˼ӿìÕ¤¸ñ»¯µÄ²Ù×÷¡£
CPU¸ºÔð°ÑUI×é¼þ¼ÆËã³ÉPolygons£¬TextureÎÆÀí£¬È»ºó½»¸øGPU½øÐÐÕ¤¸ñ»¯äÖȾ¡£

È»¶øÃ¿´Î´ÓCPU×ªÒÆµ½GPUÊÇÒ»¼þºÜÂé·³µÄÊÂÇ飬ËùÐÒµÄÊÇOpenGL ES¿ÉÒÔ°ÑÄÇЩÐèÒªäÖȾµÄÎÆÀíHoldÔÚGPU
MemoryÀïÃæ£¬ÔÚÏ´ÎÐèÒªäÖȾµÄʱºòÖ±½Ó½øÐвÙ×÷¡£ËùÒÔÈç¹ûÄã¸üÐÂÁËGPUËùholdסµÄÎÆÀíÄÚÈÝ£¬ÄÇô֮ǰ±£´æµÄ״̬¾Í¶ªÊ§ÁË¡£
ÔÚAndroidÀïÃæÄÇЩÓÉÖ÷ÌâËùÌṩµÄ×ÊÔ´£¬ÀýÈçBitmaps£¬Drawables¶¼ÊÇÒ»Æð´ò°üµ½Í³Ò»µÄTextureÎÆÀíµ±ÖУ¬È»ºóÔÙ´«µÝµ½GPUÀïÃæ£¬ÕâÒâζ×Åÿ´ÎÄãÐèҪʹÓÃÕâЩ×ÊÔ´µÄʱºò£¬¶¼ÊÇÖ±½Ó´ÓÎÆÀíÀïÃæ½øÐлñÈ¡äÖȾµÄ¡£µ±È»Ëæ×ÅUI×é¼þµÄÔ½À´Ô½·á¸»£¬ÓÐÁ˸ü¶àÑݱäµÄÐÎ̬¡£
ÀýÈçÏÔʾͼƬµÄʱºò£¬ÐèÒªÏȾ¹ýCPUµÄ¼ÆËã¼ÓÔØµ½ÄÚ´æÖУ¬È»ºó´«µÝ¸øGPU½øÐÐäÖȾ¡£ÎÄ×ÖµÄÏÔʾ¸ü¼Ó¸´ÔÓ£¬ÐèÒªÏȾ¹ýCPU»»Ëã³ÉÎÆÀí£¬È»ºóÔÙ½»¸øGPU½øÐÐäÖȾ£¬»Øµ½CPU»æÖƵ¥¸ö×Ö·ûµÄʱºò£¬ÔÙÖØÐÂÒýÓþ¹ýGPUäÖȾµÄÄÚÈÝ¡£¶¯»ÔòÊÇÒ»¸ö¸ü¼Ó¸´ÔӵIJÙ×÷Á÷³Ì¡£
ΪÁËÄܹ»Ê¹µÃAppÁ÷³©£¬ÎÒÃÇÐèÒªÔÚÿһ֡16msÒÔÄÚ´¦ÀíÍêËùÓеÄCPUÓëGPU¼ÆË㣬»æÖÆ£¬äÖȾµÈµÈ²Ù×÷¡£
6)Invalidations, Layouts, and Performance
˳»¬¾«ÃîµÄ¶¯»ÊÇappÉè¼ÆÀïÃæ×îÖØÒªµÄÔªËØÖ®Ò»£¬ÕâЩ¶¯»Äܹ»ÏÔÖøÌáÉýÓû§ÌåÑé¡£ÏÂÃæ»á½²½âAndroidϵͳÊÇÈçºÎ´¦ÀíUI×é¼þµÄ¸üвÙ×÷µÄ¡£
ͨ³£À´Ëµ£¬AndroidÐèÒª°ÑXML²¼¾ÖÎļþת»»³ÉGPUÄܹ»Ê¶±ð²¢»æÖƵĶÔÏó¡£Õâ¸ö²Ù×÷ÊÇÔÚDisplayListµÄ°ïÖúÏÂÍê³ÉµÄ¡£DisplayList³ÖÓÐËùÓн«Òª½»¸øGPU»æÖƵ½ÆÁÄ»ÉϵÄÊý¾ÝÐÅÏ¢¡£
ÔÚij¸öViewµÚÒ»´ÎÐèÒª±»äÖȾʱ£¬DisplayList»áÒò´Ë¶ø±»´´½¨£¬µ±Õâ¸öViewÒªÏÔʾµ½ÆÁÄ»ÉÏʱ£¬ÎÒÃÇ»áÖ´ÐÐGPUµÄ»æÖÆÖ¸ÁîÀ´½øÐÐäÖȾ¡£Èç¹ûÄãÔÚºóÐøÓÐÖ´ÐÐÀàËÆÒÆ¶¯Õâ¸öViewµÄλÖõȲÙ×÷¶øÐèÒªÔÙ´ÎäÖȾÕâ¸öViewʱ£¬ÎÒÃǾͽö½öÐèÒª¶îÍâ²Ù×÷Ò»´ÎäÖȾָÁî¾Í¹»ÁË¡£
È»¶øÈç¹ûÄãÐÞ¸ÄÁËViewÖеÄijЩ¿É¼û×é¼þ£¬ÄÇô֮ǰµÄDisplayList¾ÍÎÞ·¨¼ÌÐøÊ¹ÓÃÁË£¬ÎÒÃÇÐèÒª»ØÍ·ÖØÐ´´½¨Ò»¸öDisplayList²¢ÇÒÖØÐÂÖ´ÐÐäÖȾָÁî²¢¸üе½ÆÁÄ»ÉÏ¡£
ÐèҪעÒâµÄÊÇ£ºÈκÎʱºòViewÖеĻæÖÆÄÚÈÝ·¢Éú±ä»¯Ê±£¬¶¼»áÖØÐÂÖ´Ðд´½¨DisplayList£¬äÖȾDisplayList£¬¸üе½ÆÁÄ»ÉϵÈһϵÁвÙ×÷¡£Õâ¸öÁ÷³ÌµÄ±íÏÖÐÔÄÜÈ¡¾öÓÚÄãµÄViewµÄ¸´Ôӳ̶ȣ¬ViewµÄ״̬±ä»¯ÒÔ¼°äÖȾ¹ÜµÀµÄÖ´ÐÐÐÔÄÜ¡£¾Ù¸öÀý×Ó£¬¼ÙÉèij¸öButtonµÄ´óСÐèÒªÔö´óµ½Ä¿Ç°µÄÁ½±¶£¬ÔÚÔö´óButton´óС֮ǰ£¬ÐèҪͨ¹ý¸¸ViewÖØÐ¼ÆËã²¢°Ú·ÅÆäËû×ÓViewµÄλÖá£ÐÞ¸ÄViewµÄ´óС»á´¥·¢Õû¸öHierarcyViewµÄÖØÐ¼ÆËã´óСµÄ²Ù×÷¡£Èç¹ûÊÇÐÞ¸ÄViewµÄλÖÃÔò»á´¥·¢HierarchViewÖØÐ¼ÆËãÆäËûViewµÄλÖá£Èç¹û²¼¾ÖºÜ¸´ÔÓ£¬Õâ¾Í»áºÜÈÝÒ×µ¼ÖÂÑÏÖØµÄÐÔÄÜÎÊÌâ¡£
ÎÒÃÇÐèÒª¾¡Á¿¼õÉÙOverdraw¡£

ÎÒÃÇ¿ÉÒÔͨ¹ýÇ°Ãæ½éÉܵÄMonitor GPU RenderingÀ´²é¿´äÖȾµÄ±íÏÖÐÔÄÜÈçºÎ£¬ÁíÍâÒ²¿ÉÒÔͨ¹ý¿ª·¢ÕßÑ¡ÏîÀïÃæµÄShow
GPU view updatesÀ´²é¿´ÊÓͼ¸üеIJÙ×÷£¬×îºóÎÒÃÇ»¹¿ÉÒÔͨ¹ýHierarchyViewerÕâ¸ö¹¤¾ßÀ´²é¿´²¼¾Ö£¬Ê¹µÃ²¼¾Ö¾¡Á¿±âƽ»¯£¬ÒƳý·Ç±ØÐèµÄUI×é¼þ£¬
ÕâЩ²Ù×÷Äܹ»¼õÉÙMeasure£¬LayoutµÄ¼ÆËãʱ¼ä¡£
7)Overdraw, Cliprect, QuickReject
ÒýÆðÐÔÄÜÎÊÌâµÄÒ»¸öºÜÖØÒªµÄ·½ÃæÊÇÒòΪ¹ý¶à¸´ÔӵĻæÖƲÙ×÷¡£ÎÒÃÇ¿ÉÒÔͨ¹ý¹¤¾ßÀ´¼ì²â²¢ÐÞ¸´±ê×¼UI×é¼þµÄOverdrawÎÊÌ⣬µ«ÊÇÕë¶Ô¸ß¶È×Ô¶¨ÒåµÄUI×é¼þÔòÏÔµÃÓÐЩÁ¦²»´ÓÐÄ¡£
ÓÐÒ»¸öÇÏÃÅÊÇÎÒÃÇ¿ÉÒÔͨ¹ýÖ´Ðм¸¸öAPIs·½·¨À´ÏÔÖøÌáÉý»æÖƲÙ×÷µÄÐÔÄÜ¡£Ç°ÃæÓÐÌáµ½¹ý£¬·Ç¿É¼ûµÄUI×é¼þ½øÐлæÖƸüлᵼÖÂOverdraw¡£ÀýÈçNav
Drawer´ÓǰÖÿɼûµÄActivity»¬³öÖ®ºó£¬Èç¹û»¹¼ÌÐø»æÖÆÄÇЩÔÚNav DrawerÀïÃæ²»¿É¼ûµÄUI×é¼þ£¬Õâ¾Íµ¼ÖÂÁËOverdraw¡£
ΪÁ˽â¾öÕâ¸öÎÊÌ⣬Androidϵͳ»áͨ¹ý±ÜÃâ»æÖÆÄÇЩÍêÈ«²»¿É¼ûµÄ×é¼þÀ´¾¡Á¿¼õÉÙOverdraw¡£ÄÇЩNav
DrawerÀïÃæ²»¿É¼ûµÄView¾Í²»»á±»Ö´ÐÐÀË·Ñ×ÊÔ´¡£

µ«ÊDz»ÐÒµÄÊÇ£¬¶ÔÓÚÄÇЩ¹ýÓÚ¸´ÔÓµÄ×Ô¶¨ÒåµÄView(ÖØÐ´ÁËonDraw·½·¨)£¬AndroidϵͳÎÞ·¨¼ì²â¾ßÌåÔÚonDrawÀïÃæ»áÖ´ÐÐʲô²Ù×÷£¬ÏµÍ³ÎÞ·¨¼à¿Ø²¢×Ô¶¯ÓÅ»¯£¬Ò²¾ÍÎÞ·¨±ÜÃâOverdrawÁË¡£µ«ÊÇÎÒÃÇ¿ÉÒÔͨ¹ýcanvas.clipRect()À´°ïÖúϵͳʶ±ðÄÇЩ¿É¼ûµÄÇøÓò¡£
Õâ¸ö·½·¨¿ÉÒÔÖ¸¶¨Ò»¿é¾ØÐÎÇøÓò£¬Ö»ÓÐÔÚÕâ¸öÇøÓòÄڲŻᱻ»æÖÆ£¬ÆäËûµÄÇøÓò»á±»ºöÊÓ¡£Õâ¸öAPI¿ÉÒԺܺõİïÖúÄÇЩÓжà×éÖØµþ×é¼þµÄ×Ô¶¨ÒåViewÀ´¿ØÖÆÏÔʾµÄÇøÓò¡£Í¬Ê±clipRect·½·¨»¹¿ÉÒÔ°ïÖú½ÚÔ¼CPUÓëGPU×ÊÔ´£¬ÔÚclipRectÇøÓòÖ®ÍâµÄ»æÖÆÖ¸Áî¶¼²»»á±»Ö´ÐУ¬
ÄÇЩ²¿·ÖÄÚÈÝÔÚ¾ØÐÎÇøÓòÄÚµÄ×é¼þ£¬ÈÔÈ»»áµÃµ½»æÖÆ¡£

³ýÁËclipRect·½·¨Ö®Í⣬ÎÒÃÇ»¹¿ÉÒÔʹÓÃcanvas.quickreject()À´ÅжÏÊÇ·ñûºÍij¸ö¾ØÐÎÏཻ£¬´Ó¶øÌø¹ýÄÇЩ·Ç¾ØÐÎÇøÓòÄڵĻæÖƲÙ×÷¡£×öÁËÄÇЩÓÅ»¯Ö®ºó£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÉÏÃæ½éÉܵÄShow
GPU OverdrawÀ´²é¿´Ð§¹û¡£
|