Android oyunları geliştirirken veya optimize ederken motorunuzun hangi grafik işlem hattını kullandığını anlamak genellikle faydalı olabilir. Motorlar, geliştiricinin açıkça erişebileceği sinyaller olmadan Vulkan veya GLES'i seçebilir. Maalesef, bir oyunun Vulkan'da çalışıp çalışmadığını veya sessizce OpenGL ES'ye geri dönüp dönmediğini doğrulamak için logcat'ya güvenmenin güvenilir olmadığı durumlar vardır.
Bu kılavuzda, bir oyunun etkin oluşturma API'sini kesin olarak belirlemek için Android Performance Analyzer (APA) ve özel Perfetto SQL sorgularının nasıl kullanılacağı açıklanmaktadır.
Günlük tabanlı doğrulamanın sınırlamaları
- Temizlenmiş günlükler: Üretim derlemeleri genellikle başlatma ve sürücü yükleme izlerini gizler.
- Yanlış pozitifler: Bazı oyun motorları, başlangıç sırasında hem Vulkan hem de OpenGL ES kitaplıklarını yükler. Bu kitaplıkların birinde hata oluşup yedek tetiklenmiş olsa bile her ikisi için de başlatma günlükleri yazdırılır.
- Sessiz yedeklemeler: Vulkan başlatma işlemi cihaza özgü sürücü sorunları nedeniyle başarısız olursa motorlar genellikle kritik hatalar vermeden OpenGL ES'ye geri döner.
APA ile ölçüm yapma
Android Performance Analyzer'ı kullanarak sistem izi kaydedebilir ve SQL sorgularıyla kare verilerini hassas bir şekilde analiz edebilirsiniz. Vulkan ve GLES kullanımınızı ölçmek için aşağıdaki adımları uygulayın:
APA ile iz yakalama: Oyununuzu çalıştırın ve analiz etmek istediğiniz segment sırasında (ör. oyun sırasında kare düşüşü olduğundan şüphelendiğiniz bir nokta) sistem izi yakalamak için APA'yı kullanın. Cihaz bağlandıktan ve iz kaydı tamamlandıktan sonra iz verileri APA arayüzüne yüklenir.
APA'da SQL sekmesini tıklayın: İzleme analizi ekranı açıkken kullanıcı arayüzünün gezinme menüsünde SQL sekmesini tıklayarak verileri doğrudan sorgulayabileceğiniz izleme işleme ortamını açın.
Aşağıdaki SQL sorgusunu APA SQL sekmesine yapıştırın: Aşağıdaki SQL sorgusunu kopyalayıp sorgu giriş alanına yapıştırın. Bu sorgu, izlemeyi
eglSwapBuffers,QueuePresentKHRvevkQueuePresentKHRgibi çizim API etkinlikleri için tarar. Bu değerler, işlem adına göre gruplandırılır ve Vulkan ile OpenGL ES oluşturma çağrılarının oluşturma API sayıları ve yüzdelik dağılımı hesaplanır: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;Sorguyu çalıştırma: Giriş alanının yanındaki Sorguyu Çalıştır düğmesini tıklayın. Sorgu çalıştırıldıktan sonra sonuçlar bölmesinde işlem adını (
process_name), OpenGL ES sunum sayısını (egl_count), Vulkan sunum sayısını (vulkan_count), toplam sunum sayısını (total_count) ve kullanılan her API'nin yüzdesini (egl_percentage(%)vevulkan_percentage(%)) gösteren bir tablo görünür.
Çalıştırılan SQL sorgusunu ve sonuç olarak oluşturulan API metriklerini bir tabloda gösteren ekran
Sık karşılaşılan sorunlar
Kafaları karıştırmayın
SurfaceFlinger: Aramanızı her zaman oyununuzun uygulama iş parçacığıyla (RenderThread) sınırlandırın.SurfaceFlingergibi sistem genelinde birleştirme işlemleri, oyununuzun dahili oluşturma ardışık düzenini değil, sistem kullanıcı arayüzü oluşturmayı temsil eden Vulkan veya EGL parçalarını gösterebilir. Oyununuzu yalıtmak için ana SQL sorgusununWHEREifadesindeki isteğe bağlı filtrelerin yorumunu kaldırın ve'com.example.mygame'yerine oyununuzun paket adını girin:-- AND p.name = 'com.example.mygame' -- AND t.name = 'RenderThread'Isınma dönemi: İzlemeyi her zaman oyunun ana 3D sahnesi tamamen yüklendikten sonra kaydedin. Başlangıç ekranları veya yükleme geçişleri sırasında yakalama işlemi yapılması, yanıltıcı başlatmalara neden olabilir.
LevelUp muafiyeti izleme şartları
Google Play Games LevelUp muafiyetine hak kazanmak için Android Performance Analyzer'ı (APA) kullanarak iz yakalıyorsanız izlerin geçerli olması için belirli donanım şartlarını karşılaması gerekir.
İzlemeyi, hedeflenen Level Up referans cihazlarından birini kullanarak yakalamanız önemle tavsiye edilir.
Ayrıca, doğru doğrulama için iziniz ANGLE GPU kullanan bir cihazda alınmamalıdır. Özellikle aşağıdaki cihazları kullanarak LevelUp muafiyetinizi yakalayamazsınız:
- GPU satıcısı SLSI (Samsung) olan ve AMD Xclipse GPU'ları kullanan tüm cihazlar
- Pixel 11