Merge "Camera: Bump the preview frame spacer thread priority" into main
diff --git a/camera/camera_platform.aconfig b/camera/camera_platform.aconfig
index 121b9c4..1f67d2d 100644
--- a/camera/camera_platform.aconfig
+++ b/camera/camera_platform.aconfig
@@ -257,3 +257,13 @@
purpose: PURPOSE_BUGFIX
}
}
+
+flag {
+ namespace: "camera_platform"
+ name: "bump_preview_frame_space_priority"
+ description: "Increase the PreviewFrameSpacer thread priority"
+ bug: "355665306"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/services/camera/libcameraservice/device3/PreviewFrameSpacer.cpp b/services/camera/libcameraservice/device3/PreviewFrameSpacer.cpp
index 83caa00..a04406e 100644
--- a/services/camera/libcameraservice/device3/PreviewFrameSpacer.cpp
+++ b/services/camera/libcameraservice/device3/PreviewFrameSpacer.cpp
@@ -18,10 +18,16 @@
#define ATRACE_TAG ATRACE_TAG_CAMERA
//#define LOG_NDEBUG 0
+#include <com_android_internal_camera_flags.h>
+
#include <utils/Log.h>
#include "PreviewFrameSpacer.h"
#include "Camera3OutputStream.h"
+#include "utils/SchedulingPolicyUtils.h"
+#include "utils/Utils.h"
+
+namespace flags = com::android::internal::camera::flags;
namespace android {
@@ -129,6 +135,24 @@
mLastCameraReadoutTime = bufferHolder.readoutTimestamp;
}
+status_t PreviewFrameSpacer::run(const char* name, int32_t priority, size_t stack) {
+ auto ret = Thread::run(name, priority, stack);
+ if (flags::bump_preview_frame_space_priority()) {
+ // Boost priority of the preview frame spacer thread to SCHED_FIFO.
+ pid_t previewFrameSpacerTid = getTid();
+ auto res = SchedulingPolicyUtils::requestPriorityDirect(getpid(), previewFrameSpacerTid,
+ RunThreadWithRealtimePriority::kRequestThreadPriority);
+ if (res != OK) {
+ ALOGW("Can't set realtime priority for preview frame spacer thread: %s (%d)",
+ strerror(-res), res);
+ } else {
+ ALOGV("Set real time priority for preview frame spacer thread (tid %d)",
+ previewFrameSpacerTid);
+ }
+ }
+ return ret;
+}
+
}; // namespace camera3
}; // namespace android
diff --git a/services/camera/libcameraservice/device3/PreviewFrameSpacer.h b/services/camera/libcameraservice/device3/PreviewFrameSpacer.h
index f46de3d..ab85189 100644
--- a/services/camera/libcameraservice/device3/PreviewFrameSpacer.h
+++ b/services/camera/libcameraservice/device3/PreviewFrameSpacer.h
@@ -58,6 +58,7 @@
bool threadLoop() override;
void requestExit() override;
+ status_t run(const char* name, int32_t priority = PRIORITY_DEFAULT, size_t stack = 0) override;
private:
// structure holding cached preview buffer info