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

Commit 442116ab authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 13859275 from 6e4af4ba to 25Q4-release

Change-Id: I7aa64e269dc55b6282b30f57b069c91d8ca13b6e
parents d8b4329e 6e4af4ba
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@
rustfmt = true
bpfmt = true
clang_format = true
alint = false

[Builtin Hooks Options]
rustfmt = --config-path=rustfmt.toml
+39 −35
Original line number Diff line number Diff line
@@ -2020,10 +2020,7 @@ status_t Parcel::writeNoException()
    return status.writeToParcel(this);
}

status_t Parcel::validateReadData(size_t upperBound) const
{
    const auto* kernelFields = maybeKernelFields();
    if (kernelFields == nullptr) {
status_t Parcel::validateRpcReadData(size_t upperBound) const {
    if (upperBound == 0) return OK;
    auto* rpcFields = maybeRpcFields();
    LOG_ALWAYS_FATAL_IF(rpcFields == nullptr);
@@ -2061,6 +2058,13 @@ status_t Parcel::validateReadData(size_t upperBound) const
    return OK;
}

status_t Parcel::validateReadData(size_t upperBound) const
{
    const auto* kernelFields = maybeKernelFields();
    if (kernelFields == nullptr) {
        return validateRpcReadData(upperBound);
    }

#ifdef BINDER_WITH_KERNEL_IPC
    // Don't allow non-object reads on object data
    if (kernelFields->mObjectsSorted || kernelFields->mObjectsSize <= 1) {
+3 −0
Original line number Diff line number Diff line
@@ -700,6 +700,9 @@ private:
    void                scanForFds() const;
    status_t scanForBinders(bool* result) const;

    // Only used to keep validateReadData function size down for performance
    // in read* methods
    status_t validateRpcReadData(size_t len) const;
    status_t            validateReadData(size_t len) const;

    void                updateWorkSourceRequestHeaderPosition() const;
+3 −1
Original line number Diff line number Diff line
@@ -319,7 +319,9 @@ void SkiaRenderEngine::setEnableTracing(bool tracingEnabled) {

SkiaRenderEngine::SkiaRenderEngine(Threaded threaded, PixelFormat pixelFormat,
                                   BlurAlgorithm blurAlgorithm)
      : RenderEngine(threaded), mDefaultPixelFormat(pixelFormat) {
      : RenderEngine(threaded),
        mRuntimeEffectManager(RuntimeEffectManager(blurAlgorithm)),
        mDefaultPixelFormat(pixelFormat) {
    // Note: do not introduce further switching on flags here, or within individual blur filters.
    // BlurAlgorithm should be the only determining factor.
    switch (blurAlgorithm) {
+59 −25
Original line number Diff line number Diff line
@@ -16,8 +16,11 @@

#include "GraphitePipelineManager.h"

#include <common/trace.h>
#include <ftl/enum.h>
#include <include/core/SkData.h>
#include <include/core/SkRefCnt.h>
#include <include/core/SkSpan.h>
#include <include/effects/SkRuntimeEffect.h>
#include <include/gpu/graphite/GraphiteTypes.h>
#include <include/gpu/graphite/PrecompileContext.h>
@@ -28,6 +31,7 @@
#include <include/gpu/graphite/precompile/PrecompileShader.h>
#include <include/gpu/graphite/vk/precompile/VulkanPrecompileShader.h>
#include <include/gpu/vk/VulkanTypes.h>
#include <pthread.h>

#include <type_traits>

@@ -582,9 +586,59 @@ constexpr DrawTypeFlags kRRectAndNonAARect =

// clang-format on

std::vector<PrecompileSettings> chooseBlurPrecompileSettings(RuntimeEffectManager& effectManager) {
    std::vector<PrecompileSettings> settingsList;
    // Note: reorder these cases to match BlurAlgorithm's definition order as precompilation support
    // for each algorithm is added. Each case should be added explicitly to ensure awareness of
    // potential precompilation gaps when new blurring algorithms are added.
    switch (effectManager.getChosenBlurAlgorithm()) {
        case RenderEngine::BlurAlgorithm::None:
            break;
        case RenderEngine::BlurAlgorithm::KawaseDualFilter:
            settingsList.push_back({KawaseBlurLowSrcSrcOver(effectManager),
                                    DrawTypeFlags::kNonAAFillRect, kRGBA_1_D});
            settingsList.push_back(
                    {KawaseBlurHighSrc(effectManager), DrawTypeFlags::kNonAAFillRect, kRGBA_1_D});
            break;
        case RenderEngine::BlurAlgorithm::Gaussian:
        case RenderEngine::BlurAlgorithm::Kawase:
        case RenderEngine::BlurAlgorithm::KawaseDualFilterV2:
            ALOGW("Pipeline precompilation for %s is not yet supported",
                  ftl::enum_string_full(effectManager.getChosenBlurAlgorithm()).c_str());
            break;
    }

    // Mix effect is used regardless of blurring algorithm (excluding BlurAlgorithm::None).
    if (!settingsList.empty()) {
        settingsList.push_back({BlurFilterMix(effectManager), kRRectAndNonAARect, kRGBA_1_D});
    }
    return settingsList;
}

void precompilePipelineCases(graphite::PrecompileContext* precompileContext,
                             SkSpan<const PrecompileSettings> cases) {
    SFTRACE_FORMAT("Precompiling %zu cases", cases.size());

    for (size_t i = 0; i < cases.size(); i++) {
        const PrecompileSettings& settings = cases[i];
        Precompile(precompileContext, settings.fPaintOptions, settings.fDrawTypeFlags,
                   settings.fRenderPassProps);

        if (settings.fAnalyticClipping) {
            DrawTypeFlags newFlags = settings.fDrawTypeFlags | DrawTypeFlags::kAnalyticClip;

            Precompile(precompileContext, settings.fPaintOptions,
                       static_cast<DrawTypeFlags>(newFlags), settings.fRenderPassProps);
        }
    }
}

void GraphitePipelineManager::PrecompilePipelines(
        std::unique_ptr<graphite::PrecompileContext> precompileContext,
        RuntimeEffectManager& effectManager) {
    pthread_setname_np(pthread_self(), "Precompile"); // Limited to 15 characters
    SFTRACE_CALL();

    // Easy references to SkRuntimeEffects for various LinearEffects that may be reused in multiple
    // precompilation scenarios.
    // clang-format off
@@ -761,18 +815,6 @@ void GraphitePipelineManager::PrecompilePipelines(
          DrawTypeFlags::kNonAAFillRect,
          kRGBA16F_1_D_Linear },

        { KawaseBlurLowSrcSrcOver(effectManager),
          DrawTypeFlags::kNonAAFillRect,
          kRGBA_1_D },

        { KawaseBlurHighSrc(effectManager),
          DrawTypeFlags::kNonAAFillRect,
          kRGBA_1_D },

        { BlurFilterMix(effectManager),
          kRRectAndNonAARect,
          kRGBA_1_D },

        // These two are solid colors drawn w/ a LinearEffect
        { LinearEffect(kUNKNOWN__SRGB__false__UNKNOWN__Shader,
                       ChildType::kSolidColor,
@@ -1032,20 +1074,12 @@ void GraphitePipelineManager::PrecompilePipelines(

    // clang-format on

    ALOGD("Pipeline precompilation started");
    ALOGD("Precompiling blur pipeline cases for %s",
          ftl::enum_string_full(effectManager.getChosenBlurAlgorithm()).c_str());
    precompilePipelineCases(precompileContext.get(), chooseBlurPrecompileSettings(effectManager));

    for (size_t i = 0; i < std::size(precompileCases); i++) {
        const PrecompileSettings& settings = precompileCases[i];
        Precompile(precompileContext.get(), settings.fPaintOptions, settings.fDrawTypeFlags,
                   settings.fRenderPassProps);

        if (settings.fAnalyticClipping) {
            DrawTypeFlags newFlags = settings.fDrawTypeFlags | DrawTypeFlags::kAnalyticClip;

            Precompile(precompileContext.get(), settings.fPaintOptions,
                       static_cast<DrawTypeFlags>(newFlags), settings.fRenderPassProps);
        }
    }
    ALOGD("Precompiling general pipeline cases");
    precompilePipelineCases(precompileContext.get(), {precompileCases});

    ALOGD("Pipeline precompilation finished");
}
Loading