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

Commit d9ac3741 authored by Fyodor Kupolov's avatar Fyodor Kupolov
Browse files

Provide remote stack trace information

The stack is truncated up to 5 lines at parcel time. When unparceling,
a separate RemoteException will be created and set as a cause of the
exception being thrown.

Performance results(in nanoseconds):
timeWriteExceptionWithStackTraceParceling  82175
timeWriteException                          6616
timeReadException                          22529
timeReadExceptionWithStackTraceParceling   34151

Test: manual + ParcelPerfTest
Bug: 36561158
Change-Id: I9c0a54a86cd82cff92d8e1a15ec19dfed58ef856
parent 4d55997a
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -102,6 +102,15 @@ status_t Status::readFromParcel(const Parcel& parcel) {
    }
    mMessage = String8(message);

    // Skip over the remote stack trace data
    int32_t remote_stack_trace_header_size;
    status = parcel.readInt32(&remote_stack_trace_header_size);
    if (status != OK) {
        setFromStatusT(status);
        return status;
    }
    parcel.setDataPosition(parcel.dataPosition() + remote_stack_trace_header_size);

    if (mException == EX_SERVICE_SPECIFIC) {
        status = parcel.readInt32(&mErrorCode);
    } else if (mException == EX_PARCELABLE) {
@@ -137,6 +146,7 @@ status_t Status::writeToParcel(Parcel* parcel) const {
        return status;
    }
    status = parcel->writeString16(String16(mMessage));
    status = parcel->writeInt32(0); // Empty remote stack trace header
    if (mException == EX_SERVICE_SPECIFIC) {
        status = parcel->writeInt32(mErrorCode);
    } else if (mException == EX_PARCELABLE) {