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

Android, uygulamanızın kullanıcı arayüzünü oluştururken nerelerde karşılaşabileceği (ör. gerekenden daha fazla oluşturma işi yapmak veya uzun iş parçacığı ve GPU işlemleri yürütme gibi) nerede yaşanabileceğini görselleştirmenize yardımcı olan bazı cihaz üzerinde geliştirici seçenekleri içerir. Bu sayfada, GPU fazla çizimi ve profil GPU oluşturmada hata ayıklama işlemi açıklanmaktadır.

Nasıl etkinleştirilecekleri de dahil olmak üzere cihaz üzerinde geliştirici seçenekleri hakkında daha fazla bilgi edinmek için Cihaz üzerinde geliştirici seçeneklerini yapılandırma başlıklı makaleyi okuyun.

Profil GPU oluşturma hızı

Profil GPU Oluşturma aracı, kullanıcı arayüzü penceresi karelerini oluşturmak için gereken sürenin, kare başına 16,67 ms'lik karşılaştırmayla göreli olarak ne kadar sürdüğünü kayan bir histogram olarak gösterir.

Daha az güçlü GPU'larda mevcut doluluk oranı (GPU'nun kare arabelleğini doldurma hızı) oldukça düşük olabilir. Kare çizmek için gereken piksel sayısı arttıkça GPU'nun yeni komutları işlemesi daha uzun sürebilir ve sistemin geri kalanından bunu yakalayana kadar beklemesini isteyebilir. Profil oluşturma aracı, GPU'nun piksel çizmeye çalışırken bunaldığını veya aşırı fazla çizim nedeniyle yüklendiği durumları tespit etmenize yardımcı olur.

Profil oluşturucuyu etkinleştir

Başlamadan önce, Android 4.1 (API düzeyi 16) veya sonraki sürümleri çalıştıran bir cihaz kullandığınızdan ve geliştirici seçeneklerini etkinleştirdiğinizden emin olun. Uygulamanızı kullanırken cihaz GPU oluşturma işleminin profilini oluşturmaya başlamak için aşağıdaki adımları uygulayın:

  1. Cihazınızda Ayarlar'a gidin ve 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. Profil GPU Oluşturma iletişim kutusunda, grafikleri cihazınızın ekranına yerleştirmek için Ekranda çubuklar'ı seçin.
  4. Profili oluşturmak istediğiniz uygulamayı açın.

Çıkışı inceleyin

Ş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örüntülenen renkli bölümü görebilirsiniz.

Şekil 1. Genişletilmiş Profil GPU Oluşturma grafiği.

Çıkışla ilgili dikkat edilmesi gereken birkaç nokta aşağıda belirtilmiştir:

  • Araç, görünür olan her uygulama için bir grafik görüntüler.
  • Yatay eksendeki her dikey çubuk bir kareyi temsil eder. Her dikey çubuğun yüksekliği de karenin oluşturulma süresini (milisaniye cinsinden) temsil eder.
  • Yatay yeşil çizgi 16,67 milisaniyeyi temsil eder. Saniyede 60 kareye ulaşmak için her karedeki dikey çubuğun bu çizginin altında kalması gerekir. 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 çubuk, oluşturma ardışık düzenindeki bir aşamayla eşlenen renkli bileşenlere sahiptir. Bileşenlerin sayısı cihazın API düzeyine göre değişir.

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

Çubuğun BileşeniOluşturma AşamasıAçıklama
Arabellekleri Değiştir CPU'nun, GPU'nun çalışmasını tamamlamasını beklediği süreyi gösterir. Bu çubuk uzarsa uygulama GPU'da çok fazla çalışıyor demektir.
Komut Sorunu Android'in 2D oluşturucusunun, görüntüleme listelerini çizmek ve yeniden çizmek için OpenGL'ye komutlar vermesiyle harcadığı süreyi temsil eder. Bu çubuğun yüksekliği, her bir görüntüleme listesinin yürütülmesi için geçen sürenin toplamıyla doğrudan orantılıdır. Daha fazla görüntüleme listesi, daha uzun bir kırmızı çubuk anlamına gelir.
Senkronize Et ve Yükle Bit eşlem bilgilerini GPU'ya yüklemek için gereken süreyi gösterir. Segmentin büyük olması, uygulamanın çok miktarda grafik yüklemesinin epey zaman aldığını gösterir.
Çiz Görünümün görüntüleme listelerini oluşturmak ve güncellemek için kullanılan zamanı temsil eder. Çubuğun bu kısmı uzunsa çok sayıda özel görünüm çizimi veya onDraw yöntemlerinde çok fazla iş yapılması gerekebilir.
Ölçüm / Düzen Görünüm hiyerarşisindeki onLayout ve onmeasure geri çağırmalarına harcanan süreyi temsil eder. Segmentin büyük olması, görünüm hiyerarşisinin işlenmesinin uzun sürdüğünü gösterir.
Girişleri İşleme ve Animasyon Söz konusu kare için çalışan tüm animatörlerin değerlendirilmesi ve tüm giriş geri çağırmalarının işlenmesi için geçen süreyi gösterir. Bu segment büyükse özel animatörün veya giriş geri çağırmasının işleme için çok fazla zaman harcadığı anlamına gelebilir. Kaydırma sırasında görünüm bağlaması (ör. RecyclerView.Adapter.onBindViewHolder()) de genellikle bu segmentte gerçekleşir ve bu segmentteki yavaşlamaların daha yaygın nedenidir.
Çeşitli Süre / VSync Gecikmesi Uygulamanın ardışık iki kare arasında işlem yürütmek için harcadığı süreyi gösterir. Bu durum, kullanıcı arayüzü iş parçacığında çok fazla işleme gerçekleştiğini ve bunların farklı bir iş parçacığına aktarılabileceğini gösterebilir.

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

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

Çubuğun BileşeniOluşturma AşamasıAçıklama
İşlem CPU'nun, GPU'nun çalışmasını tamamlamasını beklediği süreyi gösterir. Bu çubuğun uzanması, uygulamanın GPU'da çok fazla çalıştığı anlamına gelir.
Yürüt Android'in 2D oluşturucusunun, görüntüleme listelerini çizmek ve yeniden çizmek için OpenGL'ye komutlar vermesiyle harcadığı süreyi temsil eder. Bu çubuğun yüksekliği, her bir görüntüleme listesinin yürütülmesi için geçen sürenin toplamıyla doğrudan 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 geçen süreyi gösterir. Segmentin büyük olması, uygulamanın çok miktarda grafik yüklemesinin epey zaman aldığını gösterir. Bu segment, Android 4.0 veya önceki 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 zamanı temsil eder. Çubuğun bu kısmı uzunsa çok sayıda özel görünüm çizimi veya onDraw yöntemlerinde çok fazla iş yapılması gerekebilir.

Tablo 2. Android 4.0 ve 5.0 sürümlerindeki bileşen çubukları.

Profil oluşturma aracı tarafından sağlanan bilgilerin nasıl yorumlanacağı hakkında daha fazla bilgi için Profil GPU Oluşturma ile Analiz Etme bölümünü okuyun.

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öndererek gerçekleşir ve GPU, ekranı eşzamansız olarak oluşturur. Belirli durumlarda GPU'nun yapması gereken çok fazla iş olabilir ve CPU'nuzun yeni komutlar gönderebilmesi için beklemesi gerekebilir. Böyle bir durumda turuncu ve kırmızı çubuklarda ani yükselişler görürsünüz ve GPU komut sırasında daha fazla alan açılıncaya kadar komut gönderimi engellenir.

GPU fazla çizimlerini görselleştirme

Geliştirici seçeneklerindeki bir başka özellik de kullanıcı arayüzünüzdeki renklerle kodlayarak fazla çizimleri tespit etmenize yardımcı olur. Fazla çizim, uygulamanız aynı pikseli aynı karede bir kereden fazla çizdiğinde gerçekleşir. Dolayısıyla bu görselleştirme, uygulamanızın nerede gerekenden daha fazla oluşturma işi yapıyor olabileceğini gösterir. Bu, kullanıcı tarafından görülemeyecek pikselleri oluşturmak için gereken ekstra GPU çabasından dolayı bir performans sorunu olabilir. Bu nedenle, mümkün olduğunda fazla çizim etkinliklerini düzeltmeniz gerekir.

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

  1. Cihazınızda Ayarlar'a gidin ve Geliştirici Seçenekleri'ne dokunun.
  2. Donanım hızlandırmalı oluşturma bölümüne ilerleyin ve GPU Fazla Çekme Hatalarını Ayıkla'yı seçin.
  3. GPU fazla çizim hatalarını ayıkla iletişim kutusunda Fazla çizim alanlarını göster'i seçin.

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

  • Gerçek renk: Fazla çizim olmaz
  • Mavi: 1 kez fazla çizildi
  • Yeşil: 2 kez fazla çizildi
  • Pembe: 3 kez fazla çizildi
  • Kırmızı: 4 kez veya daha fazla kez fazla çizilmiştir

Şekil 2. Bir uygulama (GPU Fazla Çizme etkinken) (sağda) ve normalde göründüğü şekliyle (solda)

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

Artık düzeninizde fazla çizimin nerede gerçekleştiğini öğrendiğinize göre fazla çizimi nasıl azaltacağınızı okuyun.

Biraz fazla çizim yapmanın kaçınılmaz olduğunu unutmayın. Uygulamanızın kullanıcı arayüzünde ayarlama yaparken, çoğunlukla gerçek renkleri veya yalnızca 1 kat fazla çizim (mavi) gösteren bir görselleştirmeye ulaşmaya çalışın.

3. Şekil. Çok fazla fazla çizim (solda) ve çok daha az fazla çizim (sağda) içeren uygulama örnekleri