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 Diff line number Diff line
@@ -31,13 +31,16 @@

#include <string>

#include <android-base/chrono_utils.h>

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

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

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

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

    void reportTouchEventForStatistics(nsecs_t evdevTime);
};

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

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

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

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].coords.copyFrom(pointerCoords[i]);
    }

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

@@ -557,6 +562,17 @@ status_t InputPublisher::receiveFinishedSignal(uint32_t* outSeq, bool* outHandle
    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(const sp<InputChannel>& channel) :
+0 −1
Original line number Diff line number Diff line
@@ -88,7 +88,6 @@ cc_library_shared {
        "libui",
        "libutils",
        "libhardware_legacy",
        "libstatslog",
    ],

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

#define INDENT "  "
#define INDENT2 "    "
@@ -4310,24 +4309,12 @@ void TouchInputMapper::clearStylusDataPendingFlags() {
    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) {
    mCursorButtonAccumulator.process(rawEvent);
    mCursorScrollAccumulator.process(rawEvent);
    mTouchButtonAccumulator.process(rawEvent);

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