2013-06-13 28 views
12

Tôi đang đo hiệu suất ứng dụng của mình bằng systrace trên Nexus 4 không bắt nguồn trên Android 4.2.2. Tôi nhìn thấy một vài điều trong các báo cáo không có ý nghĩa với tôi và tôi tự hỏi nếu chúng có thể là lỗi systrace hay nếu bất cứ ai có thể biết về bất kỳ nguyên nhân gốc rễ có thể có cho các triệu chứng này.Nguyên nhân của việc thực hiện đệ quy, thời gian hoán đổi bộ đệm egl dài

1- đệ quy lớn dưới performTraversals ở phần cuối của một chạy

Link to Report - Xin vui lòng xem các đường cong lớn ở phần cuối của thời gian (~ 18s). Sự hiểu biết của tôi là performTraversals ở cấp khung, nơi nó vẽ một khung giao diện người dùng. Vì vậy, nó không có ý nghĩa với tôi rằng có thể có các cuộc gọi đệ quy bên dưới nó. Cũng bởi vì tôi nhận được loại xếp chồng theo cấp số nhân này vào cuối thời gian chạy, tôi cho rằng đây thực sự chỉ là một lỗi trong systrace cho dữ liệu vào cuối chạy. Loại đệ quy này có thể xảy ra không? Nó có nghĩa là gì?

2- performTraversals đệ quy ở giữa chạy với đệm dài swap lần

Link to Report - hành vi Thú vị bắt đầu xung quanh mốc thứ hai 12. Khi tôi nhìn thấy một cái gì đó tương tự ở giữa một chạy nó làm cho tôi nghĩ rằng có lẽ tôi không nên viết này đi. Ngoài ra, tôi đã dành rất nhiều thời gian cố gắng tìm ra những gì có thể giải thích cho một ví dụ dài như vậy: elSwapBuffers/queueBuffer (ứng dụng của tôi không sử dụng OpenGL và chỉ sử dụng khung công tác trực tiếp) mà không có kết quả, khi một đồng nghiệp bảo tôi bỏ qua nó bởi vì các bộ đệm hoán đổi sẽ luôn luôn là tức thời. Có thể có nhiều hơn với nó? Có điều gì để điều tra ở đây không?

Trả lời

4

Trong báo cáo số 1, bộ đệm theo dõi cho CPU 0 được lấp đầy khoảng 5 giây trong (lưu ý sự vắng mặt của dữ liệu trong dòng "CPU 0"). Bạn sẽ bắt đầu thấy những thứ bắt đầu và không bao giờ kết thúc, bởi vì bản ghi cuối cùng không được ghi lại. Đó là lý do tại sao bạn nhận được các đốm màu "performTraversals (Không hoàn thành)" lớn.

Cùng câu chuyện trong báo cáo # 2 - chạy ra khoảng 10 giây trong

Bạn có thể tăng kích thước bộ đệm với cờ "-b", ví dụ. -b 8192 sẽ cung cấp cho bạn bộ đệm 8MB. Kích thước mặc định là 2MB.

+0

Hấp dẫn, cảm ơn! Trước đây tôi đã giả định rằng với android systrace đã làm đầy nội bộ một bộ đệm và sau đó xả nó một cách không đồng bộ vì nó gần như đầy. Nhưng tôi thu thập từ câu trả lời của bạn rằng đó là sai, và các bộ đệm chỉ điền vào và khi điều đó xảy ra nó có hiệu quả dừng truy tìm. Tôi thu thập cũng rằng đây là trên một cơ sở cho mỗi CPU, do đó, hoạt động trên cpu 1 có thể tiếp tục được truy tìm sau khi CPU 0 đã lấp đầy nếu cpu 1 đã có hoạt động ít hơn kể từ đầu của dấu vết. Điều này có đúng không? –

+0

Có. Mỗi lõi CPU có một bộ đệm riêng biệt để mã đăng nhập có thể ghi vào nó mà không cần phải sử dụng khóa hoặc ops nguyên tử. – fadden

Các vấn đề liên quan