Google 致力于为黑人社区推动种族平等。查看具体举措
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

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

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

SurfaceFlinger

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

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

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

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

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

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

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

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

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

WindowManager

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

पूर्व रोटेशन

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

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