CPU Profiler'daki iz görünümü, kaydedilen izlerdeki bilgileri görüntülemek için çeşitli yollar sunar.
Yöntem izleri ve işlev izleri için Çağrı Grafiği'ni doğrudan İleti dizileri zaman çizelgesinde ve Analiz bölmesinden Alev Grafiği, Yukarıdan Aşağı, Aşağıda Yukarıya ve Etkinlikler sekmelerini görüntüleyebilirsiniz. Çağrı yığını çerçeveleri için, kodun yürütülen bölümünü ve neden çağrıldığını görüntüleyebilirsiniz. Sistem izleri için Etkinlikleri İzleme'yi doğrudan Threads zaman çizelgesinde ve Analiz bölmesinden Flame Grafiği, Yukarıdan Aşağı, Aşağıdan Yukarı ve Etkinlikler sekmelerini görüntüleyebilirsiniz.
Çağrı Grafikleri veya İzleme Etkinlikleri'nde daha kolay gezinmek için fare ve klavye kısayolları kullanılabilir.
Çağrı Grafiğini kullanarak izleri inceleme
Çağrı Grafiği, bir yöntem izlemenin veya işlev izlemenin grafik temsilini sağlar. Burada, çağrı dönemi ve zamanlaması yatay eksende, çağrılanları ise dikey eksende gösterilir. Sistem API'lerine yapılan çağrılar turuncu, uygulamanızın kendi yöntemlerine yapılan çağrılar yeşil renkle, üçüncü taraf API'lere (Java dili API'leri dahil) yapılan çağrılar ise mavi renkle gösterilir. Şekil 4'te örnek bir çağrı grafiği gösterilmiş ve belirli bir yöntem ya da işlev için kendine zaman, çocukların geçirdiği toplam süre ve toplam süre kavramı gösterilmektedir. Bu kavramlarla ilgili daha fazla bilgiyi, Yukarıdan Aşağıya ve Aşağıdan Yukarıyı kullanarak izleri inceleme bölümünde bulabilirsiniz.
Şekil 1. D yöntemi için kendini, çocukları ve toplam süreyi gösteren örnek bir çağrı grafiği.
İpucu: Bir yöntemin veya işlevin kaynak kodunu atlamak için ilgili yöntemi veya işlevi sağ tıklayın ve Kaynağa Atla'yı seçin. Bu işlem, Analiz bölmesi sekmelerinin herhangi birinden kullanılabilir.
Flame Grafiği sekmesini kullanarak izleri inceleme
Flame Grafiği sekmesi, aynı çağrı yığınlarını toplayan ters bir çağrı grafiği sağlar. Yani, aynı arayan sırasını paylaşan özdeş yöntemler veya işlevler toplanır ve flame grafiğinde daha uzun tek bir çubuk olarak temsil edilir (bunları bir çağrı grafiğinde gösterildiği gibi birden fazla kısa çubuk olarak görüntülemek yerine). Bu, hangi yöntem veya işlevlerin en fazla zaman harcadığını görmeyi kolaylaştırır. Bununla birlikte bu durum, yatay eksenin bir zaman çizelgesini temsil etmediği anlamına da gelir. Bunun yerine, her yöntemin veya işlevin yürütülmesi için gereken göreli süreyi gösterir.
Bu kavramı açıklamak için Şekil 2'deki çağrı şemasını kullanabilirsiniz. D yönteminin B'ye (B1, B2 ve B3) birden çok çağrı yaptığını ve B'ye yapılan çağrıların bazılarının C'ye (C1 ve C3) bir çağrı yaptığını unutmayın.
2. Şekil. Ortak bir arayan sırasına sahip birden fazla yöntem çağrısı içeren bir çağrı grafiği.
B1, B2 ve B3 aynı arayan dizisini (A → D → B) paylaştığından Şekil 3'te gösterildiği gibi toplanır. Benzer şekilde, C1 ve C3 aynı arayan sırasını (A → D → B → C) paylaştıkları için toplanır; farklı bir arayan sırasına (A → D → C) sahip olduğu için C2'nin dahil edilmediğini unutmayın.
3. Şekil. Aynı çağrı yığınını paylaşan özdeş yöntemlerin toplanması.
Toplu çağrılar Şekil 4'te gösterildiği gibi flame grafiğini oluşturmak için kullanılır. Yanma grafiğindeki herhangi bir çağrı için en fazla CPU süresini tüketen katılımcıların ilk sırada göründüğünü unutmayın.
4. Şekil. Şekil 5'te gösterilen çağrı grafiğinin alev grafiği temsili.
Yukarıdan Aşağı ve Alttan Yukarı okları kullanarak izleri inceleme
Yukarıdan Aşağıya sekmesinde, bir yöntemin veya işlev düğümünün genişletilen kişilerin çağrılarını görüntülediği çağrıların listesi görüntülenir. Şekil 5'te, Şekil 1'deki çağrı şeması için yukarıdan aşağıya bir grafik gösterilmiştir. Grafikteki her ok, bir arayandan arayan kişiye işaret eder.
Şekil 5'te gösterildiği gibi, Yukarıdan Aşağıya sekmesinde A yöntemi için düğüm genişletildiğinde çağrılar, B ve D yöntemleri görüntülenir. Bundan sonra, D yöntemi için düğümün genişletilmesi, çağrıyı yapanları, B ve C yöntemlerini vb. ortaya çıkarır. Flame grafiği sekmesine benzer şekilde, yukarıdan aşağıya doğru ağaç, aynı çağrı yığınını paylaşan özdeş yöntemlere ait iz bilgilerini toplar. Yani Flame grafiği sekmesi, Yukarıdan aşağıya sekmesinin grafiksel bir temsilini sağlar.
Yukarıdan Aşağıya sekmesi, her bir çağrıda harcanan CPU süresini açıklamaya yardımcı olmak için aşağıdaki bilgileri sağlar (süreler, seçilen aralıktaki iş parçacığı toplam süresinin yüzdesi olarak da gösterilir):
- Kendi: D yöntemi için Şekil 1'de gösterildiği gibi, yöntem veya işlev çağrısının çağrılanlarının değil, kendi kodunu yürütmek için harcadığı süre.
- Alt öğeler: D yöntemi için Şekil 1'de gösterildiği gibi, yöntem veya işlev çağrısının kendi kodunu değil, çağrılarını yürütmek için harcadığı süre.
- Toplam: Yöntemin Kendisi ve Çocuklar süresinin toplamı. D yöntemi için Şekil 1'de gösterildiği gibi, uygulamanın bir çağrıyı yürütmek için harcadığı toplam süreyi temsil eder.
![](https://developer.android.com/static/studio/images/profile/top_down_tree-2X.png?authuser=9&hl=tr)
5.Şekil Yukarıdan aşağıya bir ağaç.
![](https://developer.android.com/static/studio/images/profile/bottom_up_tree-2X.png?authuser=9&hl=tr)
6.Şekil Şekil 5'te gösterilen C yöntemi için Aşağıdan Yukarıya ağaç.
Aşağıdan Yukarı sekmesinde, bir işlevin veya yöntemin düğümünün çağrılanlarını görüntülediği çağrıların listesi görüntülenir. Şekil 5'te gösterilen örnek iz kullanılarak, şekil 6'da C yöntemi için aşağıdan yukarı bir ağaç gösterilmektedir. Aşağıdan yukarıya ağaçta C yöntemi için düğüm açıldığında benzersiz arayanların, B ve D yöntemlerinin her biri görüntülenir. B, C'yi iki kez çağırsa da, B'nin aşağıdan yukarıya ağaçta C yöntemi için düğüm genişletildiğinde yalnızca bir kez göründüğünü unutmayın. Bundan sonra, düğüm B için genişletildiğinde, arayanı olan A ve D yöntemleri görüntülenir.
Aşağıdan Yukarı sekmesi, yöntemleri ya da işlevleri CPU süresini en çok (veya en az) harcayan yöntemlere göre sıralamak için yararlıdır. Bu yöntemleri veya işlevleri çağırmak için en fazla CPU zamanı harcayanları belirlemek amacıyla her bir düğümü inceleyebilirsiniz. Yukarıdan aşağıya doğru ağaçla karşılaştırıldığında, aşağıdan yukarıya bir ağaçtaki her yöntem veya işlevin zamanlama bilgisi, her ağacın üst kısmındaki yöntemle (üst düğüm) ilişkilidir. CPU süresi, iş parçacığının bu kayıt sırasındaki toplam süresinin yüzdesi olarak da temsil edilir. Aşağıdaki tablo, en üst düğüm ve onu arayanlar (alt düğümler) için zamanlama bilgilerinin nasıl yorumlanacağını açıklamaya yardımcı olur.
Kendisi | Çocuk | Toplam | |
---|---|---|---|
Aşağıdan yukarıya ağacın (üst düğüm) en üstündeki yöntem veya işlev | Yöntemin veya işlevin, çağrılanlarının değil, kendi kodunu yürütmek için harcadığı toplam süreyi temsil eder. Yukarıdan aşağıya doğru ağaçla karşılaştırıldığında bu zamanlama bilgileri, kayıt süresi boyunca bu yönteme veya işleve yapılan tüm çağrıların toplamını temsil eder. | Yöntemin veya işlevin kendi kodunu değil, çağrılarını yürütmek için harcadığı toplam süreyi temsil eder. Yukarıdan aşağıya doğru ağaçla karşılaştırıldığında bu zamanlama bilgileri, kayıt süresi boyunca bu yönteme veya işlevin çağıranlarına yapılan tüm çağrıların toplamını temsil eder. | Kendi zamanının ve çocukların geçirdiği zamanın toplamı. |
Arayanlar (alt düğümler) | Arayanın aradığı kişi tarafından arandığı toplam süreyi temsil eder. Örnek olarak Şekil 6'daki aşağıdan yukarıya ağacı kullanırsak B yönteminin kendi kendine süresi, B tarafından çağrıldığında C yönteminin her bir yürütmesinin kendi zamanlarının toplamına eşit olur. | Arayan tarafından çağrıldığında, arayanın toplam alt öğesi süresini temsil eder. Örnek olarak Şekil 6'daki aşağıdan yukarıya ağacı kullanırsak, B yönteminin alt zamanları, B tarafından çağrıldığında C yönteminin her bir yürütmesinin alt zamanlarının toplamına eşit olur. | Kendi zamanının ve çocukların geçirdiği zamanın toplamı. |
Not: Belirli bir kayıt için profil oluşturucu, dosya boyutu sınırına ulaştığında Android Studio yeni veri toplamayı durdurur (ancak bu işlem, kaydı durdurmaz). Bu izleme türü, örneklenmiş izlerle karşılaştırıldığında daha kısa sürede daha fazla veri topladığı için bu izleme işlemi genellikle çok daha hızlı gerçekleşir. İnceleme süresini, sınıra ulaştıktan sonra gerçekleşen kayıt dönemine kadar uzatırsanız izleme bölmesindeki zamanlama verileri değişmez (çünkü yeni veri yoktur). Buna ek olarak, bir kaydın yalnızca kullanılabilir veri olmayan bölümünü seçtiğinizde iz bölmesinde zamanlama bilgisi için NaN değeri gösterilir.
Etkinlikler tablosunu kullanarak izleri inceleme
Etkinlikler tablosunda, seçili olan ileti dizisindeki tüm çağrılar listelenir. Sütun başlıklarını tıklayarak bunları sıralayabilirsiniz. Tablodan bir satır seçerek zaman çizelgesinde seçili çağrının başlangıç ve bitiş zamanına gidebilirsiniz. Bu sayede etkinlikleri zaman çizelgesinde doğru şekilde bulabilirsiniz.
7. Şekil. Analysis bölmesinde Etkinlikler sekmesini görüntüleme.
Çağrı yığını çerçevelerini inceleme
Çağrı yığınları, kodun hangi bölümünün yürütüldüğünü ve neden çağrıldığını anlamak için yararlıdır. Bir Java/Kotlin programı için Callstack Örnek Kaydı toplanırsa çağrı yığını genellikle yalnızca Java/Kotlin kodunu değil, aynı zamanda JNI yerel kodu, Java sanal makinesinden (ör.
android::AndroidRuntime::start
) ve sistem çekirdeği
([kernel.kallsyms]+offset
). Bunun nedeni, Java/Kotlin programının genellikle bir Java sanal makinesi üzerinden
yürütülmesidir. Yerel kod, programın kendisini çalıştırmak ve programın sistem ve donanımla konuşmak için gereklidir. Profil oluşturucu, bu çerçeveleri hassasiyet için sunar; ancak, yaptığınız araştırmaya bağlı olarak bu ekstra çağrı çerçevelerini yararlı bulup bulmayabilirsiniz. Profil oluşturucu, ilgilenmediğiniz kareleri daraltmanın bir yolunu sunar. Böylece, araştırmanız için alakasız bilgileri gizleyebilirsiniz.
Aşağıdaki örnekte, aşağıdaki izde şu anda geliştirme için yararlı olmayan [kernel.kallsyms]+offset
etiketli çok sayıda çerçeve vardır.
Bu kareleri tek bir çerçevede daraltmak için araç çubuğundan Çerçeveleri daralt düğmesini seçer, daraltılacak yolları belirler ve değişikliklerinizi uygulamak için Uygula düğmesini seçersiniz. Bu örnekte yol [kernel.kallsyms]
şeklindedir.
Bu işlem, aşağıda gösterildiği gibi hem sol hem de sağ panellerde seçili yola karşılık gelen çerçeveleri daraltır.
Sistem izlerini inceleyin
Bir sistem izlemeyi incelerken, her bir iş parçacığında gerçekleşen etkinliklerin ayrıntılarını görüntülemek için İleti Dizileri zaman çizelgesindeki İzleme Etkinlikleri'ni inceleyebilirsiniz. Etkinliğin adını ve her bir durumda harcanan süreyi görmek için fare işaretçinizi etkinliğin üzerine getirin. Analiz bölmesinde daha fazla bilgi görmek için bir etkinliği tıklayın.
Sistem izlerini inceleme: CPU çekirdekleri
Sistem izleri, CPU zamanlama verilerinin yanı sıra çekirdek bazında CPU frekansını da içerir. Bu veri, her bir çekirdekteki etkinlik miktarını gösterir ve modern mobil işlemcilerde hangilerinin "büyük" veya "küçük" çekirdek olduğu konusunda size bir fikir verebilir.
Şekil 8. Oluşturma iş parçacığıyla ilgili CPU etkinliğini ve izleme etkinliklerini görüntüleme.
CPU Çekirdekleri bölmesi (Şekil 8'de gösterildiği gibi), her çekirdekte programlanan iş parçacığı etkinliğini gösterir. Belirli bir zamanda bu çekirdeğin hangi iş parçacığında çalıştığını görmek için fare işaretçinizi bir iş parçacığı etkinliğinin üzerine getirin.
Sistem izleme bilgilerini inceleme hakkında ek bilgi için systrace
belgelerinin Kullanıcı arayüzü performans sorunlarını inceleme bölümüne bakın.
Sistem izlerini inceleme: Çerçeve oluşturma zaman çizelgesi
Uygulamanızın ana iş parçacığındaki her bir kareyi oluşturmasının ne kadar sürdüğünü ve kullanıcı arayüzü duraklamalarına ve düşük kare hızlarına neden olan performans sorunlarını araştırmak için RenderThread
ürününü inceleyebilirsiniz. Kullanıcı arayüzü olumsuzluklarını araştırmak ve azaltmaya yardımcı olmak amacıyla sistem izlemelerinin nasıl kullanılacağını öğrenmek için Kullanıcı arayüzü duraklaması algılama bölümüne bakın.
Sistem izlerini inceleme: İşlem Belleği (RSS)
Android 9 veya sonraki sürümleri çalıştıran cihazlara dağıtılan uygulamaların İşlem Belleği (RSS) bölümünde uygulamanın o anda kullandığı fiziksel bellek miktarı gösterilir.
Şekil 9. Profil oluşturucuda fiziksel anı görüntüleniyor.
Toplam
İşleminiz tarafından şu anda kullanılmakta olan toplam fiziksel bellek miktarıdır. Unix tabanlı sistemlerde bu, "Yerleşik Küme Boyutu" olarak bilinir ve anonim ayırmalar, dosya eşlemeleri ve paylaşılan bellek ayırmaları tarafından kullanılan tüm belleğin kombinasyonudur.
Windows geliştiricileri için, Kalıcı Set Boyutu, Çalışma Grubu Boyutu'na benzer.
Ayrılan
Bu sayaç, işlemin normal bellek ayırmaları tarafından şu anda ne kadar fiziksel bellek kullanıldığını izler. Bunlar anonim (belirli bir dosya tarafından desteklenmeyen) ve özel (paylaşılmayan) ayırmalardır. Çoğu uygulamada bunlar yığın ayırmalardan (malloc
veya new
ile) ve yığın bellekten oluşur. Bu ayırmalar, fiziksel bellekten değiştirildiğinde sistem değiştirme dosyasına yazılır.
Dosya Eşlemeleri
Bu sayaç, işlemin dosya eşlemeleri için kullandığı fiziksel bellek miktarını izler. Diğer bir deyişle, bellek yöneticisi tarafından dosyalardan bir bellek bölgesine eşlenen bellek.
Paylaşıldı
Bu sayaç, bu işlem ve sistemdeki diğer işlemler arasında bellek paylaşmak için ne kadar fiziksel bellek kullanıldığını izler.