From b40d2683bddf9fb8a2b060009f29703b45faabc4 Mon Sep 17 00:00:00 2001 From: ysdede <5496750+ysdede@users.noreply.github.com> Date: Mon, 9 Feb 2026 09:43:50 +0000 Subject: [PATCH] Optimize ComputeDerivativesFunction by caching arrays per thread Avoid large array allocations in the inner loop of image processing by reusing buffers per thread. This reduces GC pressure and improves performance during panorama processing. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- .../opencamera/JavaImageFunctions.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/net/sourceforge/opencamera/JavaImageFunctions.java b/app/src/main/java/net/sourceforge/opencamera/JavaImageFunctions.java index a7c78386e..bd5f0758f 100644 --- a/app/src/main/java/net/sourceforge/opencamera/JavaImageFunctions.java +++ b/app/src/main/java/net/sourceforge/opencamera/JavaImageFunctions.java @@ -2971,6 +2971,8 @@ static class ComputeDerivativesFunction implements JavaImageProcessing.ApplyFunc private final Bitmap bitmap_in; private final int width, height; private JavaImageProcessing.FastAccessBitmap [] fast_bitmap_in; + private int [][] cache_bitmap_Ix; + private int [][] cache_bitmap_Iy; ComputeDerivativesFunction(Bitmap bitmap_Ix, Bitmap bitmap_Iy, Bitmap bitmap_in) { this.bitmap_Ix = bitmap_Ix; @@ -2983,6 +2985,8 @@ static class ComputeDerivativesFunction implements JavaImageProcessing.ApplyFunc @Override public void init(int n_threads) { fast_bitmap_in = new JavaImageProcessing.FastAccessBitmap[n_threads]; + cache_bitmap_Ix = new int[n_threads][]; + cache_bitmap_Iy = new int[n_threads][]; for(int i=0;i