Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a5b65ae authored by Kunduz Baryktabasova's avatar Kunduz Baryktabasova
Browse files

Copy BR when failed to copy the screenshot.

Flag: EXEMPT minor bugfix
Test: manual test
Bug: 367591117
Bug: 367349763
Change-Id: Ia9a4be2ebf2c8ffb0265baef14ac5616f8b06446
parent 7aa34f05
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -118,6 +118,12 @@ cc_defaults {
    ],
}

prebuilt_etc {
    name: "default_screenshot",
    src: "res/default_screenshot.png",
    filename_from_src: true,
}

cc_binary {
    name: "dumpstate",
    defaults: ["dumpstate_defaults"],
@@ -130,6 +136,7 @@ cc_binary {
    required: [
        "atrace",
        "bugreport_procdump",
        "default_screenshot",
        "dmabuf_dump",
        "ip",
        "iptables",
+19 −6
Original line number Diff line number Diff line
@@ -206,6 +206,9 @@ static const std::string ANR_TRACE_FILE_PREFIX = "trace_";
static const std::string SHUTDOWN_CHECKPOINTS_DIR = "/data/system/shutdown-checkpoints/";
static const std::string SHUTDOWN_CHECKPOINTS_FILE_PREFIX = "checkpoints-";

// File path to default screenshot image, that used when failed to capture the real screenshot.
static const std::string DEFAULT_SCREENSHOT_PATH = "/system/etc/default_screenshot.png";

// TODO: temporary variables and functions used during C++ refactoring

#define RETURN_IF_USER_DENIED_CONSENT()                                                        \
@@ -765,10 +768,14 @@ android::binder::Status Dumpstate::ConsentCallback::onReportApproved() {

    bool copy_succeeded = android::os::CopyFileToFd(ds.screenshot_path_,
                                                    ds.options_->screenshot_fd.get());
    ds.options_->is_screenshot_copied = copy_succeeded;
    if (copy_succeeded) {
        android::os::UnlinkAndLogOnError(ds.screenshot_path_);
    } else {
        MYLOGE("Failed to copy screenshot to a permanent file.\n");
        copy_succeeded = android::os::CopyFileToFd(DEFAULT_SCREENSHOT_PATH,
                                                           ds.options_->screenshot_fd.get());
    }
    ds.options_->is_screenshot_copied = copy_succeeded;
    return android::binder::Status::ok();
}

@@ -3442,7 +3449,9 @@ Dumpstate::RunStatus Dumpstate::RunInternal(int32_t calling_uid,
            // Do an early return if there were errors. We make an exception for consent
            // timing out because it's possible the user got distracted. In this case the
            // bugreport is not shared but made available for manual retrieval.
            MYLOGI("User denied consent. Returning\n");
            MYLOGI("Bug report generation failed, this could have been due to"
                   " several reasons such as BR copy failed, user consent was"
                   " not grated etc. Returning\n");
            return status;
        }
        if (status == Dumpstate::RunStatus::USER_CONSENT_TIMED_OUT) {
@@ -3729,12 +3738,16 @@ Dumpstate::RunStatus Dumpstate::CopyBugreportIfUserConsented(int32_t calling_uid
            if (options_->do_screenshot &&
                options_->screenshot_fd.get() != -1 &&
                !options_->is_screenshot_copied) {
                copy_succeeded = android::os::CopyFileToFd(screenshot_path_,
                bool is_screenshot_copied = android::os::CopyFileToFd(screenshot_path_,
                                                           options_->screenshot_fd.get());
                options_->is_screenshot_copied = copy_succeeded;
                if (copy_succeeded) {
                if (is_screenshot_copied) {
                    android::os::UnlinkAndLogOnError(screenshot_path_);
                } else {
                    MYLOGE("Failed to copy screenshot to a permanent file.\n");
                    is_screenshot_copied = android::os::CopyFileToFd(DEFAULT_SCREENSHOT_PATH,
                                                           options_->screenshot_fd.get());
                }
                options_->is_screenshot_copied = is_screenshot_copied;
            }
        }
        return copy_succeeded ? Dumpstate::RunStatus::OK : Dumpstate::RunStatus::ERROR;
@@ -3825,7 +3838,7 @@ DurationReporter::DurationReporter(const std::string& title, bool logcat_only, b
DurationReporter::~DurationReporter() {
    if (!title_.empty()) {
        float elapsed = (float)(Nanotime() - started_) / NANOS_PER_SEC;
        if (elapsed >= .5f || verbose_) {
        if (elapsed >= 1.0f || verbose_) {
            MYLOGD("Duration of '%s': %.2fs\n", title_.c_str(), elapsed);
        }
        if (!logcat_only_) {
+185 B
Loading image diff...