GPU oluşturma hızını ve fazla çizimi denetleme

Android, uygulamanızın kullanıcı arayüzünü oluştururken sorun yaşayabileceği yerleri görselleştirmenize yardımcı olan bazı cihaz içi geliştirici seçenekleri içerir. Örneğin, gereğinden fazla oluşturma işlemi yapma veya uzun iş parçacığı ve GPU işlemleri yürütme gibi. Bu sayfada, GPU fazla çizim hatasının nasıl ayıklanacağı ve GPU oluşturma profilinin nasıl oluşturulacağı açıklanmaktadır.

Cihaz üzerindeki geliştirici seçenekleri ve bunların nasıl etkinleştirileceği hakkında daha fazla bilgi edinmek için Cihaz üzerindeki geliştirici seçeneklerini yapılandırma başlıklı makaleyi inceleyin.

Profil GPU oluşturma hızı

Profil GPU oluşturma aracı, bir kullanıcı arayüzü penceresinin karelerinin oluşturulmasının ne kadar sürdüğünün görsel bir temsilini, kare başına 16,67 ms'lik bir kıyaslama değerine göre kaydırılabilir bir histogram olarak gösterir.

Daha az güçlü GPU'larda, kullanılabilir doluluk oranı (GPU'nun çerçeve arabelleğini doldurabileceği hız) oldukça düşük olabilir. Bir kareyi çizmek için gereken piksel sayısı arttıkça GPU'nun yeni komutları işlemesi daha uzun sürebilir. Bu durum, GPU yetişene kadar sistemin geri kalanının beklemesine neden olur.

Profillendirme aracı, GPU'nun pikselleri çizmeye çalışırken ne zaman aşırı yüklendiğini veya ağır aşırı çizimden ne zaman etkilendiğini belirlemenize yardımcı olur.

Profil oluşturucuyu etkinleştirme

Başlamadan önce Android 4.1 (API düzeyi 16) veya daha yeni bir sürümün yüklü olduğu bir cihaz kullandığınızdan ve geliştirici seçeneklerini etkinleştirdiğinizden emin olun. Uygulamanızı kullanırken cihaz GPU oluşturma profilini oluşturmaya başlamak için aşağıdaki adımları uygulayın:

  1. Cihazınızda Ayarlar'a gidip Geliştirici Seçenekleri'ne dokunun.
  2. İzleme bölümünde, cihazda çalışan Android sürümüne bağlı olarak Profil GPU oluşturma veya Profil HWUI oluşturma'yı seçin.
  3. GPU Oluşturma Profilini Oluştur iletişim kutusunda, grafikleri cihazınızın ekranına yerleştirmek için Ekranda çubuk olarak'ı seçin.
  4. Profil oluşturmak istediğiniz uygulamayı açın.

Çıkışı inceleme

Şekil 1'de gösterilen Profil GPU Oluşturma grafiğinin büyütülmüş resminde, Android 6.0'da (API düzeyi 23) gösterildiği gibi renkli bölümü görebilirsiniz.

Şekil 1. Büyütülmüş Profil GPU Oluşturma grafiği.

Çıkışla ilgili dikkat etmeniz gereken birkaç nokta:

  • Araç, her görünür uygulama için bir grafik gösterir.
  • Yatay eksen boyunca her dikey çubuk bir kareyi, her dikey çubuğun yüksekliği ise karenin oluşturulma süresini (milisaniye cinsinden) gösterir.
  • Yatay yeşil çizgi 16,67 milisaniyeyi temsil eder. Saniyede 60 kare elde etmek için her kareye ait dikey çubuk bu çizginin altında kalmalıdır. Bir çubuk bu çizgiyi her aştığında animasyonlarda duraklamalar olabilir.
  • Araç, ilgili çubuğu daha geniş ve daha az şeffaf hale getirerek 16,67 milisaniye eşiğini aşan kareleri vurgular.
  • Her çubukta, oluşturma işlem hattındaki bir aşamayla eşleşen renkli bileşenler bulunur. Bileşenlerin sayısı, cihazın API düzeyine bağlı olarak değişir.

Aşağıdaki tabloda, Android 6.0 ve sonraki sürümleri çalıştıran bir cihaz kullanılırken profil oluşturucu çıktısındaki dikey çubuğun her bir segmentinin açıklamaları verilmiştir.

Bar BileşeniOluşturma AşamasıAçıklama
Takas arabellekleri CPU'nun GPU'nun işini bitirmesini beklediği süreyi gösterir. Bu çubuk yükselirse uygulama GPU'da çok fazla iş yapıyor demektir.
Komut Sorunu Android'in 2D oluşturucusunun, OpenGL'ye komut vererek ekran listelerini çizmek ve yeniden çizmek için harcadığı süreyi gösterir. Bu çubuğun yüksekliği, her bir görüntüleme listesinin yürütülmesi için gereken sürenin toplamıyla doğru orantılıdır. Daha fazla görüntüleme listesi, daha uzun bir kırmızı çubuk anlamına gelir.
Senkronizasyon ve Yükleme Bit eşlem bilgilerinin GPU'ya yüklenmesi için gereken süreyi gösterir. Büyük bir segment, uygulamanın önemli miktarda grafik yüklemek için çok zaman harcadığını gösterir.
Çiz Görünümün görüntüleme listelerini oluşturmak ve güncellemek için kullanılan süreyi gösterir. Çubuğun bu kısmı uzunsa çok fazla özel görünüm çizimi veya onDraw yöntemlerinde çok fazla iş olabilir.
Ölçü / Düzen Görünüm hiyerarşisinde onLayout ve onMeasure geri çağırmalarında harcanan süreyi gösterir. Büyük bir segment, görünüm hiyerarşisinin işlenmesinin uzun sürdüğünü gösterir.
Giriş İşleme ve Animasyon Bu kare için çalışan tüm animasyoncuların değerlendirilmesi ve tüm giriş geri aramalarının işlenmesi için geçen süreyi gösterir. Bu segment büyükse özel bir animatörün veya giriş geri çağırmasının işleme için çok fazla zaman harcadığını gösterebilir. Kaydırma sırasında görünüm bağlama (ör. RecyclerView.Adapter.onBindViewHolder()) de genellikle bu segmentte gerçekleşir ve bu segmentteki yavaşlamaların daha yaygın bir kaynağıdır.
Çeşitli Zaman / VSync Gecikmesi Uygulamanın, iki ardışık kare arasında işlemleri yürütmek için harcadığı süreyi gösterir. Bu durum, kullanıcı arayüzü iş parçacığında çok fazla işleme yapıldığını ve bu işlemlerin farklı bir iş parçacığına aktarılabileceğini gösteriyor olabilir.

Tablo 1. Android 6.0 ve sonraki sürümlerdeki bileşen çubukları.

4.0 (API düzeyi 14) ile 5.0 (API düzeyi 21) arasındaki Android sürümlerinde mavi, mor, kırmızı ve turuncu segmentler bulunur. Android'in 4.0'dan önceki sürümlerinde yalnızca mavi, kırmızı ve turuncu bileşenler bulunur. Aşağıdaki tabloda Android 4.0 ve 5.0'daki bileşen çubukları gösterilmektedir.

Bar BileşeniOluşturma AşamasıAçıklama
İşle CPU'nun GPU'nun işini bitirmesini beklediği süreyi gösterir. Bu çubuk yükselirse uygulama GPU'da çok fazla iş yapıyor demektir.
Yürüt Android'in 2D oluşturucusunun, OpenGL'ye komut vererek ekran listelerini çizmek ve yeniden çizmek için harcadığı süreyi gösterir. Bu çubuğun yüksekliği, her bir görüntüleme listesinin yürütülmesi için gereken sürenin toplamıyla doğru orantılıdır. Daha fazla görüntüleme listesi, daha uzun bir kırmızı çubuk anlamına gelir.
XFer Bit eşlem bilgilerinin GPU'ya yüklenmesi için gereken süreyi gösterir. Büyük bir segment, uygulamanın önemli miktarda grafik yüklemek için çok zaman harcadığını gösterir. Bu bölüm, Android 4.0 veya daha eski sürümleri çalıştıran cihazlarda görünmez.
Güncelle Görünümün görüntüleme listelerini oluşturmak ve güncellemek için kullanılan süreyi gösterir. Çubuğun bu kısmı uzunsa çok fazla özel görünüm çizimi veya onDraw yöntemlerinde çok fazla iş olabilir.

Tablo 2. Android 4.0 ve 5.0'daki bileşen çubukları.

Profillendirme aracı tarafından sağlanan bilgileri yorumlama hakkında daha fazla bilgi için Profil GPU Oluşturma ile Analiz Etme başlıklı makaleyi inceleyin.

Not: Bu aracın adı Profil GPU Oluşturma olsa da izlenen tüm işlemler aslında CPU'da gerçekleşir. Oluşturma işlemi, GPU'ya komut gönderilerek yapılır ve GPU, ekranı eşzamansız olarak oluşturur. Bazı durumlarda GPU'nun yapması gereken çok fazla iş olabilir ve CPU'nun yeni komutlar gönderebilmesi için beklemesi gerekir. Bu durumda, turuncu ve kırmızı çubuklarda ani yükselmeler görürsünüz. GPU komut kuyruğunda daha fazla yer açılana kadar komut gönderimi engellenir.

GPU fazla çizimini görselleştirme

Geliştirici seçeneklerindeki bir diğer özellik, kullanıcı arayüzünüzü renk kodlarıyla işaretleyerek aşırı çizimi belirlemenize yardımcı olur. Fazla çizim, uygulamanız aynı pikseli aynı kare içinde birden fazla kez çizdiğinde meydana gelir. Bu görselleştirme, uygulamanızın gereğinden fazla oluşturma işlemi yaptığı yerleri gösterir. Bu durum, kullanıcının göremeyeceği pikselleri oluşturmak için GPU'nun ekstra çaba harcaması nedeniyle performans sorununa yol açabilir. Bu nedenle, mümkün olduğunda aşırı çizim etkinliklerini düzeltmelisiniz.

Henüz yapmadıysanız geliştirici seçeneklerini etkinleştirin. Ardından, cihazınızda fazla çizimi görselleştirmek için aşağıdaki adımları uygulayın:

  1. Cihazınızda Ayarlar'a gidip Geliştirici Seçenekleri'ne dokunun.
  2. Donanım hızlandırmalı oluşturma bölümüne gidin ve GPU'nun aşırı çiziminde hata ayıklama'yı seçin.
  3. GPU fazla çizim hatasını ayıkla iletişim kutusunda Fazla çizim alanlarını göster'i seçin.

Android, aşırı çizim miktarını belirlemek için kullanıcı arayüzü öğelerini aşağıdaki gibi renklendirir:

  • Gerçek renk: Aşırı çizim yok
  • Mavi: 1 kez fazla çekildi
  • Yeşil: 2 kez fazla çekildi
  • Pembe: 3 kez fazla çekilmiş
  • Kırmızı: 4 veya daha fazla kez fazla çekilmiş

Şekil 2. Bir uygulama normalde (solda) ve GPU fazla çizimi etkinleştirilmişken (sağda) göründüğü şekilde

Bu renklerin yarı şeffaf olduğunu unutmayın. Bu nedenle, ekranda gördüğünüz tam renk, kullanıcı arayüzünüzün içeriğine bağlıdır.

Düzeninizde aşırı çizimin nerede gerçekleştiğini artık bildiğinize göre aşırı çizimi nasıl azaltacağınızı öğrenin.

Bir miktar fazla çekimin kaçınılmaz olduğunu unutmayın. Uygulamanızın kullanıcı arayüzünü ayarlarken çoğunlukla gerçek renkleri veya yalnızca 1 kat fazla çizimi (mavi) gösteren bir görselleştirme elde etmeye çalışın.

Şekil 3. Çok fazla üst üste çizim (solda) ve çok daha az üst üste çizim (sağda) içeren bir uygulama örneği