این صفحه توضیح می دهد که اضافه برداشت چیست، چگونه می توان آن را تشخیص داد، و راه های حذف یا کاهش آن را توضیح می دهد.
هنگامی که یک برنامه یک پیکسل یکسان را بیش از یک بار در یک فریم ترسیم می کند، به آن overdraw می گویند. اضافه برداشت معمولاً غیر ضروری است و بهتر است آن را حذف کنید. Overdraw زمانی به یک مشکل عملکرد تبدیل میشود که زمان GPU را برای رندر کردن پیکسلهایی که به آنچه کاربر روی صفحه میبیند کمکی نمیکنند تلف میکند.
در مورد اضافه برداشت
Overdraw به ترسیم چندین پیکسل روی صفحه توسط سیستم در یک فریم رندر اشاره دارد. به عنوان مثال، اگر یک دسته کارت UI روی هم دارید، هر کارت بخشی از کارت زیر خود را پنهان می کند.
با این حال، سیستم هنوز باید بخشهای پنهان کارتها را در پشته بکشد. این به این دلیل است که کارتهای روی هم بر اساس الگوریتم نقاش ارائه میشوند - یعنی به ترتیب پشت به جلو. این دنباله رندر به سیستم اجازه می دهد تا ترکیب آلفای مناسب را برای اشیاء شفاف مانند سایه ها اعمال کند.
مشکلات اضافه برداشت را پیدا کنید
این پلتفرم ابزارهای زیر را ارائه می دهد تا به شما کمک کند تعیین کنید که آیا اضافه برداشت بر عملکرد برنامه شما تأثیر می گذارد یا خیر.
اشکال زدایی ابزار اضافه برداشت GPU
ابزار Debug GPU Overdraw از کد رنگی برای نشان دادن تعداد دفعاتی که برنامه شما هر پیکسل را روی صفحه می کشد، استفاده می کند. هرچه این تعداد بیشتر باشد، احتمال اینکه اضافه برداشت بر عملکرد برنامه شما تأثیر بگذارد بیشتر است.
برای اطلاعات بیشتر، Visualize GPU overdraw را ببینید.
ابزار رندر GPU پروفایل
ابزار Profile GPU Rendering زمانی را نمایش می دهد که هر مرحله از خط لوله رندر یک فریم را به عنوان هیستوگرام پیمایشی نمایش می دهد. قسمت Process هر نوار که با رنگ نارنجی نشان داده شده است، زمانی را نشان می دهد که سیستم در حال تعویض بافرها است. این معیار سرنخ های مهمی در مورد اضافه برداشت ارائه می دهد.
در پردازندههای گرافیکی با عملکرد کمتر، نرخ پر شدن در دسترس - سرعتی که GPU میتواند بافر فریم را پر کند - ممکن است کم باشد. با افزایش تعداد پیکسلهای مورد نیاز برای ترسیم یک فریم، پردازش دستورات جدید توسط پردازنده گرافیکی بیشتر طول میکشد و از بقیه سیستم میخواهد منتظر بمانند تا بتواند به نتیجه برسد. نوار Process نشان می دهد که این افزایش زمانی اتفاق می افتد که GPU در تلاش برای ترسیم پیکسل ها با بیشترین سرعت ممکن غرق می شود. مسائلی غیر از تعداد خام پیکسل ها نیز ممکن است باعث افزایش این معیار شود. به عنوان مثال، اگر ابزار Debug GPU Overdraw نشان می دهد که اضافه برداشت زیاد و افزایش سرعت پردازش وجود دارد، احتمالاً مشکلی با اضافه برداشت وجود دارد.
برای اطلاعات بیشتر، سرعت رندر GPU نمایه را ببینید.
رفع اضافه برداشت
برای کاهش یا حذف اضافه برداشت می توانید کارهای زیر را انجام دهید:
- پس زمینه های غیر ضروری را در طرح بندی ها حذف کنید.
- سلسله مراتب نمایش را صاف کنید.
- کاهش شفافیت
این بخش اطلاعاتی در مورد هر یک از این رویکردها ارائه می دهد.
پس زمینه های غیر ضروری را در طرح بندی ها حذف کنید
بهطور پیشفرض، یک طرحبندی پسزمینه ندارد، به این معنی که چیزی را مستقیماً به خودی خود ارائه نمیکند. با این حال، وقتی طرحبندیها دارای پسزمینه هستند، ممکن است به اضافه برداشت کمک کنند.
با حذف پسزمینههای غیرضروری میتوانید عملکرد رندر را بهبود بخشید. ممکن است یک پسزمینه غیرضروری قابل مشاهده نباشد، زیرا همه چیزهایی که برنامه روی آن ترسیم میکند کاملاً پوشیده شده است. به عنوان مثال، این سیستم ممکن است پسزمینه والدین را کاملاً پوشش دهد، زمانی که نماهای فرزند را در بالای آن ترسیم میکند.
برای اینکه بفهمید چرا بیش از حد برداشت می کنید، به سلسله مراتب موجود در ابزار Layout Inspector نگاه کنید. می توانید به دنبال پس زمینه هایی بگردید که برای کاربر قابل مشاهده نیستند و آنها را حذف کنید. میتوانید پسزمینههای غیرضروری را در هر جایی که ظروف زیادی وجود دارد که رنگ پسزمینه مشترکی دارند حذف کنید. میتوانید پسزمینه پنجره را روی رنگ پسزمینه اصلی برنامهتان تنظیم کنید و همه کانتینرهای بالای آن را بدون مقادیر پسزمینه تعریف کنید.
سلسله مراتب نمایش را صاف کنید
طرحبندیهای مدرن به شما کمک میکنند تا نماها را روی هم قرار دهید تا طراحی زیبا ایجاد کنید. با این حال، انجام این کار می تواند عملکرد را با منجر به برداشت بیش از حد کاهش دهد، به خصوص در سناریوهایی که هر شیء نمای انباشته شده غیرشفاف است و نیاز به ترسیم پیکسل های دیده شده و نادیده روی صفحه دارد.
اگر با این مشکل مواجه شدید، ممکن است با بهینهسازی سلسلهمراتب نمای خود برای کاهش تعداد اشیاء رابط کاربری همپوشانی، عملکرد را بهبود ببخشید. برای اطلاعات بیشتر در مورد نحوه انجام این کار، به عملکرد و مشاهده سلسله مراتب مراجعه کنید.
کاهش شفافیت
رندر کردن پیکسلهای شفاف روی صفحه، که به عنوان رندر آلفا شناخته میشود، یکی از عوامل کلیدی در برداشت بیش از حد است. بر خلاف اضافهکشی استاندارد - زمانی که سیستم با ترسیم پیکسلهای مات در بالای آنها، پیکسلهای ترسیم شده موجود را کاملاً پنهان میکند، اشیاء شفاف نیاز دارند که ابتدا پیکسلهای موجود ترسیم شوند، تا معادله ترکیب درستی رخ دهد.
جلوههای بصری مانند انیمیشنهای شفاف، محو شدنها و سایههای رها شده شامل شفافیتی هستند و بنابراین میتوانند به طور قابلتوجهی به اضافه کشیدن کمک کنند. در این شرایط میتوانید با کاهش تعداد اشیاء شفافی که رندر میکنید، اضافه برداشت را بهبود ببخشید. برای مثال، می توانید با کشیدن متن سیاه رنگ در TextView
با مقدار آلفای شفاف روی آن، متن خاکستری دریافت کنید. با این حال، می توانید با کشیدن متن به رنگ خاکستری، همان جلوه را با عملکرد بهتر دریافت کنید.
برای کسب اطلاعات بیشتر در مورد هزینه های عملکردی که شفافیت در کل خط لوله ترسیم تحمیل می کند، ویدیوی هزینه های پنهان شفافیت را تماشا کنید.
،این صفحه توضیح می دهد که اضافه برداشت چیست، چگونه می توان آن را تشخیص داد، و راه های حذف یا کاهش آن را توضیح می دهد.
هنگامی که یک برنامه یک پیکسل یکسان را بیش از یک بار در یک فریم ترسیم می کند، به آن overdraw می گویند. اضافه برداشت معمولاً غیر ضروری است و بهتر است آن را حذف کنید. Overdraw زمانی به یک مشکل عملکرد تبدیل میشود که زمان GPU را برای رندر کردن پیکسلهایی که به آنچه کاربر روی صفحه میبیند کمکی نمیکنند تلف میکند.
در مورد اضافه برداشت
Overdraw به ترسیم چندین پیکسل روی صفحه توسط سیستم در یک فریم رندر اشاره دارد. به عنوان مثال، اگر یک دسته کارت UI روی هم دارید، هر کارت بخشی از کارت زیر خود را پنهان می کند.
با این حال، سیستم هنوز باید بخشهای پنهان کارتها را در پشته بکشد. این به این دلیل است که کارتهای روی هم بر اساس الگوریتم نقاش ارائه میشوند - یعنی به ترتیب پشت به جلو. این دنباله رندر به سیستم اجازه می دهد تا ترکیب آلفای مناسب را برای اشیاء شفاف مانند سایه ها اعمال کند.
مشکلات اضافه برداشت را پیدا کنید
این پلتفرم ابزارهای زیر را ارائه می دهد تا به شما کمک کند تعیین کنید که آیا اضافه برداشت بر عملکرد برنامه شما تأثیر می گذارد یا خیر.
اشکال زدایی ابزار اضافه برداشت GPU
ابزار Debug GPU Overdraw از کد رنگی برای نشان دادن تعداد دفعاتی که برنامه شما هر پیکسل را روی صفحه می کشد، استفاده می کند. هرچه این تعداد بیشتر باشد، احتمال اینکه اضافه برداشت بر عملکرد برنامه شما تأثیر بگذارد بیشتر است.
برای اطلاعات بیشتر، Visualize GPU overdraw را ببینید.
ابزار رندر GPU پروفایل
ابزار Profile GPU Rendering زمانی را نمایش می دهد که هر مرحله از خط لوله رندر یک فریم را به عنوان هیستوگرام پیمایشی نمایش می دهد. قسمت Process هر نوار که با رنگ نارنجی نشان داده شده است، زمانی را نشان می دهد که سیستم در حال تعویض بافرها است. این معیار سرنخ های مهمی در مورد اضافه برداشت ارائه می دهد.
در پردازندههای گرافیکی با عملکرد کمتر، نرخ پر شدن در دسترس - سرعتی که GPU میتواند بافر فریم را پر کند - ممکن است کم باشد. با افزایش تعداد پیکسلهای مورد نیاز برای ترسیم یک فریم، پردازش دستورات جدید توسط پردازنده گرافیکی بیشتر طول میکشد و از بقیه سیستم میخواهد منتظر بمانند تا بتواند به نتیجه برسد. نوار Process نشان می دهد که این افزایش زمانی اتفاق می افتد که GPU در تلاش برای ترسیم پیکسل ها با بیشترین سرعت ممکن غرق می شود. مسائلی غیر از تعداد خام پیکسل ها نیز ممکن است باعث افزایش این معیار شود. به عنوان مثال، اگر ابزار Debug GPU Overdraw نشان می دهد که اضافه برداشت زیاد و افزایش سرعت پردازش وجود دارد، احتمالاً مشکلی با اضافه برداشت وجود دارد.
برای اطلاعات بیشتر، سرعت رندر GPU نمایه را ببینید.
رفع اضافه برداشت
برای کاهش یا حذف اضافه برداشت می توانید کارهای زیر را انجام دهید:
- پس زمینه های غیر ضروری را در طرح بندی ها حذف کنید.
- سلسله مراتب نمایش را صاف کنید.
- کاهش شفافیت
این بخش اطلاعاتی در مورد هر یک از این رویکردها ارائه می دهد.
پس زمینه های غیر ضروری را در طرح بندی ها حذف کنید
بهطور پیشفرض، یک طرحبندی پسزمینه ندارد، به این معنی که چیزی را مستقیماً به خودی خود ارائه نمیکند. با این حال، وقتی طرحبندیها دارای پسزمینه هستند، ممکن است به اضافه برداشت کمک کنند.
با حذف پسزمینههای غیرضروری میتوانید عملکرد رندر را بهبود بخشید. ممکن است یک پسزمینه غیرضروری قابل مشاهده نباشد، زیرا همه چیزهایی که برنامه روی آن ترسیم میکند کاملاً پوشیده شده است. به عنوان مثال، این سیستم ممکن است پسزمینه والدین را کاملاً پوشش دهد، زمانی که نماهای فرزند را در بالای آن ترسیم میکند.
برای اینکه بفهمید چرا بیش از حد برداشت می کنید، به سلسله مراتب موجود در ابزار Layout Inspector نگاه کنید. می توانید به دنبال پس زمینه هایی که برای کاربر قابل مشاهده نیستند بگردید و آنها را حذف کنید. میتوانید پسزمینههای غیرضروری را در هر جایی که ظروف زیادی وجود دارد که رنگ پسزمینه مشترکی دارند حذف کنید. میتوانید پسزمینه پنجره را روی رنگ پسزمینه اصلی برنامهتان تنظیم کنید و همه کانتینرهای بالای آن را بدون مقادیر پسزمینه تعریف کنید.
سلسله مراتب نمایش را صاف کنید
طرحبندیهای مدرن به شما کمک میکنند تا نماها را روی هم قرار دهید تا طراحی زیبا ایجاد کنید. با این حال، انجام این کار می تواند عملکرد را با منجر به برداشت بیش از حد کاهش دهد، به خصوص در سناریوهایی که هر شیء نمای انباشته شده غیرشفاف است و نیاز به ترسیم پیکسل های دیده شده و نادیده روی صفحه دارد.
اگر با این مشکل مواجه شدید، ممکن است با بهینهسازی سلسلهمراتب نمای خود برای کاهش تعداد اشیاء رابط کاربری همپوشانی، عملکرد را بهبود ببخشید. برای اطلاعات بیشتر در مورد نحوه انجام این کار، به عملکرد و مشاهده سلسله مراتب مراجعه کنید.
کاهش شفافیت
رندر کردن پیکسلهای شفاف روی صفحه، که به عنوان رندر آلفا شناخته میشود، یکی از عوامل کلیدی در برداشت بیش از حد است. بر خلاف اضافهکشی استاندارد - زمانی که سیستم با ترسیم پیکسلهای مات در بالای آنها، پیکسلهای ترسیم شده موجود را کاملاً پنهان میکند، اشیاء شفاف نیاز دارند که ابتدا پیکسلهای موجود ترسیم شوند، تا معادله ترکیب درستی رخ دهد.
جلوههای بصری مانند انیمیشنهای شفاف، محو شدنها و سایههای رها شده شامل شفافیتی هستند و بنابراین میتوانند به طور قابلتوجهی به اضافه کشیدن کمک کنند. در این شرایط میتوانید با کاهش تعداد اشیاء شفافی که رندر میکنید، اضافه برداشت را بهبود ببخشید. برای مثال، می توانید با کشیدن متن سیاه رنگ در TextView
با مقدار آلفای شفاف روی آن، متن خاکستری دریافت کنید. با این حال، می توانید با کشیدن متن به رنگ خاکستری، همان جلوه را با عملکرد بهتر دریافت کنید.
برای کسب اطلاعات بیشتر در مورد هزینه های عملکردی که شفافیت در کل خط لوله ترسیم تحمیل می کند، ویدیوی هزینه های پنهان شفافیت را تماشا کنید.
،این صفحه توضیح می دهد که اضافه برداشت چیست، چگونه می توان آن را تشخیص داد، و راه های حذف یا کاهش آن را توضیح می دهد.
هنگامی که یک برنامه یک پیکسل یکسان را بیش از یک بار در یک فریم ترسیم می کند، به آن overdraw می گویند. اضافه برداشت معمولاً غیر ضروری است و بهتر است آن را حذف کنید. Overdraw زمانی به یک مشکل عملکرد تبدیل میشود که زمان GPU را برای رندر کردن پیکسلهایی که به آنچه کاربر روی صفحه میبیند کمکی نمیکنند تلف میکند.
در مورد اضافه برداشت
Overdraw به ترسیم چندین پیکسل روی صفحه توسط سیستم در یک فریم رندر اشاره دارد. به عنوان مثال، اگر یک دسته کارت UI روی هم دارید، هر کارت بخشی از کارت زیر خود را پنهان می کند.
با این حال، سیستم هنوز باید بخشهای پنهان کارتها را در پشته بکشد. این به این دلیل است که کارتهای روی هم بر اساس الگوریتم نقاش ارائه میشوند - یعنی به ترتیب پشت به جلو. این دنباله رندر به سیستم اجازه می دهد تا ترکیب آلفای مناسب را برای اشیاء شفاف مانند سایه ها اعمال کند.
مشکلات اضافه برداشت را پیدا کنید
این پلتفرم ابزارهای زیر را ارائه می دهد تا به شما کمک کند تعیین کنید که آیا اضافه برداشت بر عملکرد برنامه شما تأثیر می گذارد یا خیر.
اشکال زدایی ابزار اضافه برداشت GPU
ابزار Debug GPU Overdraw از کد رنگی برای نشان دادن تعداد دفعاتی که برنامه شما هر پیکسل را روی صفحه می کشد، استفاده می کند. هرچه این تعداد بیشتر باشد، احتمال اینکه اضافه برداشت بر عملکرد برنامه شما تأثیر بگذارد بیشتر است.
برای اطلاعات بیشتر، Visualize GPU overdraw را ببینید.
ابزار رندر GPU پروفایل
ابزار Profile GPU Rendering زمانی را نمایش می دهد که هر مرحله از خط لوله رندر یک فریم را به عنوان هیستوگرام پیمایشی نمایش می دهد. قسمت Process هر نوار که با رنگ نارنجی نشان داده شده است، زمانی را نشان می دهد که سیستم در حال تعویض بافرها است. این معیار سرنخ های مهمی در مورد اضافه برداشت ارائه می دهد.
در پردازندههای گرافیکی با عملکرد کمتر، نرخ پر شدن در دسترس - سرعتی که GPU میتواند بافر فریم را پر کند - ممکن است کم باشد. با افزایش تعداد پیکسلهای مورد نیاز برای ترسیم یک فریم، پردازش دستورات جدید توسط پردازنده گرافیکی بیشتر طول میکشد و از بقیه سیستم میخواهد منتظر بمانند تا بتواند به نتیجه برسد. نوار Process نشان می دهد که این افزایش زمانی اتفاق می افتد که GPU در تلاش برای ترسیم پیکسل ها با بیشترین سرعت ممکن غرق می شود. مسائلی غیر از تعداد خام پیکسل ها نیز ممکن است باعث افزایش این معیار شود. به عنوان مثال، اگر ابزار Debug GPU Overdraw نشان می دهد که اضافه برداشت زیاد و افزایش سرعت پردازش وجود دارد، احتمالاً مشکلی با اضافه برداشت وجود دارد.
برای اطلاعات بیشتر، سرعت رندر GPU نمایه را ببینید.
رفع اضافه برداشت
برای کاهش یا حذف اضافه برداشت می توانید کارهای زیر را انجام دهید:
- پس زمینه های غیر ضروری را در طرح بندی ها حذف کنید.
- سلسله مراتب نمایش را صاف کنید.
- کاهش شفافیت
این بخش اطلاعاتی در مورد هر یک از این رویکردها ارائه می دهد.
پس زمینه های غیر ضروری را در طرح بندی ها حذف کنید
بهطور پیشفرض، یک طرحبندی پسزمینه ندارد، به این معنی که چیزی را مستقیماً به خودی خود ارائه نمیکند. با این حال، وقتی طرحبندیها دارای پسزمینه هستند، ممکن است به اضافه برداشت کمک کنند.
با حذف پسزمینههای غیرضروری، میتوانید عملکرد رندر را بهبود بخشید. ممکن است یک پسزمینه غیرضروری قابل مشاهده نباشد، زیرا همه چیزهایی که برنامه روی آن ترسیم میکند کاملاً پوشیده شده است. به عنوان مثال، سیستم ممکن است پسزمینه والدین را کاملاً پوشش دهد، زمانی که نماهای فرزند را بالای آن ترسیم میکند.
برای اینکه بدانید چرا بیش از حد برداشت می کنید، به سلسله مراتب موجود در ابزار Layout Inspector نگاه کنید. می توانید به دنبال پس زمینه هایی بگردید که برای کاربر قابل مشاهده نیستند و آنها را حذف کنید. میتوانید پسزمینههای غیرضروری را در هر جایی که ظروف زیادی وجود دارد که رنگ پسزمینه مشترکی دارند حذف کنید. میتوانید پسزمینه پنجره را روی رنگ پسزمینه اصلی برنامهتان تنظیم کنید و همه کانتینرهای بالای آن را بدون مقادیر پسزمینه تعریف کنید.
سلسله مراتب نمایش را صاف کنید
طرحبندیهای مدرن به شما کمک میکنند تا نماها را روی هم قرار دهید تا طراحی زیبا ایجاد کنید. با این حال، انجام این کار می تواند عملکرد را با منجر به برداشت بیش از حد کاهش دهد، به خصوص در سناریوهایی که هر شیء نمای انباشته شده غیرشفاف است و نیاز به ترسیم پیکسل های دیده شده و نادیده روی صفحه دارد.
اگر با این مشکل مواجه شدید، ممکن است با بهینهسازی سلسلهمراتب نمای خود برای کاهش تعداد اشیاء رابط کاربری همپوشانی، عملکرد را بهبود ببخشید. برای اطلاعات بیشتر در مورد نحوه انجام این کار، به عملکرد و مشاهده سلسله مراتب مراجعه کنید.
کاهش شفافیت
رندر کردن پیکسلهای شفاف روی صفحه، که به عنوان رندر آلفا شناخته میشود، یکی از عوامل کلیدی در برداشت بیش از حد است. بر خلاف اضافهکشی استاندارد - زمانی که سیستم با ترسیم پیکسلهای مات در بالای آنها، پیکسلهای ترسیم شده موجود را کاملاً پنهان میکند، اشیاء شفاف نیاز دارند که ابتدا پیکسلهای موجود ترسیم شوند، تا معادله ترکیب درستی رخ دهد.
جلوههای بصری مانند انیمیشنهای شفاف، محو شدنها و سایههای رها شده شامل شفافیتی هستند و بنابراین میتوانند به طور قابلتوجهی به اضافه کشیدن کمک کنند. در این شرایط میتوانید با کاهش تعداد اشیاء شفافی که رندر میکنید، اضافه برداشت را بهبود ببخشید. برای مثال، می توانید با کشیدن متن سیاه رنگ در TextView
با مقدار آلفای شفاف روی آن، متن خاکستری دریافت کنید. با این حال، می توانید با کشیدن متن به رنگ خاکستری، همان جلوه را با عملکرد بهتر دریافت کنید.
برای کسب اطلاعات بیشتر در مورد هزینه های عملکردی که شفافیت در کل خط لوله ترسیم تحمیل می کند، ویدیوی هزینه های پنهان شفافیت را تماشا کنید.
،این صفحه توضیح می دهد که اضافه برداشت چیست، چگونه می توان آن را تشخیص داد، و راه های حذف یا کاهش آن را توضیح می دهد.
هنگامی که یک برنامه یک پیکسل یکسان را بیش از یک بار در یک فریم ترسیم می کند، به آن overdraw می گویند. اضافه برداشت معمولاً غیر ضروری است و بهتر است آن را حذف کنید. Overdraw زمانی به یک مشکل عملکرد تبدیل میشود که زمان GPU را برای رندر کردن پیکسلهایی که به چیزی که کاربر روی صفحه میبیند کمک نمیکنند تلف میکند.
در مورد اضافه برداشت
Overdraw به ترسیم چندین پیکسل روی صفحه توسط سیستم در یک فریم رندر اشاره دارد. به عنوان مثال، اگر یک دسته کارت UI روی هم دارید، هر کارت بخشی از کارت زیر خود را پنهان می کند.
با این حال، سیستم هنوز باید بخشهای پنهان کارتها را در پشته بکشد. این به این دلیل است که کارتهای روی هم بر اساس الگوریتم نقاش ارائه میشوند - یعنی به ترتیب پشت به جلو. این دنباله رندر به سیستم اجازه می دهد تا ترکیب آلفای مناسب را برای اشیاء شفاف مانند سایه ها اعمال کند.
مشکلات اضافه برداشت را پیدا کنید
این پلتفرم ابزارهای زیر را ارائه می دهد تا به شما کمک کند تعیین کنید که آیا اضافه برداشت بر عملکرد برنامه شما تأثیر می گذارد یا خیر.
اشکال زدایی ابزار اضافه برداشت GPU
ابزار Debug GPU Overdraw از کد رنگی برای نشان دادن تعداد دفعاتی که برنامه شما هر پیکسل را روی صفحه می کشد، استفاده می کند. هرچه این تعداد بیشتر باشد، احتمال اینکه اضافه برداشت بر عملکرد برنامه شما تأثیر بگذارد بیشتر است.
برای اطلاعات بیشتر، Visualize GPU overdraw را ببینید.
ابزار رندر GPU پروفایل
ابزار Profile GPU Rendering زمانی را نمایش می دهد که هر مرحله از خط لوله رندر یک فریم را به عنوان هیستوگرام پیمایشی نمایش می دهد. قسمت Process هر نوار که با رنگ نارنجی نشان داده شده است، زمانی را نشان می دهد که سیستم در حال تعویض بافرها است. این معیار سرنخ های مهمی در مورد اضافه برداشت ارائه می دهد.
در پردازندههای گرافیکی با عملکرد کمتر، نرخ پر شدن در دسترس - سرعتی که GPU میتواند بافر فریم را پر کند - ممکن است کم باشد. با افزایش تعداد پیکسلهای مورد نیاز برای ترسیم یک فریم، پردازش دستورات جدید توسط پردازنده گرافیکی بیشتر طول میکشد و از بقیه سیستم میخواهد منتظر بمانند تا بتواند به نتیجه برسد. نوار Process نشان می دهد که این افزایش زمانی اتفاق می افتد که GPU در تلاش برای ترسیم پیکسل ها با بیشترین سرعت ممکن غرق می شود. مسائلی غیر از تعداد خام پیکسل ها نیز ممکن است باعث افزایش این معیار شود. به عنوان مثال، اگر ابزار Debug GPU Overdraw نشان می دهد که اضافه برداشت زیاد و افزایش سرعت پردازش وجود دارد، احتمالاً مشکلی با اضافه برداشت وجود دارد.
برای اطلاعات بیشتر، سرعت رندر GPU نمایه را ببینید.
رفع اضافه برداشت
برای کاهش یا حذف اضافه برداشت می توانید کارهای زیر را انجام دهید:
- پس زمینه های غیر ضروری را در طرح بندی ها حذف کنید.
- سلسله مراتب نمایش را صاف کنید.
- کاهش شفافیت
این بخش اطلاعاتی در مورد هر یک از این رویکردها ارائه می دهد.
پس زمینه های غیر ضروری را در طرح بندی ها حذف کنید
بهطور پیشفرض، یک طرحبندی پسزمینه ندارد، به این معنی که چیزی را مستقیماً به خودی خود ارائه نمیکند. با این حال، وقتی طرحبندیها دارای پسزمینه هستند، ممکن است به اضافه برداشت کمک کنند.
با حذف پسزمینههای غیرضروری، میتوانید عملکرد رندر را بهبود بخشید. ممکن است یک پسزمینه غیرضروری قابل مشاهده نباشد، زیرا همه چیزهایی که برنامه روی آن ترسیم میکند کاملاً پوشیده شده است. به عنوان مثال، این سیستم ممکن است پسزمینه والدین را کاملاً پوشش دهد، زمانی که نماهای فرزند را در بالای آن ترسیم میکند.
برای اینکه بفهمید چرا بیش از حد برداشت می کنید، به سلسله مراتب موجود در ابزار Layout Inspector نگاه کنید. می توانید به دنبال پس زمینه هایی بگردید که برای کاربر قابل مشاهده نیستند و آنها را حذف کنید. میتوانید پسزمینههای غیرضروری را در هر جایی که ظروف زیادی وجود دارد که رنگ پسزمینه مشترکی دارند حذف کنید. میتوانید پسزمینه پنجره را روی رنگ پسزمینه اصلی برنامهتان تنظیم کنید و همه کانتینرهای بالای آن را بدون مقادیر پسزمینه تعریف کنید.
سلسله مراتب نمایش را صاف کنید
طرحبندیهای مدرن به شما کمک میکنند تا نماها را روی هم قرار دهید تا طراحی زیبا ایجاد کنید. با این حال، انجام این کار می تواند عملکرد را با منجر به برداشت بیش از حد کاهش دهد، به خصوص در سناریوهایی که هر شیء نمای انباشته شده غیرشفاف است و نیاز به ترسیم پیکسل های دیده شده و نادیده روی صفحه دارد.
اگر با این مشکل مواجه شدید، ممکن است با بهینهسازی سلسلهمراتب نمای خود برای کاهش تعداد اشیاء رابط کاربری همپوشانی، عملکرد را بهبود ببخشید. برای اطلاعات بیشتر در مورد نحوه انجام این کار، به عملکرد و مشاهده سلسله مراتب مراجعه کنید.
کاهش شفافیت
رندر کردن پیکسلهای شفاف روی صفحه، که به عنوان رندر آلفا شناخته میشود، یکی از عوامل کلیدی در برداشت بیش از حد است. بر خلاف اضافهکشی استاندارد - زمانی که سیستم با ترسیم پیکسلهای مات در بالای آنها، پیکسلهای ترسیم شده موجود را کاملاً پنهان میکند، اشیاء شفاف نیاز دارند که ابتدا پیکسلهای موجود ترسیم شوند، تا معادله ترکیب درستی رخ دهد.
جلوههای بصری مانند انیمیشنهای شفاف، محو شدنها و سایههای رها شده شامل شفافیتی هستند و بنابراین میتوانند به طور قابلتوجهی به اضافه کشیدن کمک کنند. در این شرایط میتوانید با کاهش تعداد اشیاء شفافی که رندر میکنید، اضافه برداشت را بهبود ببخشید. برای مثال، می توانید با کشیدن متن سیاه رنگ در TextView
با مقدار آلفای شفاف روی آن، متن خاکستری دریافت کنید. با این حال، می توانید با کشیدن متن به رنگ خاکستری، همان جلوه را با عملکرد بهتر دریافت کنید.
برای کسب اطلاعات بیشتر در مورد هزینه های عملکردی که شفافیت در کل خط لوله ترسیم تحمیل می کند، ویدیوی هزینه های پنهان شفافیت را تماشا کنید.