Loading PREUPLOAD.cfg +0 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ rustfmt = true bpfmt = true clang_format = true alint = false [Builtin Hooks Options] rustfmt = --config-path=rustfmt.toml Loading libs/binder/Parcel.cpp +39 −35 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) { Loading libs/binder/include/binder/Parcel.h +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading libs/renderengine/skia/SkiaRenderEngine.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading libs/renderengine/skia/compat/GraphitePipelineManager.cpp +59 −25 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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> Loading Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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 Loading
PREUPLOAD.cfg +0 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ rustfmt = true bpfmt = true clang_format = true alint = false [Builtin Hooks Options] rustfmt = --config-path=rustfmt.toml Loading
libs/binder/Parcel.cpp +39 −35 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) { Loading
libs/binder/include/binder/Parcel.h +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
libs/renderengine/skia/SkiaRenderEngine.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading
libs/renderengine/skia/compat/GraphitePipelineManager.cpp +59 −25 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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> Loading Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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