Overdraw ایک ہی پکسلز کو ایک فریم میں کئی بار ضرورت سے زیادہ دوبارہ ڈرائینا ہے۔ جب اسکرین پر بہت سے اوورلیپنگ عناصر والا پیچیدہ انٹرفیس ظاہر ہوتا ہے، تو GPU ہر پکسل کو بار بار پروسیس کرنے پر مجبور ہوتا ہے، جو براہ راست فریم ریٹ اور توانائی کی کھپت کو متاثر کرتا ہے۔ Google Android Developer Documentation، 2025 کے مطابق، overdraw کو 50% کم کرنے سے رینڈرنگ کارکردگی 30% تک بڑھ سکتی ہے۔ Overdraw کی بہتری ہموار اینیمیشن اور ریسپانسیو انٹرفیس والی ایپلیکیشنز تیار کرتے وقت ایک لازمی قدم ہے۔
اہم نکات
Overdraw ایک ایسی صورت حال ہے جہاں ایک ہی اسکرین پکسل کو ایک رینڈر فریم کے اندر کئی بار دوبارہ ڈرائیا جاتا ہے۔ ایک مثالی منظر نامے میں، ہر پکسل کو صرف ایک بار لکھا جانا چاہیے، لیکن حقیقی انٹرفیس میں nested Views، پس منظر کی تصاویر اور شفاف تہوں کی وجہ سے، GPU بار بار لکھتا ہے۔
ہر اضافی دوبارہ ڈرائینگ فریم رینڈر وقت کو بڑھاتی ہے۔ معیاری 60 FPS شرح پر، ہر فریم کو تقریباً 16.6 ms ملتا ہے۔ اگر overdraw اس حد سے تجاوز کرنے کا سبب بنتا ہے، تو فریم کی شرح 30 FPS یا اس سے کم ہو جاتی ہے، جو انٹرفیس کی ہمواری کو نمایاں طور پر کم کر دیتی ہے۔
Google کی Android Performance Patterns کے مطابق، 3x overdraw فیکٹر والی ایپ، 1x overdraw والی ایپ کے مقابلے میں فریگمنٹ شیڈر پر تین گنا زیادہ وقت صرف کرتی ہے۔ کم کارکردگی والے GPU آلات پر، یہ اسکرولنگ اور اینیمیشن کے دوران نمایاں وقفے کا سبب بنتا ہے۔
موبائل ڈویلپرز کے لیے، overdraw کو سمجھنا انتہائی اہم ہے: یہ عنصر اکثر بظاہر سادہ اسکرینوں پر بڑی تعداد میں nested عناصر کے ساتھ جھٹکے والی اسکرولنگ اور کم فریم ریٹ کا سبب بنتا ہے۔
GPU پائپ لائن کئی مراحل پر مشتمل ہے: ورٹیکس شیڈر، راسٹرائزیشن اور فریگمنٹ شیڈر۔ فریگمنٹ شیڈر سب سے مہنگا حصہ ہے کیونکہ یہ ہر پریمیٹو کے ہر پکسل کے لیے چلتا ہے۔ 2x overdraw پر، فریگمنٹ شیڈر دوگنا پکسلز پروسیس کرتا ہے، جو براہ راست فریم وقت بڑھاتا ہے۔
جدید موبائل GPUs جیسے Qualcomm Adreno اور Apple GPU میں Early-Z Test اور Hidden Surface Removal میکانزم ہیں جو جزوی طور پر overdraw کی تلافی کرتے ہیں۔ تاہم، یہ بہتری صرف مخصوص شرائط میں کام کرتی ہے، اور صرف ہارڈویئر ایکسلریشن پر انحصار نہیں کرنا چاہیے۔
مثال کے طور پر، نیم شفاف عناصر کو رینڈر کرتے وقت، ہارڈویئر Early-Z غیر مؤثر ہے، اور ہر پکسل مکمل طور پر پروسیس ہوتا ہے — ایسے منظرناموں میں overdraw 5x یا اس سے زیادہ تک پہنچ سکتا ہے۔
کثیر پرتوں والے پس منظر موبائل ایپس میں overdraw کی اہم وجوہات میں سے ایک ہیں۔ جب کوئی Activity یا ViewController پس منظر کا رنگ سیٹ کرتا ہے، تو ہر nested View اپنا پس منظر شامل کر سکتی ہے، اور پکسل ہر درجہ بندی کی سطح پر دوبارہ ڈرائیا جاتا ہے۔
Uber Engineering کے ایک مطالعے سے پتہ چلا کہ ان کی Android ایپ میں ضرورت سے زیادہ پس منظر ہٹانے سے overdraw 32% اور اسکرین رینڈرنگ کا وقت 25% کم ہوا۔ iOS میں بھی ایسی ہی صورت حال ہے: غیر شفاف Views کے لیے opaque = true سیٹ کرنا الفا بیلنڈنگ کو ختم کرتا ہے اور ایک سے زیادہ پکسل لکھنے سے روکتا ہے۔
iOS پلیٹ فارم پر، overdraw اکثر شفاف UIStackView، shouldRasterize کے ساتھ CALayer اور اوورلیپنگ UIBlurEffect کے استعمال کی وجہ سے ہوتا ہے۔ Apple XCode میں Core Animation ٹول کے ذریعے overdraw چیک کرنے کی سفارش کرتا ہے — یہ دوبارہ ڈرائینگ زونز کو سرخ اوورلے کے طور پر دکھاتا ہے۔
Debug GPU Overdraw ایک بلٹ ان Android ٹول ہے جو overdraw فیکٹر کے لحاظ سے اسکرین کو مختلف رنگوں میں رنگتا ہے۔ جامنی کا مطلب 1x، نیلا — 2x، سبز — 3x، گلابی — 4x، سرخ — 5x یا اس سے زیادہ ہے۔ ایک مثالی اسکرین زیادہ تر جامنی ہونی چاہیے۔
iOS میں، اسی طرح کی تشخیص XCode Instruments میں Core Animation ٹول کے ذریعے کی جاتی ہے۔ یہ دوبارہ ڈرائینگ زونز کو تصور کرتا ہے اور Color Blended Layers موڈ میں پکسل لکھنے کی صحیح تعداد دکھاتا ہے۔ سبز تہیں غیر شفاف (بہترین) ہیں، سرخ تہوں میں شفافیت ہوتی ہے اور overdraw کا سبب بنتی ہیں۔
تشخیص کے بعد، بہتری سے پہلے اور بعد میں FPS کی پیمائش کرنا ضروری ہے۔ overdraw کو ٹھیک کرتے وقت 10–15 FPS کا فرق فہرستوں اور اینیمیشن والی پیچیدہ اسکرین کے لیے ایک عام نتیجہ ہے۔
ضرورت سے زیادہ پس منظر ہٹانا سب سے آسان اور مؤثر طریقہ ہے۔ Android میں، ہر View کے لیے نہیں، بلکہ صرف Activity یا تھیم کے لیے android:windowBackground سیٹ کریں۔ iOS میں، تمام غیر شفاف UIView کے لیے opaque = true ان عناصر کے لیے overdraw کو تقریباً صفر کر دیتا ہے۔
Google I/O 2019 کے مطابق، Google Maps میں overdraw کی بہتری نے پرتوں کے انضمام اور ڈرائینگ ایریا کو محدود کرنے کے لیے ClipRect کے استعمال کے ذریعے فریم رینڈرنگ کا وقت 40% کم کیا۔ Android ڈویلپرز کے لیے، Google درج ذیل طریقوں کی سفارش کرتا ہے:
iOS میں، بہتری CALayer کنفیگریشن کے ذریعے حاصل کی جاتی ہے: masksToBounds = true سیٹ کرنا پرت کی حدود سے باہر کے مواد کو کراپ کرتا ہے، اور shouldRasterize جامد تہوں کے لیے بٹ میپ کیشنگ کو فعال کرتا ہے۔
آئیے Kotlin اور Swift میں عملی مثالیں دیکھتے ہیں جو overdraw ختم کرنے کے عام منظرناموں کو ظاہر کرتی ہیں۔ پہلی مثال Android میں ClipRect کے ذریعے بہتری دکھاتی ہے:
class OptimizedView@JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : View(context, attrs) {
override fun onDraw(canvas: Canvas) {
canvas.clipRect(
paddingLeft.toFloat(), paddingTop.toFloat(),
width - paddingRight.toFloat(), height - paddingBottom.toFloat()
)
// Draw content only within clipped area
super.onDraw(canvas)
}
}
Swift میں دوسری مثال دکھاتی ہے کہ اگر عنصر نیم شفاف نہیں ہونا چاہیے تو پرت کے لیے شفافیت کو کیسے غیر فعال کریں:
class OpaqueLabel: UILabel {
override var isOpaque: Bool {
get { true }
set { }
}
override func draw(_ rect: CGRect) {
backgroundColor?.setFill()
UIRectFill(rect)
super.draw(rect)
}
}
تیسری مثال Android میں تاخیر سے میپ لوڈ کرنے کے لیے ViewStub کے استعمال کو ظاہر کرتی ہے۔ ViewStub اس وقت تک رینڈر نہیں ہوتا جب تک یہ نظر نہ آئے، جو اسکرین کی ابتدا کے مرحلے میں overdraw کو ختم کرتا ہے:
<!-- layout/activity_main.xml -->
<ViewStub
android:id="@+id/map_stub"
android:layout_width="match_parent"
android:layout_height="200dp"
android:inflatedId="@+id/map_container"
android:layout="@layout/map_fragment" />
// Inflate on demand
ViewStub stub = findViewById(R.id.map_stub)
stub?.inflate()
اکثر پوچھے گئے سوالات
Overdraw اس وقت ہوتا ہے جب اسکرین پر ایک پکسل ایک فریم میں کئی بار دوبارہ ڈرائیا جائے۔ تصور کریں کہ آپ کاغذ کی ایک شیٹ پینٹ کر رہے ہیں، اور اس کے اوپر ڈرائنگ والی کئی شفاف فلمیں چپکا رہے ہیں — نیچے کی تہوں کو ہر بار جب اوپر کی تہہ بدلتی ہے دوبارہ ڈرائینا پڑتا ہے۔
ڈویلپر سیٹنگز میں Debug GPU Overdraw کو فعال کریں۔ 1x overdraw والے عناصر جامنی، 2x — نیلے، 3x — سبز، 4x — گلابی، 5x+ — سرخ رنگ کے ہوتے ہیں۔ ایک بہترین اسکرین سرخ علاقوں کے بغیر زیادہ تر جامنی ہوتی ہے۔
ہر اضافی پکسل دوبارہ ڈرائینگ کے لیے فریگمنٹ شیڈر کو کال کرنے کی ضرورت ہوتی ہے، جو رنگ، ساخت اور روشنی کو پروسیس کرتا ہے۔ 60 FPS پر، ہر فریم کو 16.6 ms ملتا ہے — اگر overdraw GPU کو 2–3 گنا زیادہ پکسلز پروسیس کرنے پر مجبور کرتا ہے، تو حد پار ہو جاتی ہے اور FPS 30 تک گر جاتا ہے۔
ہاں، براہ راست۔ ضرورت سے زیادہ کام کرنے والا GPU زیادہ توانائی خرچ کرتا ہے۔ Google کی تحقیق کے مطابق، overdraw کو 4x سے 1x تک کم کرنے سے GPU کی بجلی کی کھپت 35–50% کم ہو جاتی ہے، جو خاص طور پر ہائی ریزولوشن ڈسپلے پر نمایاں ہے۔
سادہ اسکرینوں کے لیے — 1x–1.5x (تھوڑی مقدار میں نیلے کے ساتھ جامنی)۔ پیچیدہ انٹرفیس کے لیے — 2x تک۔ 3x اور اس سے اوپر (گلابی، سرخ) کی سطحوں پر بہتری کی ضرورت ہے۔ Google اسکرین بھر میں اوسطاً 2.5x overdraw سے تجاوز نہ کرنے کی سفارش کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں