SF: avoid a nullptr access in RefreshRateOverlay / HDR overlay
Bug: 302312658
Test: presubmit + manual
Change-Id: I3a69e4520be7f52779e1f92e5621a6138de08797
diff --git a/services/surfaceflinger/RefreshRateOverlay.h b/services/surfaceflinger/RefreshRateOverlay.h
index ae334e5..0fec470 100644
--- a/services/surfaceflinger/RefreshRateOverlay.h
+++ b/services/surfaceflinger/RefreshRateOverlay.h
@@ -37,6 +37,10 @@
class SurfaceFlinger;
class RefreshRateOverlay {
+private:
+ // Effectively making the constructor private, while keeping std::make_unique work
+ struct ConstructorTag {};
+
public:
enum class Features {
Spinner = 1 << 0,
@@ -45,7 +49,7 @@
SetByHwc = 1 << 3,
};
- RefreshRateOverlay(FpsRange, ftl::Flags<Features>);
+ static std::unique_ptr<RefreshRateOverlay> create(FpsRange, ftl::Flags<Features>);
void setLayerStack(ui::LayerStack);
void setViewport(ui::Size);
@@ -54,7 +58,11 @@
void animate();
bool isSetByHwc() const { return mFeatures.test(RefreshRateOverlay::Features::SetByHwc); }
+ RefreshRateOverlay(ConstructorTag, FpsRange, ftl::Flags<Features>);
+
private:
+ bool initCheck() const;
+
using Buffers = std::vector<sp<GraphicBuffer>>;
static Buffers draw(int vsyncRate, int renderFps, SkColor, ui::Transform::RotationFlags,