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

Commit 3d3fa52c authored by Atif Niyaz's avatar Atif Niyaz
Browse files

Move LatencyStatistics collection from InputReader to InputTransport



This move allows us to grab a bigger context of how much time a motion
event is spent from the kernel to right before the event was published.

Test: Modified LatencyStats to report ever 10 seconds. Utilized logs to
check that logs were reporting every 10 seconds. Checked also using
logs that data was being added and calculated correctly.

Change-Id: Iee0f9a2155e93ae77de5a5cd8b9fd1506186c60f
Signed-off-by: default avatarAtif Niyaz <atifniyaz@google.com>
parent 8384682f
Loading
Loading
Loading
Loading
+10 −2
Original line number Original line Diff line number Diff line
@@ -31,13 +31,16 @@


#include <string>
#include <string>


#include <android-base/chrono_utils.h>

#include <binder/IBinder.h>
#include <binder/IBinder.h>
#include <input/Input.h>
#include <input/Input.h>
#include <input/LatencyStatistics.h>
#include <utils/BitSet.h>
#include <utils/Errors.h>
#include <utils/Errors.h>
#include <utils/Timers.h>
#include <utils/RefBase.h>
#include <utils/RefBase.h>
#include <utils/Timers.h>
#include <utils/Vector.h>
#include <utils/Vector.h>
#include <utils/BitSet.h>


namespace android {
namespace android {
class Parcel;
class Parcel;
@@ -286,7 +289,12 @@ public:
    status_t receiveFinishedSignal(uint32_t* outSeq, bool* outHandled);
    status_t receiveFinishedSignal(uint32_t* outSeq, bool* outHandled);


private:
private:
    static constexpr std::chrono::duration TOUCH_STATS_REPORT_PERIOD = 5min;

    sp<InputChannel> mChannel;
    sp<InputChannel> mChannel;
    LatencyStatistics mTouchStatistics{TOUCH_STATS_REPORT_PERIOD};

    void reportTouchEventForStatistics(nsecs_t evdevTime);
};
};


/*
/*
+2 −1
Original line number Original line Diff line number Diff line
@@ -56,7 +56,8 @@ cc_library {
            shared_libs: [
            shared_libs: [
                "libutils",
                "libutils",
                "libbinder",
                "libbinder",
                "libui"
                "libui",
                "libstatslog",
            ],
            ],


            sanitize: {
            sanitize: {
+16 −0
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@
#include <utils/Trace.h>
#include <utils/Trace.h>


#include <input/InputTransport.h>
#include <input/InputTransport.h>
#include <statslog.h>


using android::base::StringPrintf;
using android::base::StringPrintf;


@@ -531,6 +532,10 @@ status_t InputPublisher::publishMotionEvent(
        msg.body.motion.pointers[i].properties.copyFrom(pointerProperties[i]);
        msg.body.motion.pointers[i].properties.copyFrom(pointerProperties[i]);
        msg.body.motion.pointers[i].coords.copyFrom(pointerCoords[i]);
        msg.body.motion.pointers[i].coords.copyFrom(pointerCoords[i]);
    }
    }

    if (source == AINPUT_SOURCE_TOUCHSCREEN) {
        reportTouchEventForStatistics(eventTime);
    }
    return mChannel->sendMessage(&msg);
    return mChannel->sendMessage(&msg);
}
}


@@ -557,6 +562,17 @@ status_t InputPublisher::receiveFinishedSignal(uint32_t* outSeq, bool* outHandle
    return OK;
    return OK;
}
}


void InputPublisher::reportTouchEventForStatistics(nsecs_t evdevTime) {
    if (mTouchStatistics.shouldReport()) {
        android::util::stats_write(android::util::TOUCH_EVENT_REPORTED, mTouchStatistics.getMin(),
                                   mTouchStatistics.getMax(), mTouchStatistics.getMean(),
                                   mTouchStatistics.getStDev(), mTouchStatistics.getCount());
        mTouchStatistics.reset();
    }
    nsecs_t latency = nanoseconds_to_microseconds(systemTime(CLOCK_MONOTONIC) - evdevTime);
    mTouchStatistics.addValue(latency);
}

// --- InputConsumer ---
// --- InputConsumer ---


InputConsumer::InputConsumer(const sp<InputChannel>& channel) :
InputConsumer::InputConsumer(const sp<InputChannel>& channel) :
+0 −1
Original line number Original line Diff line number Diff line
@@ -88,7 +88,6 @@ cc_library_shared {
        "libui",
        "libui",
        "libutils",
        "libutils",
        "libhardware_legacy",
        "libhardware_legacy",
        "libstatslog",
    ],
    ],


    header_libs: [
    header_libs: [
+0 −13
Original line number Original line Diff line number Diff line
@@ -57,7 +57,6 @@
#include <android-base/stringprintf.h>
#include <android-base/stringprintf.h>
#include <input/Keyboard.h>
#include <input/Keyboard.h>
#include <input/VirtualKeyMap.h>
#include <input/VirtualKeyMap.h>
#include <statslog.h>


#define INDENT "  "
#define INDENT "  "
#define INDENT2 "    "
#define INDENT2 "    "
@@ -4310,24 +4309,12 @@ void TouchInputMapper::clearStylusDataPendingFlags() {
    mExternalStylusFusionTimeout = LLONG_MAX;
    mExternalStylusFusionTimeout = LLONG_MAX;
}
}


void TouchInputMapper::reportEventForStatistics(nsecs_t evdevTime) {
    if (mStatistics.shouldReport()) {
        android::util::stats_write(android::util::TOUCH_EVENT_REPORTED, mStatistics.getMin(),
                                   mStatistics.getMax(), mStatistics.getMean(),
                                   mStatistics.getStDev(), mStatistics.getCount());
        mStatistics.reset();
    }
    nsecs_t latency = nanoseconds_to_microseconds(systemTime(CLOCK_MONOTONIC) - evdevTime);
    mStatistics.addValue(latency);
}

void TouchInputMapper::process(const RawEvent* rawEvent) {
void TouchInputMapper::process(const RawEvent* rawEvent) {
    mCursorButtonAccumulator.process(rawEvent);
    mCursorButtonAccumulator.process(rawEvent);
    mCursorScrollAccumulator.process(rawEvent);
    mCursorScrollAccumulator.process(rawEvent);
    mTouchButtonAccumulator.process(rawEvent);
    mTouchButtonAccumulator.process(rawEvent);


    if (rawEvent->type == EV_SYN && rawEvent->code == SYN_REPORT) {
    if (rawEvent->type == EV_SYN && rawEvent->code == SYN_REPORT) {
        reportEventForStatistics(rawEvent->when);
        sync(rawEvent->when);
        sync(rawEvent->when);
    }
    }
}
}
Loading