Traceview, Android Studio’ya entegre edilmiş, uygulama metotlarının yürütülmesini zaman ve CPU kaynakları açısından kaydeden ve görselleştiren grafiksel bir izleme aracıdır. Çekirdek seviyesinde sistem süreçlerini gösteren Systrace’in aksine Traceview, kullanıcı girişinden UI oluşturmaya kadar zincir halinde çağrılan uygulama içindeki Java ve Kotlin metotlarına odaklanır. Google, 2024’e göre araç, tek tek çağrılar düzeyinde performans darboğazlarını bulmaya ve sürümden önce kodu optimize etmeye yardımcı olur.
Anahtar çıkarımlar
Traceview, Android Studio’ya entegre edilmiş, Android uygulama metotlarının yürütme izlerini bir zaman çizelgesi ve çağrı tablosu olarak görüntüleyen grafiksel bir profilleyicidir. Android SDK’nın bir parçasıdır ve Android Studio 3.0’dan itibaren Android Profiler aracılığıyla ve ayrıca dmtracedump komut satırı yardımcı programı aracılığıyla kullanılabilir.
Traceview’in ana görevi, geliştiricilerin en çok CPU süresi tüketen metotları bulmasına yardımcı olmaktır. Basit günlük kaydının aksine Traceview, her metotun tam giriş ve çıkış zamanını kaydeder, bir Call Chart ve Top-Down ağacı oluşturarak performans anormalliklerinin görsel olarak tespit edilmesini sağlar. Araç, 16 ms’lik bir gecikmenin kare düşmesine neden olduğu UI ipliğini profillerken özellikle kullanışlıdır.
Traceview ilk olarak Android SDK’nın erken sürümlerinde .trace dosyalarını görüntülemek için bağımsız bir yardımcı program olarak ortaya çıktı. Android Studio 3.0’ın (2017) piyasaya sürülmesiyle Android Profiler’ın bir parçası haline geldi ve canlı CPU, bellek ve ağ zaman çizelgeleriyle entegrasyon kazandı. Google I/O 2018’e göre Android Studio ekibi, systrace ve perfetto aracılığıyla yerel kod desteği ekleyerek profilleyiciyi geliştirmeye devam ediyor. Android Studio’nun mevcut sürümlerinde Traceview, Perfetto biçimi üzerinde çalışır ancak klasik .trace biçimiyle geriye dönük uyumluluğu korur.
Traceview, Android Runtime (ART)’daki System Tracing mekanizmasından veri alır. Bir uygulama izleme etkinleştirilmiş olarak başlatıldığında ART, sınıf adı, metot adı ve iplik kimliği dahil olmak üzere yürütülen her metotun başlangıç ve bitiş zaman damgalarını kaydeder.
// Uygulama kodunda izleme başlatma
Debug.startMethodTracing("app_trace")
// Profil oluşturma için kritik kod bölümü
loadHeavyData()
// İzlemeyi durdurma — dosya cihaza kaydedildi
Debug.stopMethodTracing()
System Tracing, ART sanal makine düzeyinde çalışır ve her metot çağrısını mikrosaniye hassasiyetiyle kaydeder. Uygulama performansı üzerindeki etkiyi en aza indirmek için veriler dairesel bir arabelleğe yazılır. İzleme durdurulduktan sonra arabellek, cihazın dahili deposundaki bir .trace dosyasına boşaltılır.
Bir .trace dosyası, biçim sürümü ve başlangıç saatiyle bir başlık içerir ve ardından her çağrı için kayıtlar gelir: İplik Kimliği, Metot Kimliği, giriş zaman damgası ve çıkış zaman damgası. Android Studio .trace dosyasını otomatik olarak yükler ve iki ana görünüm oluşturur: kronoloji için Zaman Çizelgesi Paneli ve çağrı hiyerarşisi için Profil Paneli. Varsayılan olarak maksimum arabellek boyutu 8 MB’dır, ancak Debug.startMethodTracing(filename, maxSize) ile artırılabilir.
Traceview, her biri performans analizinde belirli bir görevi ele alan birkaç tamamlayıcı veri görünümü sağlar.
Call Chart, her ipliğin ayrı bir şerit olarak görüntülendiği yatay bir zaman çizelgesidir. Metotlar renkli dikdörtgenler olarak gösterilir: dikdörtgenin genişliği yürütme süresiyle orantılıdır ve iç içelik çağrı hiyerarşisini yansıtır. Bir metot başka bir metodu çağırırsa, alt dikdörtgen üst dikdörtgenin içine çizilir. Bu görselleştirme, ipliği bloke eden işlemlerin anında tanımlanmasına olanak tanır.
Top-Down ağacı, tüm iç içe çağrıları dahil bir metotun yürütme süresini gösterir — Inclusive Time. Bottom-Up ağacı ise tam tersine, belirli bir metodu hangi üst metotların çağırdığını gösterir — ağır bir işlemin kaynağını bulmak için kullanışlıdır. Inclusive ve Exclusive Time arasındaki fark kritiktir: bir metot kendisi hızlı çalışabilir ancak yavaş bir alt metodu çağırabilir ve bu yalnızca Inclusive Time’da görülebilir.
Traceview, metot adına, pakete veya sınıfa göre aramayı destekler. Sonuçlar zaman çizelgesinde vurgulanır ve Profil Paneli yalnızca bulunan metotlar için istatistikleri görüntüler. İpliklere göre filtreleme de mevcuttur — arka plan ipliklerini gizleyebilir ve gecikmelerin en kritik olduğu ana (UI) ipliğine odaklanabilirsiniz.
| Metrik | Açıklama | Birim |
|---|---|---|
| Inclusive Time | Metot + tüm alt çağrılarının toplam süresi | μs / ms |
| Exclusive Time | Alt çağrılar hariç yalnızca metot süresi | μs / ms |
| Calls + Recur | Özyineleme dahil çağrı sayısı | sayı |
| CPU Time | CPU’da gerçekten harcanan süre (bekleme hariç) | μs / ms |
| Real Time | Metot girişinden çıkışına kadar geçen gerçek süre | μs / ms |
Traceview, izleri CSV biçiminde dışa aktararak elektronik tablolarda veya grafiklerde daha fazla analiz yapılmasına olanak tanır. Android Studio’da, zaman çizelgesinin seçili bir bölümünü resim olarak kopyalayabilirsiniz — hata raporlarına veya belgelere eklemek için. CI/CD için cmdline-tools yardımcı programı aracılığıyla Perfetto biçiminde dışa aktarma mevcuttur.
Profil oluşturma Traceview aracılığıyla iki şekilde kullanılabilir: canlı yakalama ile Android Profiler aracılığıyla ve programatik Debug API çağrıları aracılığıyla. İlk yöntem geçici analiz için uygundur, ikincisi tekrarlanabilir performans testleri için.
Android Studio’da Profiler sekmesini (View → Tool Windows → Profiler) açın, cihazınızı ve uygulama işleminizi seçin. CPU bölümüne tıklayın, ardından “Trace Java Methods” modunu seçin ve Record’a tıklayın. Uygulama ile etkileşime girdikten sonra Stop’a tıklayın — Traceview kaydedilen izi otomatik olarak açacaktır. Varsayılan kayıt süresi 30 saniye ile sınırlıdır, ancak profilleyici ayarlarında sınır değiştirilebilir.
Belirli bir kod bölümünün hassas profilini çıkarmak için Debug.startMethodTracing ve Debug.stopMethodTracing kullanın. Dosya, context.getExternalFilesDir(null) tarafından döndürülen yolda uygulamanın harici deposuna kaydedilir. Tamamlandıktan sonra .trace dosyasını Android Studio Device Explorer aracılığıyla bilgisayarınıza aktarın, ardından Android Studio’da File → Open ile açın.
Debug.startMethodTracing(
"heavy_computation",
Debug.TRACE_COUNT_ALLOCS
)
processLargeDataset()
Debug.stopMethodTracing()
Debug.startMethodTracing üç parametre alır: dosya adı (uzantısız), maksimum arabellek boyutu (varsayılan 8 MB) ve bayraklar. TRACE_COUNT_ALLOCS bayrağı, nesne ayırma sayımını ekler — bellek sızıntılarını bulmak için kullanışlıdır. Traceview, yerel kod profil oluşturma için uygun değildir — SimplePerf veya Perfetto kullanın. Uzun testler (30 saniyeden fazla) için arabelleği maxSize parametresi aracılığıyla 64–128 MB’a yükseltmeniz önerilir.
Traceview zaman çizelgesi iki panelden oluşur: renkli çağrı dikdörtgenleriyle üst Zaman Çizelgesi Paneli ve istatistik tablosuyla alt Profil Paneli. Zaman Çizelgesi Paneli, iplik yürütmesini soldan sağa gösterir; burada her dikdörtgen tek bir metot çağrısıdır. Dikdörtgen renkleri metot türüne göre kodlanmıştır: Android sistem çağrıları (yeşil), uygulama metotları (mavi), kitaplık çağrıları (turuncu).
Profil Panelinde her satır, Inclusive Time, Exclusive Time, Calls + Recur ve CPU Time için sütunları olan bir metottur. Tabloyu Inclusive Time’a göre (azalan) sıralayarak önce en çok toplam süreyi alan metotları görün. Inclusive Time’ı yüksek olan bir metotun Exclusive Time’ı düşükse — sorun alt çağrılarındadır ve ağacı genişletmeniz gerekir. Örneğin, ListView.getView görüntü yükleme çağrıları nedeniyle yüksek Inclusive Time’a sahip olabilir.
Anormal derecede yüksek Real Time ancak düşük CPU Time olan metotları arayın — bu engellemeyi (G/Ç beklemesi, ağ işlemi, kilit çekişmesi) gösterir. Yüksek CPU Time olan metotlar algoritma optimizasyonu gerektirir. UI ipliği için her metot 16 ms içinde tamamlanmalıdır — herhangi bir çağrı bu eşiği aşarsa uygulama bir kare düşürür ve kullanıcı takılma görür. Google önerilerine göre, UI ipliğindeki tüm çağrıların kare başına toplam süresi 8–10 ms’yi geçmemeli ve sistem işlemleri için bir pay bırakmalıdır.
Hem Traceview hem de Systrace Android izleme araçları olsa da, farklı görevleri çözer ve farklı profil oluşturma aşamalarında kullanılır. Temel fark, ayrıntı düzeyidir: Traceview Java/Kotlin metot düzeyinde çalışırken, Systrace sistem süreci düzeyinde (CPU, GPU, Binder, SurfaceFlinger) çalışır.
| Kriter | Traceview | Systrace |
|---|---|---|
| Düzey | Metotlar (Java/Kotlin) | Sistem süreçleri (CPU/GPU/IO) |
| Arayüz | Android Studio Profiler | Komut satırı + HTML raporu |
| Veri | Inclusive/Exclusive Time | CPU yükü, kare hızı |
| Süre | 30 saniyeye kadar (Profiler), sınırsız (API) | 60 saniyeye kadar |
| Yerel kod | Desteklenmez | Atrace işaretleriyle desteklenir |
Pratikte, her iki araç birbirini tamamlar: önce Systrace hangi sistem bileşeninin soruna neden olduğunu belirlemeye yardımcı olur (örneğin, sık GC veya Binder kilitleri), ardından Traceview uygulama içinde belirli bir metoda derinlemesine inmeyi sağlar. Android Studio’da her iki araç Android Profiler’da birleştirilmiştir — CPU Profiler otomatik olarak en uygun kayıt modunu seçer. Android 12+ cihazlarda Systrace ve Traceview Perfetto üzerinde çalışır ve tüm profil oluşturma türleri için birleşik bir veri biçimi sağlar.
Etkili profil oluşturma, yalnızca izlemeyi başlatmaktan daha fazlasını gerektirir — yakalama noktalarını doğru şekilde yerleştirmeniz ve sonuçları yorumlamanız gerekir. Aşağıda iki pratik örnek verilmiştir: RecyclerView yüklemesinin profilini çıkarma ve bir performans testinde iki algoritmayı karşılaştırma.
İlk örnek, liste kaydırma sırasında kritik yolun izlenmesidir. RecyclerView, görünür her öğe için onBindViewHolder’ı çağırır ve bu metot 16 ms’den uzun sürerse kaydırma kesintili hale gelir. onBindViewHolder etrafındaki izleme, içindeki hangi belirli işlemlerin zaman aldığını gösterecektir.
class MyAdapter : RecyclerView.Adapter<ViewHolder>() {
override fun onBindViewHolder(
holder: ViewHolder,
position: Int
) {
Debug.startMethodTracing("bind_card_$position")
holder.bind(items[position])
Debug.stopMethodTracing()
}
}
İkinci örnek, iki uygulamanın A/B hız testidir: Glide aracılığıyla görüntü yükleme ve manuel BitmapFactory. Bu iz, her iki stratejinin Inclusive Time’ının objektif olarak karşılaştırılmasına ve en uygun olanın seçilmesine olanak tanır. Her testi ısıtılmış bir cihazda (3–5 döngüden sonra) aynı koşullar altında (arka plan yükü, sıcaklık) çalıştırmak önemlidir.
fun compareImageLoadingStrategies() {
// Test A: Glide
Debug.startMethodTracing("glide_test")
loadWithGlide()
Debug.stopMethodTracing()
// Test B: BitmapFactory
Debug.startMethodTracing("bitmap_test")
loadWithBitmapFactory()
Debug.stopMethodTracing()
}
Çalıştırdıktan sonra Android Studio’da her iki .trace dosyasını açın ve Profil Panelinde Inclusive Time’ı karşılaştırın. Glide aynı görev için 3 kat daha az Inclusive Time gösteriyorsa — bu kitaplığı seçmek için objektif bir temeldir. Tony John’a (Glide geliştiricisi, 2023) göre kitaplık, önbellekleme ve bir iplik havuzu kullanarak tekrarlanan yüklemelerde %40’a kadar kazanç sağlar.
Sıkça Sorulan Sorular
Traceview, Android Profiler içindeki iz görselleştirme çekirdeğidir. Profiler, kaydı başlatmak ve durdurmak için ek kullanıcı arayüzü sağlarken Traceview, zaman çizelgesini ve metot istatistiklerini görüntülemeyi üstlenir. Her ikisi de aynı .trace veri biçimini kullanır.
Evet, Traceview hem öykünücüde hem de fiziksel Android cihazlarda çalışır. USB hata ayıklama etkinleştirilmiş olmalı ve uygulama hata ayıklanabilir modda derlenmelidir. Fiziksel cihazlardaki veriler daha doğrudur, çünkü öykünücü sanallaştırma nedeniyle zamanlamaları bozabilir.
Varsayılan maksimum boyut 8 MB’dır, ancak Debug.startMethodTracing’deki maxSize parametresi aracılığıyla 256 MB’a kadar artırılabilir. Uzun profil oluşturma oturumları için, iz boyutunda katı bir sınırı olmayan Perfetto’yu kullanın.
Traceview, Android Runtime (ART) düzeyinde çalışır ve yalnızca yönetilen Java ve Kotlin metotlarını görür. Yerel kodun (JNI aracılığıyla C/C++) profilini çıkarmak için, çekirdek düzeyinde sistem çağrılarını yakalayan SimplePerf veya FTrace ile Perfetto kullanın.
Android SDK’dan dmtracedump yardımcı programını kullanın (platform-tools klasörü). Bir zaman çizelgesi ve istatistik tablosu içeren HTML raporu oluşturur. Windows’ta: dmtracedump -h trace.trace > report.html. Bir alternatif, .trace biçimi içe aktarmayı destekleyen Perfetto UI’dır (ui.perfetto.dev).
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun