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

Commit 473838d6 authored by Vishnu Nair's avatar Vishnu Nair
Browse files

SF: Track transaction tracing states in order

Need to preserve order when rebuilding layers
from the traces.

Test: TreeHugger
Bug: 200284593
Change-Id: Ie33f9c22f60d3bf3016b04b9b39dcfdb25165364
parent 26523fed
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -43,7 +43,7 @@ proto::TransactionState TransactionProtoParser::toProto(const TransactionState&
}
}


proto::TransactionState TransactionProtoParser::toProto(
proto::TransactionState TransactionProtoParser::toProto(
        const std::unordered_map<int32_t /* layerId */, TracingLayerState> states) {
        const std::map<int32_t /* layerId */, TracingLayerState> states) {
    proto::TransactionState proto;
    proto::TransactionState proto;
    for (auto& [layerId, state] : states) {
    for (auto& [layerId, state] : states) {
        proto::LayerState layerProto = toProto(state, nullptr);
        proto::LayerState layerProto = toProto(state, nullptr);
+1 −1
Original line number Original line Diff line number Diff line
@@ -51,7 +51,7 @@ public:
    static proto::TransactionState toProto(const TransactionState&, LayerHandleToIdFn getLayerIdFn,
    static proto::TransactionState toProto(const TransactionState&, LayerHandleToIdFn getLayerIdFn,
                                           DisplayHandleToIdFn getDisplayIdFn);
                                           DisplayHandleToIdFn getDisplayIdFn);
    static proto::TransactionState toProto(
    static proto::TransactionState toProto(
            const std::unordered_map<int32_t /* layerId */, TracingLayerState>);
            const std::map<int32_t /* layerId */, TracingLayerState>);


    static proto::LayerCreationArgs toProto(const TracingLayerCreationArgs& args);
    static proto::LayerCreationArgs toProto(const TracingLayerCreationArgs& args);


+1 −2
Original line number Original line Diff line number Diff line
@@ -85,8 +85,7 @@ private:
    std::vector<proto::LayerCreationArgs> mCreatedLayers GUARDED_BY(mTraceLock);
    std::vector<proto::LayerCreationArgs> mCreatedLayers GUARDED_BY(mTraceLock);
    std::unordered_map<BBinder* /* layerHandle */, int32_t /* layerId */> mLayerHandles
    std::unordered_map<BBinder* /* layerHandle */, int32_t /* layerId */> mLayerHandles
            GUARDED_BY(mTraceLock);
            GUARDED_BY(mTraceLock);
    std::unordered_map<int32_t /* layerId */, TracingLayerState> mStartingStates
    std::map<int32_t /* layerId */, TracingLayerState> mStartingStates GUARDED_BY(mTraceLock);
            GUARDED_BY(mTraceLock);


    // We do not want main thread to block so main thread will try to acquire mMainThreadLock,
    // We do not want main thread to block so main thread will try to acquire mMainThreadLock,
    // otherwise will push data to temporary container.
    // otherwise will push data to temporary container.
+8 −3
Original line number Original line Diff line number Diff line
@@ -165,7 +165,7 @@ protected:
        mTracing->onLayerAdded(fakeLayerHandle->localBinder(), mParentLayerId, "parent",
        mTracing->onLayerAdded(fakeLayerHandle->localBinder(), mParentLayerId, "parent",
                               123 /* flags */, -1 /* parentId */);
                               123 /* flags */, -1 /* parentId */);
        const sp<IBinder> fakeChildLayerHandle = new BBinder();
        const sp<IBinder> fakeChildLayerHandle = new BBinder();
        mTracing->onLayerAdded(fakeChildLayerHandle->localBinder(), 2 /* layerId */, "child",
        mTracing->onLayerAdded(fakeChildLayerHandle->localBinder(), mChildLayerId, "child",
                               456 /* flags */, mParentLayerId);
                               456 /* flags */, mParentLayerId);


        // add some layer transaction
        // add some layer transaction
@@ -179,7 +179,8 @@ protected:
            transaction.states.add(layerState);
            transaction.states.add(layerState);
            ComposerState childState;
            ComposerState childState;
            childState.state.surface = fakeChildLayerHandle;
            childState.state.surface = fakeChildLayerHandle;
            layerState.state.z = 43;
            childState.state.what = layer_state_t::eLayerChanged;
            childState.state.z = 43;
            transaction.states.add(childState);
            transaction.states.add(childState);
            mTracing->addQueuedTransaction(transaction);
            mTracing->addQueuedTransaction(transaction);


@@ -227,6 +228,7 @@ protected:
    }
    }


    int mParentLayerId = 1;
    int mParentLayerId = 1;
    int mChildLayerId = 2;
    int64_t mVsyncId = 0;
    int64_t mVsyncId = 0;
    int64_t VSYNC_ID_FIRST_LAYER_CHANGE;
    int64_t VSYNC_ID_FIRST_LAYER_CHANGE;
    int64_t VSYNC_ID_SECOND_LAYER_CHANGE;
    int64_t VSYNC_ID_SECOND_LAYER_CHANGE;
@@ -244,8 +246,11 @@ TEST_F(TransactionTracingLayerHandlingTest, addStartingState) {
    EXPECT_GT(proto.entry().size(), 0);
    EXPECT_GT(proto.entry().size(), 0);
    EXPECT_GT(proto.entry(0).transactions().size(), 0);
    EXPECT_GT(proto.entry(0).transactions().size(), 0);
    EXPECT_GT(proto.entry(0).added_layers().size(), 0);
    EXPECT_GT(proto.entry(0).added_layers().size(), 0);
    EXPECT_GT(proto.entry(0).transactions(0).layer_changes().size(), 0);
    EXPECT_EQ(proto.entry(0).transactions(0).layer_changes().size(), 2);
    EXPECT_EQ(proto.entry(0).transactions(0).layer_changes(0).layer_id(), mParentLayerId);
    EXPECT_EQ(proto.entry(0).transactions(0).layer_changes(0).z(), 42);
    EXPECT_EQ(proto.entry(0).transactions(0).layer_changes(0).z(), 42);
    EXPECT_EQ(proto.entry(0).transactions(0).layer_changes(1).layer_id(), mChildLayerId);
    EXPECT_EQ(proto.entry(0).transactions(0).layer_changes(1).z(), 43);
}
}


TEST_F(TransactionTracingLayerHandlingTest, updateStartingState) {
TEST_F(TransactionTracingLayerHandlingTest, updateStartingState) {