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

Commit 19d34947 authored by Kunduz Baryktabasova's avatar Kunduz Baryktabasova Committed by Android (Google) Code Review
Browse files

Merge "Copy BR when failed to copy the screenshot." into main

parents 8ea4421c 3a5b65ae
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line 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 {
cc_binary {
    name: "dumpstate",
    name: "dumpstate",
    defaults: ["dumpstate_defaults"],
    defaults: ["dumpstate_defaults"],
@@ -130,6 +136,7 @@ cc_binary {
    required: [
    required: [
        "atrace",
        "atrace",
        "bugreport_procdump",
        "bugreport_procdump",
        "default_screenshot",
        "dmabuf_dump",
        "dmabuf_dump",
        "ip",
        "ip",
        "iptables",
        "iptables",
+19 −6
Original line number Original line 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_DIR = "/data/system/shutdown-checkpoints/";
static const std::string SHUTDOWN_CHECKPOINTS_FILE_PREFIX = "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
// TODO: temporary variables and functions used during C++ refactoring


#define RETURN_IF_USER_DENIED_CONSENT()                                                        \
#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_,
    bool copy_succeeded = android::os::CopyFileToFd(ds.screenshot_path_,
                                                    ds.options_->screenshot_fd.get());
                                                    ds.options_->screenshot_fd.get());
    ds.options_->is_screenshot_copied = copy_succeeded;
    if (copy_succeeded) {
    if (copy_succeeded) {
        android::os::UnlinkAndLogOnError(ds.screenshot_path_);
        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();
    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
            // 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
            // timing out because it's possible the user got distracted. In this case the
            // bugreport is not shared but made available for manual retrieval.
            // 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;
            return status;
        }
        }
        if (status == Dumpstate::RunStatus::USER_CONSENT_TIMED_OUT) {
        if (status == Dumpstate::RunStatus::USER_CONSENT_TIMED_OUT) {
@@ -3729,12 +3738,16 @@ Dumpstate::RunStatus Dumpstate::CopyBugreportIfUserConsented(int32_t calling_uid
            if (options_->do_screenshot &&
            if (options_->do_screenshot &&
                options_->screenshot_fd.get() != -1 &&
                options_->screenshot_fd.get() != -1 &&
                !options_->is_screenshot_copied) {
                !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_->screenshot_fd.get());
                options_->is_screenshot_copied = copy_succeeded;
                if (is_screenshot_copied) {
                if (copy_succeeded) {
                    android::os::UnlinkAndLogOnError(screenshot_path_);
                    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;
        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() {
DurationReporter::~DurationReporter() {
    if (!title_.empty()) {
    if (!title_.empty()) {
        float elapsed = (float)(Nanotime() - started_) / NANOS_PER_SEC;
        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);
            MYLOGD("Duration of '%s': %.2fs\n", title_.c_str(), elapsed);
        }
        }
        if (!logcat_only_) {
        if (!logcat_only_) {
+185 B
Loading image diff...