2012-06-27 24 views
7

OpenGL aracılığıyla nesneler oluşturuyorum ve çoğu durumda 60 fps'lik güzel ve yumuşak bir kare hızı elde ediyorum. UNTIL Arka plan iş parçacığında, bir REST API'sından malzeme alma, işleme ve grafiğe nesne ekleme gibi düşük bir öncelikli iş yapıyorum (düşük öncelikli şeyler, UI akışkanlığı hakkında daha çok ilgileniyorum). Oluşturucu daha sonra 1 saniyeliğine çok uzun bir süre duraklar (arka plan iş parçacığı çalıştığında ca.) ve sonra hiçbir şey olmamış gibi devam eder. Bunu fark ettim çünkü bir animasyon aynı anda başladı ve bu süre boyunca sıkışıp kalıyor. Arka plan iş parçacığı minimum önceliğe ayarlanır ve çöp toplama işlemi 100-200 ms'ye kadar sürer, ancak tüm saniye değil. Arka plan görevinin herhangi bir yerinde bir hata ayıklama noktası belirlediğimde, oluşturma işlemi herhangi bir gecikme olmaksızın iyi çalışır.Android: OpenGL oluşturma işlemi ağır arka plan görevi çalıştırıldığında duraklar

Ağır arka plan iş parçacığım OpenGL iş parçacığını açıyor mu? Eğer öyleyse, ne yapabilirim?

+0

Hangi GPU üzerinde test yapıyorsunuz? –

+0

Şüpheli bir şekilde [bu performans izleme] gibi görünüyor (http://stackoverflow.com/q/9612959/1262542) ... –

+0

Dunno, GPU, bu bir Galaxy Nexus. Eve döndüğümde simülatörde test edeceğim. – manmal

cevap

1

Tabii ki! Bir GPU'nun veri beslemesi gerekiyor ve bu işlem CPU tarafından gerçekleştiriliyor. Yani, sistemde bir sorun varsa, G/Ç veya CPU işleme gibi, GPU beslenemiyor. Örneğin, animasyon geleneksel olarak CPU'da yapılır. Bu yüzden PC'de aynı grafik yongaları ile daha yüksek kare hızları elde eden çok sayıda oyun elde edersiniz.

Ayrıca profillemenin çok iyi bir fikir olduğuna katılıyorum. Yapabilirseniz, aslında REST çağrısı olduğundan emin olmak için profilleme önerebilirim veya REST çağrısı

REST işlemesiyle ilgili fark ettiğim bir şeydi ve bu bana oldu. REST bazen bir çok dizeyi işlediğinden ve StringBuilder'ı kullanmazsanız, çok fazla çöp toplama işlemi gerçekleştirebilirsiniz. Ancak, bunu aldığınıza benzemiyor.

+1

Peki, neden zamanlayıcının GPU borusunu beslemeden önce bir arka plan ipliği koymasına izin verilmelidir? Bu bir anlam ifade etmiyor. Öyleyse, Google’ın mühendisleri neden bu konuya daha fazla öncelik vermediler? – manmal

+0

Bazen Java'yı serbest bırakmak zorunda olan, özellikle bir REST çağrısı durumunda, –

+1

bir dizi dize işleme eğilimi olan, daha önce bahsetmiştim çünkü çöp toplama burada sorun olamaz, çünkü GC duraklamaları hemen hemen aynı değildir. uzun. 1.5 saniyede değil, maksimum 100-200 ms gibi. – manmal

İlgili konular