diff --git a/display/Android.bp b/display/Android.bp index 4ca3636..c3b346b 100644 --- a/display/Android.bp +++ b/display/Android.bp @@ -8,3 +8,20 @@ sh_binary { vendor: true, sub_dir: "dump", } + +cc_binary { + name: "dump_display", + srcs: ["dump_display.cpp"], + cflags: [ + "-Wall", + "-Wextra", + "-Werror", + ], + shared_libs: [ + "libbase", + "libdump", + ], + vendor: true, + relative_install_path: "dump", +} + diff --git a/display/dump.mk b/display/dump.mk index a1519c3..2af14da 100644 --- a/display/dump.mk +++ b/display/dump.mk @@ -1,3 +1,4 @@ BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/display/sepolicy PRODUCT_PACKAGES_DEBUG += dump_display_userdebug.sh +PRODUCT_PACKAGES += dump_display diff --git a/display/dump_display.cpp b/display/dump_display.cpp new file mode 100644 index 0000000..d78a91a --- /dev/null +++ b/display/dump_display.cpp @@ -0,0 +1,29 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include + + +int main() { + setbuf(stdout, NULL); + dumpFileContent("DECON-0 counters /sys/class/drm/card0/device/decon0/counters", "/sys/class/drm/card0/device/decon0/counters"); + dumpFileContent("CRTC-0 event log", "/sys/kernel/debug/dri/0/crtc-0/event"); + runCommand("libdisplaycolor", "/vendor/bin/dumpsys displaycolor -v"); + dumpFileContent("Primary panel name", "/sys/devices/platform/exynos-drm/primary-panel/panel_name"); + dumpFileContent("Primary panel extra info", "/sys/devices/platform/exynos-drm/primary-panel/panel_extinfo"); + return 0; +} + diff --git a/display/sepolicy/dump_display.te b/display/sepolicy/dump_display.te new file mode 100644 index 0000000..b8fd1b8 --- /dev/null +++ b/display/sepolicy/dump_display.te @@ -0,0 +1,14 @@ +pixel_bugreport(dump_display) + +allow dump_display sysfs_display:file r_file_perms; +allow dump_display vendor_displaycolor_service:service_manager find; +binder_call(dump_display, hal_graphics_composer_default) +allow dump_display vendor_dumpsys:file execute_no_trans; +allow dump_display vendor_shell_exec:file execute_no_trans; + +userdebug_or_eng(` + allow dump_display vendor_dri_debugfs:dir r_dir_perms; + allow dump_display vendor_dri_debugfs:file r_file_perms; +') +vndbinder_use(dump_display) + diff --git a/display/sepolicy/file.te b/display/sepolicy/file.te index bc43f3a..e3f2382 100644 --- a/display/sepolicy/file.te +++ b/display/sepolicy/file.te @@ -1 +1,3 @@ type vendor_hwc_log_file, file_type, data_file_type; +type vendor_dri_debugfs, fs_type, debugfs_type; + diff --git a/display/sepolicy/file_contexts b/display/sepolicy/file_contexts index bd9bb34..66118d0 100644 --- a/display/sepolicy/file_contexts +++ b/display/sepolicy/file_contexts @@ -1,4 +1,5 @@ /vendor/bin/dump/dump_display_userdebug\.sh u:object_r:dump_display_userdebug_exec:s0 +/vendor/bin/dump/dump_display u:object_r:dump_display_exec:s0 /data/vendor/log/hwc(/.*)? u:object_r:vendor_hwc_log_file:s0 diff --git a/display/sepolicy/genfs_contexts b/display/sepolicy/genfs_contexts new file mode 100644 index 0000000..9eaf5fb --- /dev/null +++ b/display/sepolicy/genfs_contexts @@ -0,0 +1,3 @@ + +genfscon debugfs /dri/0/crtc- u:object_r:vendor_dri_debugfs:s0 + diff --git a/display/sepolicy/hal_graphics_composer_default.te b/display/sepolicy/hal_graphics_composer_default.te new file mode 100644 index 0000000..c644559 --- /dev/null +++ b/display/sepolicy/hal_graphics_composer_default.te @@ -0,0 +1,3 @@ +allow hal_graphics_composer_default dump_display:fifo_file { append write }; +allow hal_graphics_composer_default dump_display:fd use; + diff --git a/display/sepolicy/vndservice.te b/display/sepolicy/vndservice.te new file mode 100644 index 0000000..5c3693b --- /dev/null +++ b/display/sepolicy/vndservice.te @@ -0,0 +1,2 @@ +type vendor_displaycolor_service, vndservice_manager_type; + diff --git a/display/sepolicy/vndservice_contexts b/display/sepolicy/vndservice_contexts new file mode 100644 index 0000000..9276f97 --- /dev/null +++ b/display/sepolicy/vndservice_contexts @@ -0,0 +1,2 @@ +displaycolor u:object_r:vendor_displaycolor_service:s0 +