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

Commit 27b827f6 authored by stevensd's avatar stevensd Committed by Gerrit Code Review
Browse files

Merge "libgui: make MAX_FRAME_HISTORY a configurable property"

parents 10a2825e 7347f0b5
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -166,6 +166,10 @@ cc_defaults {
        "bufferqueue/2.0/types.cpp",
    ],

    whole_static_libs: [
        "LibGuiProperties",
    ],

    shared_libs: [
        "android.hardware.graphics.bufferqueue@1.0",
        "android.hardware.graphics.bufferqueue@2.0",
+11 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#define LOG_TAG "FrameEvents"

#include <LibGuiProperties.sysprop.h>
#include <android-base/stringprintf.h>
#include <cutils/compiler.h>  // For CC_[UN]LIKELY
#include <inttypes.h>
@@ -167,6 +168,11 @@ struct FrameNumberEqual {

}  // namespace

const size_t FrameEventHistory::MAX_FRAME_HISTORY =
        sysprop::LibGuiProperties::frame_event_history_size().value_or(8);

FrameEventHistory::FrameEventHistory() : mFrames(std::vector<FrameEvents>(MAX_FRAME_HISTORY)) {}

FrameEventHistory::~FrameEventHistory() = default;

FrameEvents* FrameEventHistory::getFrame(uint64_t frameNumber) {
@@ -348,6 +354,9 @@ std::shared_ptr<FenceTime> ProducerFrameEventHistory::createFenceTime(
// ConsumerFrameEventHistory
// ============================================================================

ConsumerFrameEventHistory::ConsumerFrameEventHistory()
      : mFramesDirty(std::vector<FrameEventDirtyFields>(MAX_FRAME_HISTORY)) {}

ConsumerFrameEventHistory::~ConsumerFrameEventHistory() = default;

void ConsumerFrameEventHistory::onDisconnect() {
@@ -443,9 +452,8 @@ void ConsumerFrameEventHistory::addRelease(uint64_t frameNumber,
    mFramesDirty[mReleaseOffset].setDirty<FrameEvent::RELEASE>();
}

void ConsumerFrameEventHistory::getFrameDelta(
        FrameEventHistoryDelta* delta,
        const std::array<FrameEvents, MAX_FRAME_HISTORY>::iterator& frame) {
void ConsumerFrameEventHistory::getFrameDelta(FrameEventHistoryDelta* delta,
                                              const std::vector<FrameEvents>::iterator& frame) {
    mProducerWantsEvents = true;
    size_t i = static_cast<size_t>(std::distance(mFrames.begin(), frame));
    if (mFramesDirty[i].anyDirty()) {
+6 −4
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ struct CompositorTiming {
// producer via deltas.
class FrameEventHistory {
public:
    FrameEventHistory();
    virtual ~FrameEventHistory();

    FrameEvents* getFrame(uint64_t frameNumber);
@@ -113,10 +114,10 @@ public:
    void checkFencesForCompletion();
    void dump(std::string& outString) const;

    static constexpr size_t MAX_FRAME_HISTORY = 8;
    static const size_t MAX_FRAME_HISTORY;

protected:
    std::array<FrameEvents, MAX_FRAME_HISTORY> mFrames;
    std::vector<FrameEvents> mFrames;

    CompositorTiming mCompositorTiming;
};
@@ -204,6 +205,7 @@ private:
// The consumer's interface to FrameEventHistory
class ConsumerFrameEventHistory : public FrameEventHistory {
public:
    ConsumerFrameEventHistory();
    ~ConsumerFrameEventHistory() override;

    void onDisconnect();
@@ -224,9 +226,9 @@ public:

private:
    void getFrameDelta(FrameEventHistoryDelta* delta,
            const std::array<FrameEvents, MAX_FRAME_HISTORY>::iterator& frame);
                       const std::vector<FrameEvents>::iterator& frame);

    std::array<FrameEventDirtyFields, MAX_FRAME_HISTORY> mFramesDirty;
    std::vector<FrameEventDirtyFields> mFramesDirty;

    size_t mQueueOffset{0};
    size_t mCompositionOffset{0};
+7 −0
Original line number Diff line number Diff line
sysprop_library {
    name: "LibGuiProperties",
    srcs: ["*.sysprop"],
    api_packages: ["android.sysprop"],
    property_owner: "Platform",
    vendor_available: true,
}
+25 −0
Original line number Diff line number Diff line
# Copyright (C) 2020 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the License);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

module: "android.sysprop.LibGuiProperties"
owner: Platform

# Indicates how many elements should be present in the frame event histories.
prop {
    api_name: "frame_event_history_size"
    type: Integer
    scope: Public
    access: Readonly
    prop_name: "ro.lib_gui.frame_event_history_size"
}
Loading