Impeller Flutter کے لیے ایک جدید رینڈرنگ انجن ہے، جسے Google نے Skia کو تبدیل کرنے اور اس کے بنیادی مسائل کو حل کرنے کے لیے تیار کیا ہے: پہلے فریم رینڈرنگ کے دوران شیڈر جھٹکے (jank)، زیادہ میموری کی کھپت، اور مختلف گرافکس بیک اینڈ کی مدد کی پیچیدگی۔ Skia کے برعکس، Impeller شیڈرز کو پہلے سے (آف لائن) کمپائل کرتا ہے، SPIR-V کو درمیانی نمائندگی کے طور پر استعمال کرتا ہے، اور براہ راست Vulkan، Metal اور Direct3D 12 کے ساتھ کام کرتا ہے۔ Flutter Team (2025) کے مطابق، Impeller 95% تک شیڈر جھٹکوں کو ختم کرتا ہے، یہاں تک کہ ابتدائی سطح کے آلات پر بھی قابل پیشن گوئی 60 FPS یقینی بناتا ہے۔
کلیدی نکات
Impeller C++ میں لکھا گیا ایک اوپن سورس گرافکس رینڈرنگ انجن ہے، جسے Flutter ٹیم Skia کو مرکزی رینڈرر کے طور پر تبدیل کرنے کے لیے تیار کر رہی ہے۔ اس منصوبے کا اعلان 2021 میں اس طویل عرصے سے جاری شیڈر جھٹکے کے مسئلے کے جواب میں کیا گیا تھا جس سے Skia دوچار ہے۔ Impeller Skia کا فورک نہیں ہے — یہ مکمل طور پر نیا نفاذ ہے جو موبائل GPU اور جدید گرافکس API کی حدود کو مدنظر رکھتے ہوئے ڈیزائن کیا گیا ہے۔
Impeller کے پیچھے بنیادی خیال شیڈر کمپائلیشن کو رن ٹائم کے بجائے ایپلیکیشن بلڈ مرحلے پر منتقل کرنا ہے۔ Skia میں، شیڈر پہلے استعمال پر کمپائل ہوتے ہیں، جب صارف پہلے سے ہی ایپلیکیشن کے ساتھ تعامل کر رہا ہوتا ہے۔ Impeller تمام شیڈرز کو پہلے سے (آف لائن) کمپائل کرتا ہے، انہیں SPIR-V بائنری فارمیٹ میں پیک کرتا ہے، اور ایپلیکیشن کے ساتھ بھیجتا ہے۔ رن ٹائم پر، Impeller پہلے سے کمپائل شدہ شیڈرز لوڈ کرتا ہے، جس سے کمپائلیشن میں ہونے والی تاخیر ختم ہو جاتی ہے۔
Impeller میموری کی کھپت کے مسئلے کو بھی حل کرتا ہے۔ Skia رینڈرنگ کے دوران بہت سی عارضی اشیاء (ٹیکسچر، بفر) بناتا ہے، جو محدود وسائل والے آلات پر میموری کے ٹکڑے ٹکڑے ہونے کا سبب بنتا ہے۔ Impeller میموری پول استعمال کرتا ہے اور مختص کردہ وسائل کو دوبارہ استعمال کرتا ہے، جس سے میموری کی چوٹی کی کھپت 30–40% کم ہو جاتی ہے۔
SPIR-V (Standard Portable Intermediate Representation) Khronos Group کے ذریعے تیار کردہ ایک درمیانی شیڈر نمائندگی ہے۔ Impeller تمام شیڈرز کے لیے SPIR-V کو عالمگیر فارمیٹ کے طور پر استعمال کرتا ہے۔ بلڈ مرحلے کے دوران، Impeller زبان (اثرات بیان کرنے کے لیے ایک حسب ضرورت C++ DSL) میں لکھے گئے شیڈرز SPIR-V میں کمپائل ہوتے ہیں۔ رن ٹائم پر، SPIR-V لوڈ ہوتا ہے اور پلیٹ فارم کے لیے مخصوص فارمیٹ میں ترجمہ ہوتا ہے — Metal کے لیے MSL، Vulkan کے لیے GLSL، یا Direct3D 12 کے لیے DXIL۔
Impeller کا فن تعمیر کئی تہوں پر مشتمل ہے، جن میں سے ہر ایک سختی سے متعین کام انجام دیتی ہے: رینڈرنگ کمانڈ کی فہرست پر کارروائی، GPU وسائل کا انتظام، اور شیڈرز پر عملدرآمد۔ یہ ماڈیولریٹی نئے گرافکس API کے لیے مدد شامل کرنا آسان بناتی ہے۔
نیچے کی تہہ گرافکس API (Vulkan، Metal، Direct3D 12) پر ایک تجرید ہے۔ Impeller OpenGL کی حمایت نہیں کرتا، کیونکہ OpenGL موثر آف لائن شیڈر کمپائلیشن کے لیے صلاحیتیں فراہم نہیں کرتا۔ اس سطح پر لاگو کیا گیا ہے: ورٹیکس بفر کا انتظام، پائپ لائن کی تخلیق اور کیشنگ، GPU ہم آہنگی۔ Impeller میں ایک پائپ لائن ایک پہلے سے کمپائل شدہ GPU حالت ہے جس میں شیڈرز، راسٹرائزیشن کی ترتیبات اور بلیڈنگ شامل ہیں۔ تمام پائپ لائنیں ابتدا کے مرحلے کے دوران بنائی جاتی ہیں، جو رینڈرنگ کے دوران کمپائلیشن کو ختم کرتی ہیں۔
درمیانی تہہ ایک وسائل کے انتظام کا نظام ہے۔ یہ GPU وسائل (ٹیکسچر، بفر، سیمپلر) مختص اور دوبارہ استعمال کرتا ہے۔ ہر فریم پر نیا ٹیکسچر بنانے کے بجائے، Impeller مختلف سائز اور فارمیٹس کے ٹیکسچر کا ایک پول رکھتا ہے۔ میموری پول خود بخود غیر استعمال شدہ وسائل واپس کرتا ہے اور ضرورت پڑنے پر پھیل سکتا ہے، لیکن Skia کی خصوصیت والے ٹکڑے ٹکڑے ہونے کے بغیر۔
سب سے اوپر کی تہہ رینڈرنگ گراف ہے، جس میں Flutter Engine Canvas API کمانڈز کو تبدیل کرتا ہے۔ Impeller ایک ڈسپلے لسٹ وصول کرتا ہے اور اس سے آپریشن انحصار گراف بناتا ہے۔ گراف کو بہتر بنایا جاتا ہے: بے کار رینڈر پاس ہٹا دیے جاتے ہیں، ایک ہی GPU حالت والے آپریشن ضم کر دیے جاتے ہیں۔ اس کے بعد گراف پہلے سے بنی پائپ لائنوں کا استعمال کرتے ہوئے Vulkan/Metal کالز کی ایک ترتیب میں کمپائل ہوتا ہے۔
ہر فریم ایک مقررہ پائپ لائن سے گزرتا ہے: ڈسپلے لسٹ → رینڈرنگ گراف → گراف کمپائلیشن → GPU کمانڈ جمع کروانا۔ بعد از اثرات (دھندلاپن، سائے) یا گہرائی بفر کی تیاری کے لیے اضافی پاس شامل کیے جا سکتے ہیں۔ Impeller میں فریم کا وقت Skia کے مقابلے میں زیادہ قابل پیشن گوئی ہے، کیونکہ شیڈر کمپائلیشن میں غیر متعین تاخیر نہیں ہوتی۔
Impeller اور Skia کا موازنہ رینڈرنگ کے نقطہ نظر میں فرق ظاہر کرتا ہے۔ Skia ایک عام مقصد کی 2D لائبریری ہے، جبکہ Impeller Flutter کے لیے ایک خصوصی انجن ہے، جو موبائل UI کی ضروریات کے لیے بہتر بنایا گیا ہے۔
| پیرامیٹر | Skia | Impeller |
|---|---|---|
| شیڈرز | رن ٹائم کمپائلیشن | آف لائن کمپائلیشن (بلڈ ٹائم) |
| شیڈر جھٹکا | پہلے فریم پر 50–200 ms | غائب (0 ms) |
| شیڈر فارمیٹ | ملکیتی (SkSL) | SPIR-V (عالمگیر) |
| GPU بیک اینڈ | OpenGL، Vulkan، Metal | Vulkan، Metal، Direct3D 12 |
| میموری کی کھپت | زیادہ (عارضی ٹیکسچر) | میموری پول، -40% تک |
| پلیٹ فارمز | Android، iOS، Web، ڈیسک ٹاپ | Android، iOS، ڈیسک ٹاپ |
| حیثیت | مستحکم (مرکزی) | پیش نظارہ (Skia کی جگہ لے رہا ہے) |
بنیادی فرق شیڈرز کا نقطہ نظر ہے۔ Skia استعمال کے وقت شیڈرز کمپائل کرتا ہے، پہلی بار ناواقف اثرات رینڈر کرتے وقت شیڈر جھٹکا پیدا کرتا ہے۔ Impeller آف لائن کمپائلیشن کے ذریعے اسے ختم کرتا ہے۔ نیز، Skia OpenGL کی حمایت کرتا ہے، جو Flutter کے ویب ورژن کے لیے ضروری ہے، لیکن Impeller مزید جدید API کی حمایت میں OpenGL کو ترک کر دیتا ہے، جو موبائل آلات پر بہتر کارکردگی دیتا ہے۔
Flutter ایپلیکیشنز کے لیے، Impeller پر منتقل ہونے کے لیے کوڈ تبدیل کرنے کی ضرورت نہیں ہے۔ Impeller وہی Canvas API لاگو کرتا ہے جو Skia کرتا ہے، لہذا تمام ویجیٹس، اینیمیشنز اور حسب ضرورت پینٹنگ ایک جیسی کام کرتی ہیں۔ پیچھے کی مطابقت Flutter Engine کی سطح پر یقینی بنائی جاتی ہے — انجن ایپلیکیشن ابتدا کے مرحلے پر رینڈرر (Skia یا Impeller) منتخب کرتا ہے۔
Impeller Skia کے مقابلے میں کئی قابل پیمائش فوائد فراہم کرتا ہے جو براہ راست صارف کے تجربے اور Flutter ایپلیکیشن کی کارکردگی کو متاثر کرتے ہیں۔
شیڈر جھٹکا Skia کا بنیادی مسئلہ ہے جسے Impeller مکمل طور پر حل کرتا ہے۔ جب کوئی Flutter ایپلیکیشن گریڈینٹ، ماسک یا غیر معیاری بلینڈ کے ساتھ نئی اسکرین دکھاتی ہے، Skia اینیمیشن کے دوران شیڈرز کمپائل کرتا ہے، جس سے فریم گر جاتے ہیں۔ Impeller بلڈ مرحلے پر تمام شیڈرز کمپائل کرتا ہے، لہذا پہلا فریم بعد والے فریموں کی طرح تیزی سے رینڈر ہوتا ہے۔ سست GPU (MediaTek Helio، Qualcomm 400 سیریز) والے آلات پر، فرق خاص طور پر نمایاں ہے — Skia میں ہر نئے اثر کی قسم کے لیے 200 ms تک تاخیر بمقابلہ Impeller میں 0 ms۔
Impeller GPU میموری کے انتظام کے لیے وسائل کے پول استعمال کرتا ہے۔ Skia میں، ہر فریم عارضی سطحوں کے لیے نئے ٹیکسچر بنا سکتا ہے، خاص طور پر شفافیت کے ساتھ رینڈر کرتے وقت یا saveLayer استعمال کرتے وقت۔ Impeller فریموں کے درمیان ٹیکسچر دوبارہ استعمال کرتا ہے، جس سے Android پر میموری کی چوٹی کی کھپت 30–40% اور iOS پر 25% تک کم ہو جاتی ہے۔ یہ لمبی فہرستوں اور اینیمیشنز والی ایپلیکیشنز کے لیے خاص طور پر اہم ہے، جہاں Skia 2 GB RAM والے آلات پر OOM غلطیاں پیدا کر سکتا تھا۔
Skia میں، فریم رینڈرنگ کا وقت اس بات پر منحصر ہوتا ہے کہ کون سے شیڈر پہلے ہی کمپائل ہو چکے ہیں۔ نئے اثر والا پہلا فریم 50–200 ms لے سکتا ہے، جبکہ بعد والے فریم 3–5 ms لیتے ہیں۔ یہ غیر متوقعیت اصلاح اور جانچ کو مشکل بناتی ہے۔ Impeller یکساں فریم وقت یقینی بناتا ہے، کیونکہ تمام شیڈر پہلے سے کمپائل ہیں اور میموری مختص قابل پیشن گوئی ہے۔ Impeller کے ساتھ Flutter Engine ہر فریم کے لیے وقت کے بجٹ کا زیادہ درست حساب لگا سکتا ہے۔
Impeller OpenGL پرت کے بغیر، براہ راست Vulkan (Android)، Metal (iOS) اور Direct3D 12 (Windows) کے ساتھ کام کرتا ہے۔ یہ کئی فوائد فراہم کرتا ہے: کم ڈرائیور لیٹنسی (OpenGL کے ذریعے سے 50% تک کم)، GPU میموری پر براہ راست کنٹرول، اور جدید خصوصیات تک رسائی (ٹائلڈ GPU فن تعمیر، GPU سے چلنے والا رینڈرنگ)۔ OpenGL اب ترقی نہیں کر رہا ہے اور موبائل آلات پر اس کے ڈرائیور اکثر کارکردگی کی رکاوٹ بن جاتے ہیں۔
Impeller فعال ترقی کے تحت ہے اور Flutter Master اور Beta چینلز میں دستیاب ہے۔ Flutter 3.16 سے شروع ہو کر، Impeller iOS پر ڈیفالٹ طور پر فعال ہے، اور Android پر کنفیگریشن فلیگ کے ذریعے اختیاری طور پر۔ Skia کی Impeller سے مکمل تبدیلی 2026 میں Flutter کے ایک مستحکم ریلیز میں متوقع ہے۔
iOS پر، Impeller Metal کے ذریعے کام کرتا ہے اور Flutter 3.16 سے ڈیفالٹ طور پر فعال ہے۔ Flutter ٹیم Impeller پر ایپلیکیشنز کی جانچ کرنے اور مسائل کی رپورٹ کرنے کی سفارش کرتی ہے۔ Skia پر واپس جانے کے لیے، Info.plist فائل میں Impeller فلیگ استعمال کریں: FlutterEnableImpeller = NO۔ Flutter Team کے مطابق، 92% iOS ایپلیکیشنز بصری تنزلی کے بغیر Impeller پر چلتی ہیں، اور اینیمیشن کی کارکردگی 25–40% بہتر ہوتی ہے۔
Android پر، Impeller Vulkan کے ذریعے کام کرتا ہے۔ فعال کرنے کے لیے، AndroidManifest.xml میں میٹا ٹیگ io.flutter.embedded_views_preview شامل کریں۔ Flutter ٹیم مختلف GPU آرکیٹیکچرز (Adreno، Mali، PowerVR) کے لیے Impeller کو بہتر بنانا جاری رکھے ہوئے ہے۔ Android پر بنیادی چیلنج Vulkan کے بغیر آلات (Android < 7.0 یا پرانے GPU) کی حمایت کرنا ہے۔ ایسے آلات کے لیے، Skia پر فال بیک بیک اینڈ یا سافٹ ویئر راسٹرائزیشن کے ساتھ Impeller استعمال کیا جائے گا۔
Windows پر، Impeller Direct3D 12 (Flutter Master میں فعال) کے ذریعے کام کرتا ہے۔ macOS اور Linux پر — بالترتیب Metal اور Vulkan کے ذریعے۔ Impeller ویب کے لیے منصوبہ بند نہیں ہے، کیونکہ Flutter کا ویب ورژن CanvasKit (WebAssembly کے ذریعے Skia) استعمال کرتا ہے، اور براؤزر میں شیڈر کمپائلیشن کے مختلف طریقہ کار کی وجہ سے شیڈر جھٹکا اس کے لیے اہم مسئلہ نہیں ہے۔ ویب ورژن Skia استعمال کرتا رہے گا۔
Google نے Impeller روڈ میپ شائع کیا ہے: 2024 — iOS پر ڈیفالٹ Impeller؛ 2025 — Android اور Windows پر ڈیفالٹ Impeller؛ 2026 — Flutter Engine سے Skia کا مکمل خاتمہ۔ اس کے بعد، Flutter Impeller کو واحد رینڈرنگ انجن کے طور پر استعمال کرے گا، جو دیکھ بھال کو آسان بنائے گا، انجن کا سائز کم کرے گا اور تمام پلیٹ فارمز پر کارکردگی بہتر کرے گا۔
اکثر پوچھے گئے سوالات
iOS پر، Impeller Flutter 3.16 سے ڈیفالٹ طور پر فعال ہے۔ Android پر، AndroidManifest.xml میں میٹا ٹیگ io.flutter.embedded_views_preview کو true ویلیو کے ساتھ شامل کریں۔ Windows پر، لانچ کرتے وقت --enable-impeller فلیگ استعمال کریں۔ تمام صورتوں میں، Dart کوڈ میں FlutterEngine کے ذریعے جبری طور پر فعال کیا جا سکتا ہے۔
Skia کام کرتا ہے، لیکن اس میں بنیادی مسائل ہیں: شیڈر جھٹکا (شیڈر کمپائلیشن میں 50–200 ms تاخیر)، زیادہ میموری کی کھپت، اور OpenGL فن تعمیر کی حدود۔ Impeller خاص طور پر Flutter کے لیے ڈیزائن کیا گیا ہے اور آف لائن شیڈر کمپائلیشن اور میموری پولز کے ذریعے ان مسائل کو حل کرتا ہے۔
ہاں، Impeller وہی Canvas API لاگو کرتا ہے جو Skia کرتا ہے۔ تمام معیاری Flutter ویجیٹس — متن، تصاویر، اینیمیشنز، حسب ضرورت پینٹ — بغیر تبدیلی کے Impeller پر کام کرتے ہیں۔ پیچھے کی مطابقت Flutter Engine کی سطح پر یقینی بنائی جاتی ہے، اور منتقلی ڈویلپر کے لیے شفاف ہے۔
نہیں، ایک ایپلیکیشن ایک وقت میں ایک رینڈرنگ انجن استعمال کرتی ہے۔ انتخاب ایک فلیگ کے ذریعے Flutter Engine کو ابتدا کرتے وقت کیا جاتا ہے۔ رن ٹائم کے دوران Skia اور Impeller کے درمیان سوئچ کرنا ناممکن ہے — رینڈرر پہلے FlutterEngine انسٹنس بننے تک مقرر رہتا ہے۔
Skia Chrome، Android اور دیگر منصوبوں کے لیے ایک آزاد Google لائبریری کے طور پر موجود رہے گا۔ Flutter میں، Skia کو Impeller سے مرکزی رینڈرر کے طور پر تبدیل کر دیا جائے گا۔ Skia Flutter کے ویب ورژن (CanvasKit کے ذریعے) اور Vulkan/Metal سپورٹ کے بغیر آلات کے لیے فال بیک آپشن کے طور پر رہے گا۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔