From 278a78e49572b6073fffcb35446e1b52984e0974 Mon Sep 17 00:00:00 2001 From: Robert Wu <85952307+robertwu1@users.noreply.github.com> Date: Thu, 16 Jan 2025 16:42:08 -0800 Subject: [PATCH 1/2] OboeTester: Fix race condition with setWorkload in Dynamic Workload test --- .../app/src/main/cpp/OboeStreamCallbackProxy.cpp | 7 ++++--- apps/OboeTester/app/src/main/cpp/OboeStreamCallbackProxy.h | 2 +- .../com/mobileer/oboetester/DynamicWorkloadActivity.java | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/OboeTester/app/src/main/cpp/OboeStreamCallbackProxy.cpp b/apps/OboeTester/app/src/main/cpp/OboeStreamCallbackProxy.cpp index 01814ec3..4f95e9da 100644 --- a/apps/OboeTester/app/src/main/cpp/OboeStreamCallbackProxy.cpp +++ b/apps/OboeTester/app/src/main/cpp/OboeStreamCallbackProxy.cpp @@ -25,13 +25,14 @@ oboe::DataCallbackResult OboeStreamCallbackProxy::onAudioReady( int numFrames) { oboe::DataCallbackResult callbackResult = oboe::DataCallbackResult::Stop; int64_t startTimeNanos = getNanoseconds(); + int32_t numWorkloadVoices = mNumWorkloadVoices; // Record which CPU this is running on. orCurrentCpuMask(sched_getcpu()); // Tell ADPF in advance what our workload will be. if (mWorkloadReportingEnabled) { - audioStream->reportWorkload(mNumWorkloadVoices); + audioStream->reportWorkload(numWorkloadVoices); } // Change affinity if app requested a change. @@ -54,8 +55,8 @@ oboe::DataCallbackResult OboeStreamCallbackProxy::onAudioReady( callbackResult = mCallback->onAudioReady(audioStream, audioData, numFrames); } - mSynthWorkload.onCallback(mNumWorkloadVoices); - if (mNumWorkloadVoices > 0) { + mSynthWorkload.onCallback(numWorkloadVoices); + if (numWorkloadVoices > 0) { // Render into the buffer or discard the synth voices. float *buffer = (audioStream->getChannelCount() == 2 && mHearWorkload) ? static_cast(audioData) : nullptr; diff --git a/apps/OboeTester/app/src/main/cpp/OboeStreamCallbackProxy.h b/apps/OboeTester/app/src/main/cpp/OboeStreamCallbackProxy.h index 9b5f7530..b8b8d5af 100644 --- a/apps/OboeTester/app/src/main/cpp/OboeStreamCallbackProxy.h +++ b/apps/OboeTester/app/src/main/cpp/OboeStreamCallbackProxy.h @@ -251,7 +251,7 @@ class OboeStreamCallbackProxy : public OboeTesterStreamCallback { std::atomic mMaxCpuLoad{0.0f}; int64_t mPreviousCallbackTimeNs = 0; DoubleStatistics mStatistics; - int32_t mNumWorkloadVoices = 0; + std::atomic mNumWorkloadVoices{0}; SynthWorkload mSynthWorkload; bool mHearWorkload = false; bool mWorkloadReportingEnabled = false; diff --git a/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/DynamicWorkloadActivity.java b/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/DynamicWorkloadActivity.java index 9340100e..eee3c350 100644 --- a/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/DynamicWorkloadActivity.java +++ b/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/DynamicWorkloadActivity.java @@ -40,7 +40,7 @@ */ public class DynamicWorkloadActivity extends TestOutputActivityBase { private static final int WORKLOAD_HIGH_MIN = 30; - private static final int WORKLOAD_HIGH_MAX = 150; + private static final int WORKLOAD_HIGH_MAX = 1500; // When the CPU is completely saturated then the load will be above 1.0. public static final double LOAD_RECOVERY_HIGH = 1.0; // Use a slightly lower value for going low so that the comparator has hysteresis. From 2dc9ce88e594528de7f92e0fa52e0b64f087b826 Mon Sep 17 00:00:00 2001 From: Robert Wu <85952307+robertwu1@users.noreply.github.com> Date: Thu, 16 Jan 2025 16:43:41 -0800 Subject: [PATCH 2/2] remove something i used for testing --- .../java/com/mobileer/oboetester/DynamicWorkloadActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/DynamicWorkloadActivity.java b/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/DynamicWorkloadActivity.java index eee3c350..9340100e 100644 --- a/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/DynamicWorkloadActivity.java +++ b/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/DynamicWorkloadActivity.java @@ -40,7 +40,7 @@ */ public class DynamicWorkloadActivity extends TestOutputActivityBase { private static final int WORKLOAD_HIGH_MIN = 30; - private static final int WORKLOAD_HIGH_MAX = 1500; + private static final int WORKLOAD_HIGH_MAX = 150; // When the CPU is completely saturated then the load will be above 1.0. public static final double LOAD_RECOVERY_HIGH = 1.0; // Use a slightly lower value for going low so that the comparator has hysteresis.