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

Commit 494a2e40 authored by Vishnu Nair's avatar Vishnu Nair
Browse files

Added contentSize to WindowInfo

In order to compute TPL using WindowInfoListener, it needs contentSize
to know the original bounds vs the displayed bounds. This is to ensure
the crop is factored in when computing percentage visible.

Test: WindowInfo
Bug: 290795410
Change-Id: Ic5a69d6ce9c4c436a63e51d7ce086960426d688b
parent 2ae4e980
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -66,8 +66,9 @@ bool WindowInfo::overlaps(const WindowInfo* other) const {
bool WindowInfo::operator==(const WindowInfo& info) const {
    return info.token == token && info.id == id && info.name == name &&
            info.dispatchingTimeout == dispatchingTimeout && info.frame == frame &&
            info.surfaceInset == surfaceInset && info.globalScaleFactor == globalScaleFactor &&
            info.transform == transform && info.touchableRegion.hasSameRects(touchableRegion) &&
            info.contentSize == contentSize && info.surfaceInset == surfaceInset &&
            info.globalScaleFactor == globalScaleFactor && info.transform == transform &&
            info.touchableRegion.hasSameRects(touchableRegion) &&
            info.touchOcclusionMode == touchOcclusionMode && info.ownerPid == ownerPid &&
            info.ownerUid == ownerUid && info.packageName == packageName &&
            info.inputConfig == inputConfig && info.displayId == displayId &&
@@ -101,6 +102,8 @@ status_t WindowInfo::writeToParcel(android::Parcel* parcel) const {
        parcel->writeInt32(
                static_cast<std::underlying_type_t<WindowInfo::Type>>(layoutParamsType)) ?:
        parcel->write(frame) ?:
        parcel->writeInt32(contentSize.width) ?:
        parcel->writeInt32(contentSize.height) ?:
        parcel->writeInt32(surfaceInset) ?:
        parcel->writeFloat(globalScaleFactor) ?:
        parcel->writeFloat(alpha) ?:
@@ -150,6 +153,8 @@ status_t WindowInfo::readFromParcel(const android::Parcel* parcel) {
    status = parcel->readInt32(&lpFlags) ?:
        parcel->readInt32(&lpType) ?:
        parcel->read(frame) ?:
        parcel->readInt32(&contentSize.width) ?:
        parcel->readInt32(&contentSize.height) ?:
        parcel->readInt32(&surfaceInset) ?:
        parcel->readFloat(&globalScaleFactor) ?:
        parcel->readFloat(&alpha) ?:
+4 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <gui/constants.h>
#include <ui/Rect.h>
#include <ui/Region.h>
#include <ui/Size.h>
#include <ui/Transform.h>
#include <utils/RefBase.h>
#include <utils/Timers.h>
@@ -196,6 +197,9 @@ struct WindowInfo : public Parcelable {
    /* These values are filled in by SurfaceFlinger. */
    Rect frame = Rect::INVALID_RECT;

    // The real size of the content, excluding any crop. If no buffer is rendered, this is 0,0
    ui::Size contentSize = ui::Size(0, 0);

    /*
     * SurfaceFlinger consumes this value to shrink the computed frame. This is
     * different from shrinking the touchable region in that it DOES shift the coordinate
+3 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ namespace android {
using gui::InputApplicationInfo;
using gui::TouchOcclusionMode;
using gui::WindowInfo;
using ui::Size;

namespace test {

@@ -53,6 +54,7 @@ TEST(WindowInfo, Parcelling) {
    i.layoutParamsType = WindowInfo::Type::INPUT_METHOD;
    i.dispatchingTimeout = 12s;
    i.frame = Rect(93, 34, 16, 19);
    i.contentSize = Size(10, 40);
    i.surfaceInset = 17;
    i.globalScaleFactor = 0.3;
    i.alpha = 0.7;
@@ -83,6 +85,7 @@ TEST(WindowInfo, Parcelling) {
    ASSERT_EQ(i.layoutParamsType, i2.layoutParamsType);
    ASSERT_EQ(i.dispatchingTimeout, i2.dispatchingTimeout);
    ASSERT_EQ(i.frame, i2.frame);
    ASSERT_EQ(i.contentSize, i2.contentSize);
    ASSERT_EQ(i.surfaceInset, i2.surfaceInset);
    ASSERT_EQ(i.globalScaleFactor, i2.globalScaleFactor);
    ASSERT_EQ(i.alpha, i2.alpha);
+3 −0
Original line number Diff line number Diff line
@@ -739,6 +739,7 @@ void LayerSnapshotBuilder::updateSnapshot(LayerSnapshot& snapshot, const Args& a
        !snapshot.changes.test(RequestedLayerState::Changes::Created)) {
        if (forceUpdate ||
            snapshot.changes.any(RequestedLayerState::Changes::Geometry |
                                 RequestedLayerState::Changes::BufferSize |
                                 RequestedLayerState::Changes::Input)) {
            updateInput(snapshot, requested, parentSnapshot, path, args);
        }
@@ -1095,6 +1096,8 @@ void LayerSnapshotBuilder::updateInput(LayerSnapshot& snapshot,
        snapshot.inputInfo.inputConfig |= gui::WindowInfo::InputConfig::TRUSTED_OVERLAY;
    }

    snapshot.inputInfo.contentSize = snapshot.croppedBufferSize.getSize();

    // If the layer is a clone, we need to crop the input region to cloned root to prevent
    // touches from going outside the cloned area.
    if (path.isClone()) {
+4 −0
Original line number Diff line number Diff line
@@ -136,6 +136,7 @@ using frontend::RoundedCornerState;
using gui::GameMode;
using gui::LayerMetadata;
using gui::WindowInfo;
using ui::Size;

using PresentState = frametimeline::SurfaceFrame::PresentState;

@@ -2591,6 +2592,9 @@ WindowInfo Layer::fillInputInfo(const InputDisplayArgs& displayArgs) {
        }
    }

    Rect bufferSize = getBufferSize(getDrawingState());
    info.contentSize = Size(bufferSize.width(), bufferSize.height());

    return info;
}