SurfaceFlinger

Các kết xuất SurfaceFlinger cung cấp ảnh chụp nhanh về SurfaceFlinger tại một thời điểm cụ thể. Các dấu vết SurfaceFlinger có một chuỗi trạng thái theo trình tự thời gian, cung cấp thông tin chi tiết có giá trị về cách một cửa sổ xuất hiện trên màn hình và xác định cửa sổ nào nhận được phản hồi chạm ở các vị trí cụ thể. Thông tin này rất cần thiết để khắc phục các vấn đề như ứng dụng không phản hồi thao tác chạm của tôi hoặc tôi gặp hiện tượng nhấp nháy khi xem video.

Trình xem SurfaceFlinger của Winscope hiển thị thông tin này cho các dấu vết được thu thập bằng chế độ đang hoạt động hoặc được tạo từ dấu vết giao dịch khi lấy báo cáo lỗi (theo mặc định, cấu hình Droidfood), cũng như cho các kết xuất.

Hãy xem phần SurfaceFlinger (các lớp) để biết thêm thông tin về hoạt động thu thập dấu vết.

Phân tích dấu vết SurfaceFlinger

Hình 1. Phân tích dấu vết SurfaceFlinger.

Ở bên trái màn hình, bạn sẽ thấy chế độ xem 3D của các lớp. Khung hiển thị rects xem xét ranh giới lớp, thứ tự z, độ mờ, Z tương đối và các góc bo tròn.

Khối phân cấp

Phân đoạn trung tâm của thẻ này cho thấy hệ phân cấp lớp với các khối để biết thêm thông tin, chẳng hạn như mối quan hệ mẹ-con giữa các lớp, như sau:

  • V: Xác định các lớp hiển thị.
  • RelZParent: Xác định các lớp có đối tượng con RelZ.
  • RelZ: Xác định các lớp có RelZParent và được vẽ theo thứ tự z dưới dạng hệ phân cấp của chúng.
  • HWC: Xác định các lớp do Trình kết hợp phần cứng tạo thành.
  • GPU: Xác định các lớp do GPU tạo thành.

Phía bên phải màn hình có một danh sách gồm các thuộc tính được tuyển chọn, cũng như một proto dump của tất cả các thuộc tính lớp có sẵn. Để biết thêm thông tin về các tính năng của phần kết xuất proto, hãy xem Thuộc tính.

Cơ sở lưu trú được tuyển chọn

Để gỡ lỗi dễ dàng hơn, trình xem SurfaceFlinger cung cấp một danh sách các thuộc tính được tuyển chọn, trình bày thông tin thường dùng nhất ở định dạng có tổ chức hơn:

Thuộc tính SurfaceFlinger

Hình 2. Thuộc tính SurfaceFlinger.

Danh sách này bao gồm các danh mục sau.

Chế độ hiển thị

Khối này chứa thông tin về khả năng hiển thị của lớp và lời giải thích về lý do lớp không hiển thị. Thư mục này bao gồm:

Cờ: Các cờ này kiểm soát chế độ hiển thị, ví dụ: HIDDENOPAQUE.

Lý do không hiển thị: Giải thích lý do lớp hoặc nền không hiển thị trên màn hình (nếu có), ví dụ: bị chính lớp hoặc nền đó hoặc lớp/nền mẹ ẩn, hoặc không có vùng đệm để vẽ.

Bị che khuất, Bị che khuất một phần hoặc Bị che phủ:

  • Bị che khuất: Lớp hiện tại được tính là hiển thị, nhưng một lớp mờ khác được vẽ lên trên lớp đó, khiến lớp hiện tại không hiển thị. Lớp phía trên lớp Occluded là lớp mờ, tức là cờ OPAQUE được đặt hoặc định dạng pixel không chứa alpha hoặc không có alpha nào được đặt trên lớp.
  • Bị che khuất một phần: Lớp hiện tại chỉ hiển thị một phần vì lớp mờ được vẽ trên lớp đó không che phủ hoàn toàn lớp hiện tại. Lớp ở trên lớp Bị che một phần là lớp mờ, tức là cờ OPAQUE được đặt hoặc định dạng pixel không chứa alpha hoặc không có alpha nào được đặt trên lớp.
  • Bị che: Lớp hiện tại bị che, toàn bộ hoặc một phần, bởi một lớp không trong suốt và vẫn có thể xuất hiện trên màn hình. Lớp phía trên lớp Covered không trong suốt, tức là cờ OPAQUE không được đặt hoặc định dạng pixel chứa alpha hoặc alpha được đặt trên lớp. Tuy nhiên, đối với các dấu vết SurfaceFlinger, một lớp Covered sẽ xuất hiện dưới dạng có thể nhìn thấy, đối với các lớp bên dưới SurfaceFlinger:

    Lớp phủ trên SurfaceFlinger

    Hình 3. Lớp phủ trên SurfaceFlinger.

Hình học và hiệu ứng

Phần này mô tả hình học và hiệu ứng được yêu cầu và được tính toán cho lớp hiện tại.

Phần Đã yêu cầu cho biết các thuộc tính đang được đặt trên lớp. Ngược lại, phần Đã tính toán sẽ hiển thị các thuộc tính đang được áp dụng cho lớp. Sự khác biệt này là do hình học và hiệu ứng được truyền xuống hệ thống phân cấp và kế thừa từ các phần tử mẹ.

Trong Hình 2, lớp yêu cầu đặt Corner Radius (Bán kính góc) thành 0 px. Tuy nhiên, một trong các lớp mẹ của lớp này đặt Bán kính góc thành 97,419 px, đây là giá trị được áp dụng:

Vùng đệm

Các thuộc tính sau đây hiển thị thông tin về việc lớp có vùng đệm hay không, kích thước và phép biến đổi của vùng đệm.

  • Số khung hình: Số gia tăng bắt đầu khi một ứng dụng được tạo.
  • Khung đích: Dùng để điều chỉnh tỷ lệ vùng đệm theo các ranh giới do khung đích xác định.

Hệ phân cấp

Các thuộc tính sau đây mô tả cách xác định hệ phân cấp của các lớp:

  • z-order: Trong hệ thống phân cấp các lớp, thứ tự z xác định vị trí tương đối của một lớp so với các lớp cùng cấp. Một lớp có giá trị z là 0 sẽ nằm phía trên lớp mẹ. Nếu nhiều lớp có cùng giá trị z, thì lớp có mã lớp cao hơn sẽ được đặt ở trên cùng.
  • relative parent: Cho biết lớp gốc tương đối theo thứ tự z. Trẻ không kế thừa bất kỳ thuộc tính nào từ cha mẹ tương đối của mình, ngoại trừ cờ ẩn.

Đầu vào

Các thuộc tính sau chứa thông tin về vùng có thể chạm và tiêu điểm:

  • Cắt vùng chạm bằng mục: Sử dụng ranh giới lớp để cắt vùng có thể chạm.
  • Thay thế vùng chạm bằng phần cắt: Sử dụng phần cắt của các lớp hiện tại làm vùng có thể chạm.