सतह और सतह धारक

सतह की वस्तुएं ऐप्स को स्क्रीन पर प्रस्तुत करने के लिए छवियों को प्रस्तुत करने में सक्षम बनाती हैं। सर्फेसहोल्डर इंटरफेस ऐप्स को सतहों को संपादित और नियंत्रित करने में सक्षम बनाता है।

सतह

एक सतह एक निर्माता के लिए एक उपभोक्ता के साथ बफ़र्स का आदान-प्रदान करने के लिए एक इंटरफ़ेस है।

प्रदर्शन सतह के लिए बफ़रक्यू को आमतौर पर ट्रिपल-बफ़रिंग के लिए कॉन्फ़िगर किया गया है। बफ़र्स मांग पर आवंटित किए जाते हैं, इसलिए यदि निर्माता धीरे-धीरे पर्याप्त बफ़र्स उत्पन्न करता है, जैसे कि 60 एफपीएस डिस्प्ले पर 30 एफपीएस पर, कतार में केवल दो आवंटित बफ़र्स हो सकते हैं। मांग पर बफर आवंटित करने से स्मृति खपत को कम करने में मदद मिलती है। आप dumpsys SurfaceFlinger आउटपुट में प्रत्येक परत से जुड़े बफ़र्स का सारांश देख सकते हैं।

अधिकांश क्लाइंट ओपनजीएल ईएस या वल्कन का उपयोग करके सतहों पर प्रस्तुत करते हैं। हालांकि, कुछ क्लाइंट कैनवास का उपयोग करके सतहों पर रेंडर करते हैं।

कैनवास प्रतिपादन

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

  • lockCanvas() सीपीयू पर प्रतिपादन के लिए बफर को लॉक करता है और ड्राइंग के लिए उपयोग करने के लिए कैनवास देता है।
  • unlockCanvasAndPost() बफर को अनलॉक करता है और कंपोजिटर को भेजता है।
  • lockHardwareCanvas() GPU पर रेंडर करने के लिए बफर को लॉक करता है और ड्राइंग के लिए उपयोग करने के लिए एक कैनवास देता है।

पहली बार जब निर्माता बफर क्यू से बफर का अनुरोध करता है, तो बफर आवंटित किया जाता है और शून्य पर प्रारंभ किया जाता है। प्रक्रियाओं के बीच अनजाने में डेटा साझा करने से बचने के लिए आरंभीकरण आवश्यक है। हालाँकि, यदि आप किसी बफ़र का पुन: उपयोग करते हैं, तो पिछली सामग्री अभी भी मौजूद है। यदि आप बार-बार lockCanvas() और unlockCanvasAndPost() को बिना कुछ खींचे कॉल करते हैं, तो निर्माता पहले से प्रस्तुत फ्रेम के बीच चक्र करता है।

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

भूतल धारक

सर्फेसहोल्डर एक इंटरफ़ेस है जिसका उपयोग सिस्टम ऐप्स के साथ सतहों के स्वामित्व को साझा करने के लिए करता है। सतहों के साथ काम करने वाले कुछ क्लाइंट एक सरफेसहोल्डर चाहते हैं, क्योंकि सतह पैरामीटर प्राप्त करने और सेट करने के लिए एपीआई एक सर्फेसहोल्डर के माध्यम से कार्यान्वित किए जाते हैं। सरफेस व्यू में एक सरफेसहोल्डर होता है।

एक दृश्य के साथ इंटरैक्ट करने वाले अधिकांश घटकों में एक सरफेसहोल्डर शामिल होता है। कुछ अन्य API, जैसे MediaCodec, सतह पर ही कार्य करते हैं।