Vulkan और OpenGL ES गेम रेंडरिंग एपीआई की पहचान करना

Android गेम डेवलप या ऑप्टिमाइज़ करते समय, यह समझना मददगार हो सकता है कि आपका इंजन किस ग्राफ़िक्स पाइपलाइन का इस्तेमाल कर रहा है. इंजन, Vulkan या GLES को चुन सकते हैं. इसके लिए, डेवलपर को साफ़ तौर पर ऐक्सेस किए जा सकने वाले सिग्नल की ज़रूरत नहीं होती. हालांकि, कुछ मामलों में logcat पर भरोसा नहीं किया जा सकता. जैसे, यह पुष्टि करना कि कोई गेम Vulkan पर चल रहा है या वह चुपचाप OpenGL ES पर वापस चला गया है.

इस गाइड में, Android Performance Analyzer (एपीए) और कस्टम Perfetto SQL क्वेरी इस्तेमाल करने का तरीका बताया गया है. इससे गेम के रेंडरिंग एपीआई की सटीक जानकारी मिलती है.

लॉग के आधार पर पुष्टि करने की सुविधा की सीमाएं

  • स्ट्रिप्ड लॉग: प्रोडक्शन बिल्ड अक्सर इनिशलाइज़ेशन और ड्राइवर-लोडिंग फ़ुटप्रिंट को छिपाते हैं.
  • फ़ॉल्स पॉज़िटिव: कुछ गेम इंजन, स्टार्टअप के दौरान Vulkan और OpenGL ES, दोनों लाइब्रेरी लोड करते हैं. साथ ही, दोनों के लिए शुरू करने के लॉग प्रिंट करते हैं. भले ही, इनमें से कोई एक लाइब्रेरी काम न करे और फ़ॉलबैक ट्रिगर हो जाए.
  • साइलेंट फ़ॉलबैक: अगर डिवाइस के ड्राइवर से जुड़ी समस्याओं की वजह से Vulkan शुरू नहीं हो पाता है, तो इंजन अक्सर गंभीर गड़बड़ियां दिखाए बिना OpenGL ES पर वापस चले जाते हैं.

एपीए का इस्तेमाल करके मेज़र करना

Android Performance Analyzer का इस्तेमाल करके, सिस्टम ट्रेस करने की प्रोसेस को रिकॉर्ड किया जा सकता है. साथ ही, एसक्यूएल क्वेरी की मदद से फ़्रेम डेटा का सटीक विश्लेषण किया जा सकता है. Vulkan और GLES के इस्तेमाल को मेज़र करने के लिए, यह तरीका अपनाएं:

  1. एपीए की मदद से ट्रेस कैप्चर करना: अपना गेम चलाएं और एपीए का इस्तेमाल करके, उस सेगमेंट के दौरान सिस्टम ट्रेस कैप्चर करें जिसका आपको विश्लेषण करना है. जैसे, गेमप्ले के दौरान कोई ऐसा पॉइंट जहां आपको लगता है कि फ़्रेम ड्रॉप हो रहे हैं. डिवाइस कनेक्ट होने और ट्रेस रिकॉर्डिंग पूरी होने के बाद, ट्रेस डेटा APA इंटरफ़ेस में लोड हो जाता है.

  2. एपीए में एसक्यूएल टैब पर क्लिक करें: ट्रेस विश्लेषण की स्क्रीन खुलने पर, यूज़र इंटरफ़ेस (यूआई) के नेविगेशन मेन्यू में, एसक्यूएल टैब पर क्लिक करें. इससे ट्रेस प्रोसेसर एनवायरमेंट खुल जाएगा. यहां डेटा को सीधे तौर पर क्वेरी किया जा सकता है.

  3. एपीए एसक्यूएल टैब में यह एसक्यूएल क्वेरी चिपकाएं: यह एसक्यूएल क्वेरी कॉपी करें और इसे क्वेरी इनपुट फ़ील्ड में चिपकाएं. यह क्वेरी, एपीआई इवेंट ड्रॉ करने के लिए ट्रेस को स्कैन करती है. जैसे, eglSwapBuffers, QueuePresentKHR, और vkQueuePresentKHR. यह उन्हें प्रोसेस के नाम के हिसाब से ग्रुप करता है. साथ ही, रेंडरिंग एपीआई की संख्या और Vulkan बनाम OpenGL ES रेंडरिंग कॉल के प्रतिशत डिस्ट्रिब्यूशन का हिसाब लगाता है:

    WITH raw_slices AS (
      -- 1. Map each slice (API call) to its corresponding process or package via UTID and UPID
      SELECT
        p.name AS process_name,
        s.name AS slice_name
      FROM slice s
      JOIN thread_track tt ON s.track_id = tt.id
      JOIN thread t USING (utid)
      JOIN process p USING (upid)
      WHERE (s.name LIKE 'eglSwapBuffers%'
        OR s.name IN ('QueuePresentKHR', 'vkQueuePresentKHR'))
        -- Optional: To isolate your game, uncomment the following and filter by package name and thread name:
        -- AND p.name = 'com.example.mygame'
        -- AND t.name = 'RenderThread'
    ),
    process_stats AS (
      -- 2. Aggregate counts per individual process
      SELECT
        process_name,
        SUM(CASE WHEN slice_name LIKE 'eglSwapBuffers%' THEN 1 ELSE 0 END) AS egl_count,
        SUM(CASE WHEN slice_name IN ('QueuePresentKHR', 'vkQueuePresentKHR') THEN 1 ELSE 0 END) AS vulkan_count
      FROM raw_slices
      GROUP BY process_name
    ),
    process_totals AS (
      -- 3. Calculate total counts for denominator calculation
      SELECT
        process_name,
        egl_count,
        vulkan_count,
        (egl_count + vulkan_count) AS total_count
      FROM process_stats
    )
    -- 4. Calculate final percentage shares per row, preventing division by zero errors
    SELECT
      process_name,
      egl_count,
      vulkan_count,
      total_count,
      ROUND(CAST(egl_count AS REAL) * 100 / NULLIF(total_count, 0), 2) AS "egl_percentage(%)",
      ROUND(CAST(vulkan_count AS REAL) * 100 / NULLIF(total_count, 0), 2) AS "vulkan_percentage(%)"
    FROM process_totals
    ORDER BY total_count DESC;
    
  4. क्वेरी चलाएं: इनपुट फ़ील्ड के पास मौजूद, क्वेरी चलाएं बटन पर क्लिक करें. क्वेरी चलने के बाद, नतीजों वाले पैनल में एक टेबल दिखती है. इसमें प्रोसेस का नाम (process_name), OpenGL ES प्रज़ेंटेशन की संख्या (egl_count), Vulkan प्रज़ेंटेशन की संख्या (vulkan_count), प्रज़ेंटेशन की कुल संख्या (total_count), और इस्तेमाल किए गए हर एपीआई का प्रतिशत (egl_percentage(%) और vulkan_percentage(%)) दिखता है.

    स्क्रीन पर, एक्ज़ीक्यूट की गई एसक्यूएल क्वेरी और रेंडरिंग एपीआई की मेट्रिक, टेबल में दिख रही हैं

आम तौर पर होने वाली गलतियां

  • SurfaceFlinger से जुड़ी उलझन से: अपनी खोज को हमेशा अपने गेम के ऐप्लिकेशन थ्रेड (RenderThread) तक सीमित रखें. सिस्टम-वाइड कंपोज़िटर प्रोसेस, जैसे कि SurfaceFlinger, Vulkan या ईजीएल ट्रैक दिखा सकती हैं. ये ट्रैक, सिस्टम यूज़र इंटरफ़ेस (यूआई) रेंडरिंग को दिखाते हैं, न कि आपके गेम की इंटरनल रेंडरिंग पाइपलाइन को. अपने गेम को अलग करने के लिए, मुख्य SQL क्वेरी के WHERE क्लॉज़ में मौजूद वैकल्पिक फ़िल्टर से टिप्पणी हटाएं. इसके बाद, 'com.example.mygame' को अपने गेम के पैकेज के नाम से बदलें:

    -- AND p.name = 'com.example.mygame'
    -- AND t.name = 'RenderThread'
    
  • वॉर्म-अप पीरियड: गेम का मुख्य 3D सीन पूरी तरह से लोड होने के बाद ही ट्रेस रिकॉर्ड करें. स्प्लैश स्क्रीन या लोडिंग ट्रांज़िशन के दौरान कैप्चर करने से, गलत तरीके से शुरू होने की संभावना हो सकती है.

LevelUp प्रोग्राम में शामिल होने के लिए, छूट पाने की ज़रूरी शर्तें

अगर Google Play Games LevelUp से छूट पाने के लिए, Android Performance Analyzer (एपीए) का इस्तेमाल करके ट्रेस कैप्चर किया जा रहा है, तो ट्रेस के मान्य होने के लिए हार्डवेयर से जुड़ी कुछ ज़रूरी शर्तें पूरी करनी होंगी.

हमारा सुझाव है कि आप टारगेट किए गए Level Up वर्चुअल डिवाइसों में से किसी एक का इस्तेमाल करके, ट्रेस कैप्चर करें.

इसके अलावा, सटीक पुष्टि के लिए, आपका ट्रेस ऐसे डिवाइस पर नहीं लिया जाना चाहिए जो ANGLE GPU का इस्तेमाल करता हो. खास तौर पर, LevelUp exemption ट्रेस को कैप्चर करने के लिए, इन डिवाइसों का इस्तेमाल नहीं किया जा सकता:

  • कोई भी ऐसा डिवाइस जिसमें जीपीयू वेंडर, एसएलएसआई (Samsung) है और जो एएमडी एक्सक्लिप्स जीपीयू का इस्तेमाल करता है
  • Pixel 11