भूतल और सरफेसहार्डर

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

सतह

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

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

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

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

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

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

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

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

भूतल फ़ोल्डर

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

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