Loading libs/graphicsenv/GraphicsEnv.cpp +10 −15 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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; Loading services/surfaceflinger/SurfaceFlinger.cpp +8 −6 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; Loading Loading @@ -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; } Loading services/surfaceflinger/SurfaceFlinger.h +2 −1 Original line number Diff line number Diff line Loading @@ -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 Loading services/surfaceflinger/SurfaceTracing.cpp +7 −4 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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); Loading services/surfaceflinger/SurfaceTracing.h +7 −3 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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; Loading Loading
libs/graphicsenv/GraphicsEnv.cpp +10 −15 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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; Loading
services/surfaceflinger/SurfaceFlinger.cpp +8 −6 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; Loading Loading @@ -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; } Loading
services/surfaceflinger/SurfaceFlinger.h +2 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
services/surfaceflinger/SurfaceTracing.cpp +7 −4 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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); Loading
services/surfaceflinger/SurfaceTracing.h +7 −3 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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; Loading