Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
AndroidÐÔÄÜÓÅ»¯µä·¶£¨ÉÏ£©
 
×÷ÕߣºÕźèÑó À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ£º 2015-05-21
  2919  次浏览      32
 

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À´²é¿´Ð§¹û¡£

   
2919 ´Îä¯ÀÀ       32
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 12-11[±±¾©]
LLM´óÄ£ÐÍÓëÖÇÄÜÌ忪·¢ÊµÕ½ 12-18[±±¾©]
ǶÈëʽÈí¼þ²âÊÔ 12-25[±±¾©]
AIÔ­ÉúÓ¦ÓõÄ΢·þÎñ¼Ü¹¹ 1-9[±±¾©]
AI´óÄ£Ðͱàд¸ßÖÊÁ¿´úÂë 1-14[±±¾©]
ÐèÇó·ÖÎöÓë¹ÜÀí 1-22[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ

ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ