2013-05-24 3 views
11

내 응용 프로그램에서 다른 GPU 집중 화면을 프로파일 링하기 위해 자동화 된 프로파일 링 시스템을 작성 중입니다. 나는 gpu 사용 데이터를 캡처하는 'OpenGL ES 드라이버'도구를 사용하여 'XCode Instruments'를 사용하려고했습니다.Xcode Instruments .trace 파일을 읽으려고합니다. .trace 파일의 파일 형식은 무엇입니까?

내 자동화 시스템은 응용 프로그램을 실행하고 데이터를 캡처하고 데이터를 ".trace"파일에 기록하는 명령 줄에서 Xcode Instruments를 실행합니다.

이제 추적 파일을 열고 자동화 된 프로파일 링 시스템을 사용하여 추적 데이터를 읽을 수 있기를 원합니다.이를 통해 앱 개발자가 앱의 다양한 부분을 어떻게 수행하는지 알릴 수 있습니다.

그러나 추적 파일을 읽는 방법을 찾을 수는 없습니다. 그것은 다양한 디렉토리를 포함하는 패키지로 보이며, 바이너리 데이터가 포함 된 .zip 파일이 있습니다. 이 파일의 데이터는 어떻게 파싱됩니까?

계측기 시스템은 상당히 복잡해 보였습니다. 제작 한 추적 데이터에 액세스하는 것이 얼마나 힘든지 놀랐습니다.

누구든지 추적 파일을 구문 분석하는 방법을 알고 있습니까?

나는 현재 당신은 스크립트를 직접 추적 파일을 분석 할 수 없습니다 엑스 코드 4.6.1

+0

예제 추적 파일을 업로드 할 수 있습니까? – JustSid

+0

예제 추적 파일을 여기에 넣었습니다. 감사합니다. [link] (https://dl.dropboxusercontent.com/u/28978817/Instruments.trace.zip) – georgeparrish

+0

감사합니다. 오늘 저녁에 살펴 봅니다. , 리버스 엔지니어 기술은 제한적입니다.) – JustSid

답변

14

좋아요. 주된 질문에 답하기 위해서 : .zip 아카이브의 데이터는 NSArchiver 클래스로 직렬화 된 데이터 블럭입니다 (16 진수 도구로 열었을 때 상당히 다른 헤더가 있습니다. 악마), 그래서 첫 번째 단서). 읽기가 상당히 간단합니다. 적어도 NSUnarchiver을 호출하면됩니다. https://github.com/JustSid/Traced

그래서

, NSArchiver의 문제, 그리고 NSUnarchiver, 당신이 우선이었다 모든 클래스를 가질 필요가있다 : 나는 자세히에 가기 전에, 여기에 몇 가지 정보를 정기적으로 덤프하는 매우 간단한 예제 응용 프로그램입니다 두 번째로 아카이브의 순서대로 데이터를 읽어야한다는 것입니다 (까다로운 문제 였기 때문에 몇 가지 필수 클래스에 대한 인터페이스를 덤프하기 위해 class-dump을 사용한 다음 데이터 개체를 보관 취소하려고했습니다). 다행히도 NSArchiver은 설명적인 오류 메시지와 함께 죽고, 누락 된 클래스가 있으면 그 이름이 무엇인지 알려줄 것입니다. 내가 가진 가장 큰 문제는 Instruments 바이너리와 사용 된 프레임 워크에 내가 필요한 모든 클래스가 포함되어 있지 않다는 것입니다. 특히, 보관 파일에는 XRVideoCardRun이라는 클래스의 직렬화 된 데이터가 포함되어 있습니다. 나는 .template.trace 번들 안에있는 파일에 필요한 클래스가있는 동적 라이브러리를 포함하고 있다고 가정합니다 (크기가 300kb 이상이고 blob이 많이 포함되어 있습니다). 나는 바이너리 데이터를 추출해 내고 class-dump을 실행하기에는 너무 게을 렀고, 아카이브에서 나온 대부분의 데이터는 수퍼 클래스에서 볼 수있는 것과 일치했다. XRRun (인스 트루먼 트 프레임 워크 중 하나에서 찾았습니다.) 사전을 포함하는 배열을 제외하고 내용은 샘플 데이터처럼 보입니다.

나머지는 모든 것을 결합한 것입니다. 샘플 앱을 살펴보면 가장 흥미로운 부분은 XRRun.m.h 파일이어야합니다.여기에는 약간의 문서와 샘플에서 데이터를 추출하는 방법에 대한 설명이 포함되어 있습니다. 그러나이를 자동화를 위해 자신의 논리로 대체하고 싶을 수도 있습니다. 희망이 도움이됩니다.

응용

는 샘플 파일 출력 전년도 발생이 :

Run 1, starting at 24.05.13 17:42:16, running until 24.05.13 17:42:28 
Sample 0: FPS: 27 Device: 0% Renderer: 0% Tiler: 0% Timestamp: 1.012740 
Sample 1: FPS: 35 Device: 11% Renderer: 10% Tiler: 2% Timestamp: 2.018574 
Sample 2: FPS: 34 Device: 33% Renderer: 32% Tiler: 7% Timestamp: 3.026101 
Sample 3: FPS: 59 Device: 59% Renderer: 59% Tiler: 16% Timestamp: 4.032030 
Sample 4: FPS: 60 Device: 59% Renderer: 58% Tiler: 16% Timestamp: 5.038990 
Sample 5: FPS: 59 Device: 59% Renderer: 58% Tiler: 16% Timestamp: 6.046022 
Sample 6: FPS: 59 Device: 57% Renderer: 53% Tiler: 17% Timestamp: 7.051187 
Sample 7: FPS: 60 Device: 67% Renderer: 66% Tiler: 14% Timestamp: 8.057343 
Sample 8: FPS: 59 Device: 64% Renderer: 64% Tiler: 11% Timestamp: 9.064914 
Sample 9: FPS: 60 Device: 67% Renderer: 67% Tiler: 11% Timestamp: 10.072592 
Sample 10: FPS: 59 Device: 65% Renderer: 65% Tiler: 15% Timestamp: 11.080248 

(PS : 형식이 변경되면 응용 프로그램이 ...뿐만 아니라 휴식합니다)

+0

굉장한 작업 Sid :) 데이터 디코딩에 대해 설명하는 프로세스를 시도해보고 형식 변경이있을 경우 다시 수행 할 수 있습니다. 또한 OpenGLES Driver Instrument에서 더 나은 추적 데이터 내보내기 옵션을 요구하기 위해 Apple과 기능 요청을 제기 할 것입니다. 다시 한 번 감사드립니다, George – georgeparrish

+0

@georgeparrish 환영합니다! 질문이 있으시면 언제든지 물어보십시오! (그런데이 질문에 답한 경우 옆에있는 회색 체크 표시를 클릭하여 정답으로 받아 들일 수 있습니다) – JustSid

+0

CPU 또는 메모리 프로파일 링을위한 인터페이스는 무엇입니까? XRVideoCardRun은 어디에서 찾았습니까? – Krzysiek

-1

를 사용하고 있지만,이 스크립트에 의해 분석 또는 Excel에 투입 할 수있는 CSV 파일로 내보낼 수 있습니다 , Numbers 등을 포함 할 수 있습니다. 자동화 된 테스트를 수행하는 방법에 따라 CSV로 내보내기를 추가 할 수도 있습니다.

+1

-1 질문은 데이터를 직접 파싱하는 방법입니다. – JustSid

+0

계측기를 사용하여 트레이스보기를보고 싶지 않습니다. 나는 자동으로 데이터를 처리 할 수 ​​있도록 프로그래밍 방식으로 파일을 읽을 수 있어야합니다 (예 : 셸 스크립트 사용). 의도는 내 자동화 된 프로필 시스템이 프로필 데이터 결과를 위키에 게시하여 다른 개발자가 앱이 느리게 실행될 때 한눈에 결과를 볼 수 있도록하는 것입니다. – georgeparrish

+0

프로그래밍 방식으로 구문 분석하는 유일한 방법은이를 수행하는 사용자 지정 스크립트를 작성하는 것입니다. 매우 복잡한 프로세스입니다. 이 작업을 수행하는 다른 방법을 찾아 주실 것을 적극 권장합니다. – charleyh

0

.trace입니다 실제로 폴더이며, .trace/instruments_data /에있는 zip 1.run.zip이 있으며 일부 폴더 뒤에는 zip 파일이 있습니다. 압축을 풀면 1.run을 얻게됩니다. 그걸 어떻게 해독할지 모르겠다. 가장 좋은 방법은 - instruments .trace를 호출하는 것입니다. 이것은 세부 사항이있는 악기에서 열립니다.

1

Instruments와 함께 제공되는 문서화되지 않은 프레임 워크를 사용하여 .trace 문서를 구문 분석하려고합니다. 이제는 Time Profiler와 함께 작업 중이며 좀 더 리버스 엔지니어링 작업을 통해 다른 인스트루먼트 템플릿과도 작업하는 것이 어렵지 않습니다.

/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks에서 볼 수 있듯이 Instruments와 번들 된 프레임 워크가 상당수 있습니다.

그러나 우리는이 두 가지에 연결해야합니다

  • DVTInstrumentsFoundation.framework
  • InstrumentsPlugIn.framework

당신이 시작하기 전에 알아야 할 또 다른 점은 악기 템플릿이 실제로 /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns에 플러그인되어있다.

예를 들어 SamplerPlugin.xrplugin은 Time Profiler 용입니다.

코드가 짧고 주석 처리되었습니다. https://github.com/Qusic/TraceUtility