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

Commit a1d6f69e authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6286840 from 9fd126d0 to rvc-release

Change-Id: Iea32b6e4c0ae2a4e86ce394ffff0c1dabfb1a1a6
parents 1863a962 9fd126d0
Loading
Loading
Loading
Loading
+10 −15
Original line number Diff line number Diff line
@@ -61,26 +61,25 @@ enum NativeLibrary {
    VNDKSP = 1,
};

static constexpr const char* kNativeLibrariesSystemConfigPath[] = {"/etc/llndk.libraries.txt",
                                                                   "/etc/vndksp.libraries.txt"};
static constexpr const char* kNativeLibrariesSystemConfigPath[] =
        {"/apex/com.android.vndk.v{}/etc/llndk.libraries.{}.txt",
         "/apex/com.android.vndk.v{}/etc/vndksp.libraries.{}.txt"};

static std::string vndkVersionStr() {
#ifdef __BIONIC__
    std::string version = android::base::GetProperty("ro.vndk.version", "");
    if (version != "" && version != "current") {
        return "." + version;
    }
    return android::base::GetProperty("ro.vndk.version", "");
#endif
    return "";
}

static void insertVndkVersionStr(std::string* fileName) {
    LOG_ALWAYS_FATAL_IF(!fileName, "fileName should never be nullptr");
    size_t insertPos = fileName->find_last_of(".");
    if (insertPos == std::string::npos) {
        insertPos = fileName->length();
    std::string version = vndkVersionStr();
    size_t pos = fileName->find("{}");
    while (pos != std::string::npos) {
        fileName->replace(pos, 2, version);
        pos = fileName->find("{}", pos + version.size());
    }
    fileName->insert(insertPos, vndkVersionStr());
}

static bool readConfig(const std::string& configFile, std::vector<std::string>* soNames) {
@@ -103,11 +102,7 @@ static bool readConfig(const std::string& configFile, std::vector<std::string>*
}

static const std::string getSystemNativeLibraries(NativeLibrary type) {
    static const char* androidRootEnv = getenv("ANDROID_ROOT");
    static const std::string rootDir = androidRootEnv != nullptr ? androidRootEnv : "/system";

    std::string nativeLibrariesSystemConfig = rootDir + kNativeLibrariesSystemConfigPath[type];

    std::string nativeLibrariesSystemConfig = kNativeLibrariesSystemConfigPath[type];
    insertVndkVersionStr(&nativeLibrariesSystemConfig);

    std::vector<std::string> soNames;
+8 −6
Original line number Diff line number Diff line
@@ -2800,7 +2800,7 @@ void SurfaceFlinger::updateInputWindowInfo() {
    // input changes but all input changes will spring from these transactions
    // so the cache is safe but not optimal. It seems like it might be annoyingly
    // costly to cache and comapre the actual InputWindowHandle vector though.
    if (!mInputDirty) {
    if (!mInputDirty && !mInputWindowCommands.syncInputWindows) {
        return;
    }

@@ -4482,12 +4482,11 @@ void SurfaceFlinger::dumpWideColorInfo(std::string& result) const {
    result.append("\n");
}

LayersProto SurfaceFlinger::dumpDrawingStateProto(uint32_t traceFlags) const {
    Mutex::Autolock _l(mStateLock);
    const auto device = getDefaultDisplayDeviceLocked();
LayersProto SurfaceFlinger::dumpDrawingStateProto(
        uint32_t traceFlags, const sp<const DisplayDevice>& displayDevice) const {
    LayersProto layersProto;
    for (const sp<Layer>& layer : mDrawingState.layersSortedByZ) {
        layer->writeToProto(layersProto, traceFlags, device);
        layer->writeToProto(layersProto, traceFlags, displayDevice);
    }

    return layersProto;
@@ -4519,7 +4518,10 @@ void SurfaceFlinger::dumpOffscreenLayersProto(LayersProto& layersProto, uint32_t

LayersProto SurfaceFlinger::dumpProtoFromMainThread(uint32_t traceFlags) {
    LayersProto layersProto;
    postMessageSync(new LambdaMessage([&]() { layersProto = dumpDrawingStateProto(traceFlags); }));
    postMessageSync(new LambdaMessage([&]() {
        const auto& displayDevice = getDefaultDisplayDeviceLocked();
        layersProto = dumpDrawingStateProto(traceFlags, displayDevice);
    }));
    return layersProto;
}

+2 −1
Original line number Diff line number Diff line
@@ -923,7 +923,8 @@ private:
    void dumpDisplayIdentificationData(std::string& result) const;
    void dumpRawDisplayIdentificationData(const DumpArgs&, std::string& result) const;
    void dumpWideColorInfo(std::string& result) const;
    LayersProto dumpDrawingStateProto(uint32_t traceFlags = SurfaceTracing::TRACE_ALL) const;
    LayersProto dumpDrawingStateProto(uint32_t traceFlags = SurfaceTracing::TRACE_ALL,
                                      const sp<const DisplayDevice>& displayDevice = nullptr) const;
    void dumpOffscreenLayersProto(LayersProto& layersProto,
                                  uint32_t traceFlags = SurfaceTracing::TRACE_ALL) const;
    // Dumps state from HW Composer
+7 −4
Original line number Diff line number Diff line
@@ -45,19 +45,21 @@ void SurfaceTracing::mainLoop() {
}

void SurfaceTracing::addFirstEntry() {
    const auto displayDevice = mFlinger.getDefaultDisplayDevice();
    LayersTraceProto entry;
    {
        std::scoped_lock lock(mSfLock);
        entry = traceLayersLocked("tracing.enable");
        entry = traceLayersLocked("tracing.enable", displayDevice);
    }
    addTraceToBuffer(entry);
}

LayersTraceProto SurfaceTracing::traceWhenNotified() {
    const auto displayDevice = mFlinger.getDefaultDisplayDevice();
    std::unique_lock<std::mutex> lock(mSfLock);
    mCanStartTrace.wait(lock);
    android::base::ScopedLockAssertion assumeLock(mSfLock);
    LayersTraceProto entry = traceLayersLocked(mWhere);
    LayersTraceProto entry = traceLayersLocked(mWhere, displayDevice);
    lock.unlock();
    return entry;
}
@@ -160,13 +162,14 @@ void SurfaceTracing::setTraceFlags(uint32_t flags) {
    mTraceFlags = flags;
}

LayersTraceProto SurfaceTracing::traceLayersLocked(const char* where) {
LayersTraceProto SurfaceTracing::traceLayersLocked(const char* where,
                                                   const sp<const DisplayDevice>& displayDevice) {
    ATRACE_CALL();

    LayersTraceProto entry;
    entry.set_elapsed_realtime_nanos(elapsedRealtimeNano());
    entry.set_where(where);
    LayersProto layers(mFlinger.dumpDrawingStateProto(mTraceFlags));
    LayersProto layers(mFlinger.dumpDrawingStateProto(mTraceFlags, displayDevice));
    mFlinger.dumpOffscreenLayersProto(layers);
    entry.mutable_layers()->Swap(&layers);

+7 −3
Original line number Diff line number Diff line
@@ -16,17 +16,19 @@

#pragma once

#include <android-base/thread_annotations.h>
#include <layerproto/LayerProtoHeader.h>
#include <utils/Errors.h>
#include <utils/StrongPointer.h>

#include <android-base/thread_annotations.h>
#include <condition_variable>
#include <memory>
#include <mutex>
#include <queue>
#include <thread>

#include "DisplayDevice.h"

using namespace android::surfaceflinger;

namespace android {
@@ -85,13 +87,15 @@ private:
    void mainLoop();
    void addFirstEntry();
    LayersTraceProto traceWhenNotified();
    LayersTraceProto traceLayersLocked(const char* where) REQUIRES(mSfLock);
    LayersTraceProto traceLayersLocked(const char* where,
                                       const sp<const DisplayDevice>& displayDevice)
            REQUIRES(mSfLock);

    // Returns true if trace is enabled.
    bool addTraceToBuffer(LayersTraceProto& entry);
    void writeProtoFileLocked() REQUIRES(mTraceLock);

    const SurfaceFlinger& mFlinger;
    SurfaceFlinger& mFlinger;
    status_t mLastErr = NO_ERROR;
    std::thread mThread;
    std::condition_variable mCanStartTrace;