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

Commit 25926239 authored by Michael Wright's avatar Michael Wright Committed by Android (Google) Code Review
Browse files

Merge changes from topics "display-dump", "presentation-dump"

* changes:
  Add TouchSpotController to PointerController dump.
  s/displayID/displayId
  Add viewports to PointerController dump
  Add dump for PointerController.
  Rename pointer-related members to be more specific.
  Use IndentingPrintWriter instead of manually prefixing dumpsys.
parents 881d4ed5 20f5fd87
Loading
Loading
Loading
Loading
+29 −5
Original line number Diff line number Diff line
@@ -22,10 +22,18 @@
#include <SkBlendMode.h>
#include <SkCanvas.h>
#include <SkColor.h>
#include <android-base/stringprintf.h>
#include <android-base/thread_annotations.h>
#include <ftl/enum.h>

#include <mutex>

#include "PointerControllerContext.h"

#define INDENT "  "
#define INDENT2 "    "
#define INDENT3 "      "

namespace android {

namespace {
@@ -223,7 +231,7 @@ void PointerController::clearSpots() {
}

void PointerController::clearSpotsLocked() {
    for (auto& [displayID, spotController] : mLocked.spotControllers) {
    for (auto& [displayId, spotController] : mLocked.spotControllers) {
        spotController.clearSpots();
    }
}
@@ -235,7 +243,7 @@ void PointerController::setInactivityTimeout(InactivityTimeout inactivityTimeout
void PointerController::reloadPointerResources() {
    std::scoped_lock lock(getLock());

    for (auto& [displayID, spotController] : mLocked.spotControllers) {
    for (auto& [displayId, spotController] : mLocked.spotControllers) {
        spotController.reloadSpotResources();
    }

@@ -286,13 +294,13 @@ void PointerController::onDisplayViewportsUpdated(std::vector<DisplayViewport>&

    std::scoped_lock lock(getLock());
    for (auto it = mLocked.spotControllers.begin(); it != mLocked.spotControllers.end();) {
        int32_t displayID = it->first;
        if (!displayIdSet.count(displayID)) {
        int32_t displayId = it->first;
        if (!displayIdSet.count(displayId)) {
            /*
             * Ensures that an in-progress animation won't dereference
             * a null pointer to TouchSpotController.
             */
            mContext.removeAnimationCallback(displayID);
            mContext.removeAnimationCallback(displayId);
            it = mLocked.spotControllers.erase(it);
        } else {
            ++it;
@@ -313,4 +321,20 @@ const ui::Transform& PointerController::getTransformForDisplayLocked(int display
    return it != di.end() ? it->transform : kIdentityTransform;
}

void PointerController::dump(std::string& dump) {
    dump += INDENT "PointerController:\n";
    std::scoped_lock lock(getLock());
    dump += StringPrintf(INDENT2 "Presentation: %s\n",
                         ftl::enum_string(mLocked.presentation).c_str());
    dump += StringPrintf(INDENT2 "Pointer Display ID: %" PRIu32 "\n", mLocked.pointerDisplayId);
    dump += StringPrintf(INDENT2 "Viewports:\n");
    for (const auto& info : mLocked.mDisplayInfos) {
        info.dump(dump, INDENT3);
    }
    dump += INDENT2 "Spot Controllers:\n";
    for (const auto& [_, spotController] : mLocked.spotControllers) {
        spotController.dump(dump, INDENT3);
    }
}

} // namespace android
+3 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@

#include <map>
#include <memory>
#include <string>
#include <vector>

#include "MouseCursorController.h"
@@ -75,6 +76,8 @@ public:
    void onDisplayInfosChangedLocked(const std::vector<gui::DisplayInfo>& displayInfos)
            REQUIRES(getLock());

    void dump(std::string& dump);

protected:
    using WindowListenerConsumer =
            std::function<void(const sp<android::gui::WindowInfosListener>&)>;
+31 −0
Original line number Diff line number Diff line
@@ -21,8 +21,15 @@

#include "TouchSpotController.h"

#include <android-base/stringprintf.h>
#include <input/PrintTools.h>
#include <log/log.h>

#include <mutex>

#define INDENT "  "
#define INDENT2 "    "

namespace {
// Time to spend fading out the spot completely.
const nsecs_t SPOT_FADE_DURATION = 200 * 1000000LL; // 200 ms
@@ -53,6 +60,12 @@ void TouchSpotController::Spot::updateSprite(const SpriteIcon* icon, float x, fl
    }
}

void TouchSpotController::Spot::dump(std::string& out, const char* prefix) const {
    out += prefix;
    base::StringAppendF(&out, "Spot{id=%" PRIx32 ", alpha=%f, scale=%f, pos=[%f, %f]}\n", id, alpha,
                        scale, x, y);
}

// --- TouchSpotController ---

TouchSpotController::TouchSpotController(int32_t displayId, PointerControllerContext& context)
@@ -255,4 +268,22 @@ void TouchSpotController::startAnimationLocked() REQUIRES(mLock) {
    mContext.addAnimationCallback(mDisplayId, func);
}

void TouchSpotController::dump(std::string& out, const char* prefix) const {
    using base::StringAppendF;
    out += prefix;
    out += "SpotController:\n";
    out += prefix;
    StringAppendF(&out, INDENT "DisplayId: %" PRId32 "\n", mDisplayId);
    std::scoped_lock lock(mLock);
    out += prefix;
    StringAppendF(&out, INDENT "Animating: %s\n", toString(mLocked.animating));
    out += prefix;
    out += INDENT "Spots:\n";
    std::string spotPrefix = prefix;
    spotPrefix += INDENT2;
    for (const auto& spot : mLocked.displaySpots) {
        spot->dump(out, spotPrefix.c_str());
    }
}

} // namespace android
+3 −0
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ public:
    void reloadSpotResources();
    bool doAnimations(nsecs_t timestamp);

    void dump(std::string& out, const char* prefix = "") const;

private:
    struct Spot {
        static const uint32_t INVALID_ID = 0xffffffff;
@@ -58,6 +60,7 @@ private:
                mLastIcon(nullptr) {}

        void updateSprite(const SpriteIcon* icon, float x, float y, int32_t displayId);
        void dump(std::string& out, const char* prefix = "") const;

    private:
        const SpriteIcon* mLastIcon;
+15 −10
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.os.SystemClock;
import android.os.UEventObserver;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.IndentingPrintWriter;
import android.util.Log;
import android.util.Slog;
import android.view.InputDevice;
@@ -382,24 +383,28 @@ final class BatteryController {
        }
    }

    public void dump(PrintWriter pw, String prefix) {
    public void dump(PrintWriter pw) {
        IndentingPrintWriter ipw = new IndentingPrintWriter(pw);
        synchronized (mLock) {
            final String indent = prefix + "  ";
            final String indent2 = indent + "  ";

            pw.println(prefix + TAG + ":");
            pw.println(indent + "State: Polling = " + mIsPolling
            ipw.println(TAG + ":");
            ipw.increaseIndent();
            ipw.println("State: Polling = " + mIsPolling
                    + ", Interactive = " + mIsInteractive);

            pw.println(indent + "Listeners: " + mListenerRecords.size() + " battery listeners");
            ipw.println("Listeners: " + mListenerRecords.size() + " battery listeners");
            ipw.increaseIndent();
            for (int i = 0; i < mListenerRecords.size(); i++) {
                pw.println(indent2 + i + ": " + mListenerRecords.valueAt(i));
                ipw.println(i + ": " + mListenerRecords.valueAt(i));
            }
            ipw.decreaseIndent();

            pw.println(indent + "Device Monitors: " + mDeviceMonitors.size() + " monitors");
            ipw.println("Device Monitors: " + mDeviceMonitors.size() + " monitors");
            ipw.increaseIndent();
            for (int i = 0; i < mDeviceMonitors.size(); i++) {
                pw.println(indent2 + i + ": " + mDeviceMonitors.valueAt(i));
                ipw.println(i + ": " + mDeviceMonitors.valueAt(i));
            }
            ipw.decreaseIndent();
            ipw.decreaseIndent();
        }
    }

Loading