1

5 초마다 실행되는 앱 내에서 프로파일 링 기능을 사용 중입니다. 그러나 트레이스 뷰의 "Calls + Rec/Total"옵션에서 절반 만 호출합니다. 샘플링 간격으로 1 마이크로 초로 샘플 기반 프로파일 링을 사용하고 있습니다. 이 샘플링 속도로 연주하려고했지만 눈에 띄는 개선은 없었습니다. 예를 들어,보기를 236 초 동안 실행하면 "Call + Rec/Total"옵션에서 47 건의 전화를 받아야하지만 아래 그림과 같이 20 건 밖에 표시되지 않습니다. 누구든지 내가 뭘 잘못하고 있다고 말할 수 있니?Android Traceview (샘플링 기반 추적)에 실제 함수 호출 수가 반영되지 않았습니다.

Tested devices: 
Device 1: SmartWatch LG R (Android 6.0.1), observes this problem 
Device 2: Samsung Galaxy S2 (Android 5.0.1 Custom ROM), observes this problem 
Device 3: Samsung Galaxy S2 (Android 4.4, Custom ROM), works fine 

enter image description here

UPDATE : 나는 @kws 내 논의를 기반으로 (원래 안드로이드 5.1.1와) 두 번째 삼성에 안드로이드 4.4.4을 설치하고 현재 샘플링 기반 방법은 그것으로 잘 작동합니다. 그러나 Android 6.0.1이 적용된 smartwatch는 여전히 추적 뷰를 사용하여 이전 방식대로 작동합니다.

업데이트 2 : 나는 샘플링 기반의 방법은 이러한 기능이 두 샘플 사이에 실행하고이 프로파일에서 누락 될 수있을 수 있기 때문에 매우 가볍고 기능을 캡처 해상도가 없습니다 생각합니다. 샘플링 간격으로 마이크로 초 단위로 데이터를 기록하지만, 세부적인 세부 수준까지 도달 할 수 있을지는 의문입니다. 이 주장에 대한 추론은 매우 가벼운 함수를 테스트했을 때 모든 호출이 세 장치 모두에서 잡힌 것이 아니라는 것입니다.

+0

각 메소드 호출을 기록 했습니까? 실제 메소드 호출의 수는 얼마입니까? – kws

+0

프로필러가 각 메서드 호출을 기록 할 것으로 예상합니다. 이 경우 실제 메소드 호출 수는 47입니다.나는 여러 번 실험을 반복했지만 같은 결과를 나는 이유를 모른다. 샘플링 간격은 1 마이크로 초 정도로 매우 낮으므로 모든 메소드 호출을 캡처해야합니다. 또한, 그것은 다른 안드로이드 버전과 다른 장치에서 다르게 동작합니다. – utengr

+0

여기에 뿌리 상태가 어떤 역할을하는지 확실하지 않습니다. – utengr

답변

1

나는 몇 가지 테스트를 수행했으며 여기 (Kitkat 및 Marshmallow에서 실행)와 동일한 동작을 발견했습니다. 샘플 기반 프로파일 링을 사용하고 샘플링 속도를 너무 낮게 설정하면 부정확 한 결과가 나타나는 것으로 보입니다. 샘플링 속도를 높이면보다 정확한 결과를 얻을 수 있습니다. 반면에 추적 기반 프로파일 링을 사용하면 결과가 정확합니다.

프로필러는 샘플 결과를 반환하고 실제 결과는 반환하지 않으므로 이러한 샘플 기반 프로파일 링 결과를 사용할 수 있다고 생각합니다. 1μs 샘플링 간격의 경우, 성공적인 실행은 디바이스에 달려 있다고 생각합니다. 어쩌면 고급형 장치가 더 나은 결과를 낼 수 있습니다.

중요한 점은 docs에 따르면 절대 타이밍을 생성하는 데 프로파일 링을 사용하지 말고 코드 최적화 결과를 확인하는 것입니다.

프로파일 링을 사용하면 해석되는 코드의 실행 속도가 느려집니다. 을 사용하여 프로파일 러 결과에서 절대 타이밍을 생성하지 마십시오 (예 :"함수 X는 2.5 초 소요됨"). 이 시간은 다른 프로필 출력과의 관계에서만 유용하므로 코드가 이전 프로파일 링 실행에 비해 더 빠르거나 느리게 변경되었는지 확인할 수 있습니다.

더 정확한 결과를 원한다면

편집 당신은 추적 기반의 프로파일 링을 위해 이동 중 하나가하거나 더 정확한 Debug 클래스를 사용해야합니다. 후자를 사용하면 코드에서 추적 데이터 로깅을 시작하고 중지 할 위치를 정확히 지정할 수 있습니다. 더 많은 정보 here.

+0

당신은이 값들이 단지 하나의 징후에 불과하다는 것이 옳습니다. 제 생각에, 샘플링 기반의 방법은 약간 일관성이없는 반면 결과에 따라 다양한 장치에 대해 일관성을 유지해야하기 때문에 추적 기반 방법을 사용할 것입니다. 다른 사람이 다른 설명을 내놓는 지 보도록하겠습니다. – utengr

+0

1 마이크로 초에서 1000 마이크로 초까지 샘플링 속도가 증가함에 따라 정확도가 증가한다는 것도 맞습니다. 그러나 1000 마이크로 초 이상으로 늘리면 내려갑니다. 최적의 가치와 같습니다. 필자는 샘플링 간격보다 적은 실행 시간으로 함수를 포착하지 않을까 두렵다. – utengr

+0

수정 된 답변을 확인하십시오. – kws