सरफेसफ्लिंगर और विंडोमैनेजर

सर्फेसफ्लिंगर बफ़र्स को स्वीकार करता है, बफ़र्स की रचना करता है, और बफ़र्स को डिस्प्ले पर भेजता है। WindowManager, SurfaceFlinger को बफ़र्स और विंडो मेटाडेटा प्रदान करता है, जिसे SurfaceFlinger प्रदर्शन के लिए मिश्रित सतहों के लिए उपयोग करता है।

सरफेसफ्लिंगर

सर्फेसफ्लिंगर बफ़र्स को दो तरह से स्वीकार कर सकता है: बफ़रक्यू और सर्फेसकंट्रोल के माध्यम से, या एसुरफेसकंट्रोल के माध्यम से।

सर्फेसफ्लिंगर बफ़र्स को स्वीकार करने का एक तरीका बफ़रक्यू और सर्फेसकंट्रोल के माध्यम से है। किसी ऐप को अग्रभाग में आती है, यह से बफ़र्स का अनुरोध करता है WindowManager । WindowManager फिर SurfaceFlinger से एक परत का अनुरोध करता है। एक परत एक का एक संयोजन है सतह है, जो BufferQueue, और एक होता है SurfaceControl , जो प्रदर्शन फ्रेम की तरह परत मेटाडाटा शामिल हैं। SurfaceFlinger परत बनाता है और इसे WindowManager को भेजता है। WindowManager तब ऐप को सतह भेजता है, लेकिन स्क्रीन पर ऐप की उपस्थिति में हेरफेर करने के लिए SurfaceControl रखता है।

Android 10 ASurfaceControl जोड़ता है, जो एक और तरीका है जिससे SurfaceFlinger बफ़र्स को स्वीकार कर सकता है। ASurfaceControl एक सतह और एक SurfaceControl को एक लेन-देन पैकेज में जोड़ता है जो SurfaceFlinger को भेजा जाता है। एक ASurfaceControl एक परत से जुड़ा होता है, जो ऐप्स ASurfaceTransactions के माध्यम से अपडेट होते हैं। ऐप्स तब कॉलबैक के माध्यम से ASurfaceTransactions के बारे में जानकारी प्राप्त करते हैं जो ASurfaceTransactionStats को पास करते हैं, जिसमें जानकारी होती है, जैसे कि लैच टाइम, अधिग्रहण समय, और इसी तरह।

निम्न तालिका में ASurfaceControl और इससे जुड़े घटकों के बारे में अधिक विवरण शामिल हैं।

अवयव विवरण
सतह नियंत्रण सर्फेसकंट्रोल को लपेटता है और एक ऐप को सर्फेसकंट्रोल बनाने में सक्षम बनाता है जो डिस्प्ले पर परतों के अनुरूप होता है।

AnativeWindow के बच्चे के रूप में या किसी अन्य ASurfaceControl के बच्चे के रूप में बनाया जा सकता है।
एसर्फेस ट्रांजैक्शन क्लाइंट को एक परत के वर्णनात्मक गुणों, जैसे कि ज्यामिति को संपादित करने में सक्षम करने के लिए लेनदेन को लपेटता है, और अद्यतन बफ़र्स को SurfaceFlinger को भेजता है।
AsurfaceTransactionStats प्रस्तुत किए गए लेन-देन के बारे में जानकारी भेजता है, जैसे कि लैच टाइम, अधिग्रहण समय, और पिछली रिलीज बाड़, एक ऐप को पूर्व-पंजीकृत कॉलबैक के माध्यम से भेजता है।

हालाँकि ऐप्स किसी भी समय बफ़र्स सबमिट कर सकते हैं, सरफेसफ्लिंगर केवल डिस्प्ले रिफ्रेश के बीच बफ़र्स को स्वीकार करने के लिए जागता है, जो डिवाइस के आधार पर भिन्न हो सकता है। यह मेमोरी के उपयोग को कम करता है और स्क्रीन पर दिखाई देने वाले फटने से बचाता है, जो डिस्प्ले के बीच-रिफ्रेश को अपडेट करते समय हो सकता है।

जब प्रदर्शन रीफ़्रेश होने के बीच है, प्रदर्शन को SurfaceFlinger को VSYNC संकेत भेजता है। VSYNC सिग्नल इंगित करता है कि डिस्प्ले को बिना फाड़े रिफ्रेश किया जा सकता है। जब सर्फेसफ्लिंगर को वीएसवाईएनसी सिग्नल प्राप्त होता है, तो सर्फेसफ्लिंगर नए बफ़र्स की तलाश में परतों की अपनी सूची के माध्यम से चलता है। यदि सर्फेसफ्लिंगर को एक नया बफर मिलता है, तो सर्फेसफ्लिंगर बफर प्राप्त करता है; यदि नहीं, तो सर्फेसफ्लिंगर पहले से अधिग्रहीत बफर का उपयोग करना जारी रखता है। सर्फेसफ्लिंगर को हमेशा कुछ प्रदर्शित करना चाहिए, इसलिए यह एक बफर पर लटका रहता है। यदि परत पर कभी कोई बफ़र्स सबमिट नहीं किया गया है, तो परत को अनदेखा कर दिया जाता है।

सरफेसफ्लिंगर द्वारा दृश्यमान परतों के लिए सभी बफ़र्स एकत्र करने के बाद, यह हार्डवेयर कम्पोज़र (HWC) से पूछता है कि रचना कैसे की जानी चाहिए। यदि HWC लेयर कंपोजिशन टाइप को क्लाइंट कंपोजिशन के रूप में चिह्नित करता है, तो SurfaceFlinger उन लेयर्स को कंपोजिट करता है। फिर, SurfaceFlinger को आउटपुट बफर गुजरता HWC

विंडो प्रबंधक

WindowManager को नियंत्रित करता है खिड़की वस्तुओं, जिसके लिए कंटेनर हैं दृश्य वस्तुओं। विंडो ऑब्जेक्ट हमेशा सतह की वस्तुओं द्वारा समर्थित होते हैं। WindowManager जीवनचक्र, इनपुट और फ़ोकस ईवेंट, स्क्रीन ओरिएंटेशन, ट्रांज़िशन, एनिमेशन, पोज़िशन, ट्रांसफ़ॉर्म, z-ऑर्डर और विंडो के कई अन्य पहलुओं की देखरेख करता है। WindowManager सभी विंडो मेटाडेटा को SurfaceFlinger को भेजता है ताकि SurfaceFlinger उस डेटा का उपयोग डिस्प्ले पर मिश्रित सतहों पर कर सके।

पूर्व-रोटेशन

कई हार्डवेयर ओवरले रोटेशन का समर्थन नहीं करते हैं (और यदि वे करते भी हैं, तो इसकी प्रोसेसिंग पावर खर्च होती है); इसका समाधान बफर को सर्फेसफ्लिंगर तक पहुंचने से पहले बदलना है। एंड्रॉयड का समर्थन करता है एक प्रश्न संकेत ( NATIVE_WINDOW_TRANSFORM_HINT में) ANativeWindow प्रतिनिधित्व करने के लिए सबसे अधिक संभावना को SurfaceFlinger द्वारा बफर लिए लागू किया जा करने के लिए बदलना। जीएल ड्राइवर इस संकेत का उपयोग बफर को सर्फेसफ्लिंगर तक पहुंचने से पहले पूर्व-रूपांतरित करने के लिए कर सकते हैं ताकि जब बफर आए, तो यह सही ढंग से रूपांतरित हो।

उदाहरण के लिए, जब 90 डिग्री घुमाने के लिए संकेत प्राप्त होता है, तो पेज के अंत से बाहर निकलने से रोकने के लिए बफर पर एक मैट्रिक्स उत्पन्न करें और लागू करें। बिजली बचाने के लिए, यह प्री-रोटेशन करें। जानकारी के लिए, ANativeWindow इंटरफ़ेस में निर्धारित system/core/include/system/window.h