surfaceflinger: manage RenderEngine with unique_ptr
Test: SurfaceFlinger_test
Change-Id: I603a399b88963acdcd154f721fe64bf59d9032fd
diff --git a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.h b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.h
index b96bfe0..84aa63c 100644
--- a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.h
+++ b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.h
@@ -60,9 +60,9 @@
public:
GLES20RenderEngine(uint32_t featureFlags); // See RenderEngine::FeatureFlag
+ virtual ~GLES20RenderEngine();
protected:
- virtual ~GLES20RenderEngine();
virtual void dump(String8& result);
virtual void setViewportAndProjection(size_t vpw, size_t vph,
diff --git a/services/surfaceflinger/RenderEngine/RenderEngine.cpp b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
index 56e9ac0..2dd4135 100644
--- a/services/surfaceflinger/RenderEngine/RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
@@ -47,7 +47,8 @@
return false;
}
-RenderEngine* RenderEngine::create(EGLDisplay display, int hwcFormat, uint32_t featureFlags) {
+std::unique_ptr<RenderEngine> RenderEngine::create(EGLDisplay display,
+ int hwcFormat, uint32_t featureFlags) {
// EGL_ANDROIDX_no_config_context is an experimental extension with no
// written specification. It will be replaced by something more formal.
// SurfaceFlinger is using it to allow a single EGLContext to render to
@@ -127,7 +128,7 @@
// initialize the renderer while GL is current
- RenderEngine* engine = NULL;
+ std::unique_ptr<RenderEngine> engine;
switch (version) {
case GLES_VERSION_1_0:
case GLES_VERSION_1_1:
@@ -135,7 +136,7 @@
break;
case GLES_VERSION_2_0:
case GLES_VERSION_3_0:
- engine = new GLES20RenderEngine(featureFlags);
+ engine = std::make_unique<GLES20RenderEngine>(featureFlags);
break;
}
engine->setEGLHandles(config, ctxt);
diff --git a/services/surfaceflinger/RenderEngine/RenderEngine.h b/services/surfaceflinger/RenderEngine/RenderEngine.h
index 7e05cec..f8e8aaa 100644
--- a/services/surfaceflinger/RenderEngine/RenderEngine.h
+++ b/services/surfaceflinger/RenderEngine/RenderEngine.h
@@ -18,6 +18,8 @@
#ifndef SF_RENDERENGINE_H_
#define SF_RENDERENGINE_H_
+#include <memory>
+
#include <stdint.h>
#include <sys/types.h>
@@ -57,13 +59,15 @@
protected:
RenderEngine();
- virtual ~RenderEngine() = 0;
public:
+ virtual ~RenderEngine() = 0;
+
enum FeatureFlag {
WIDE_COLOR_SUPPORT = 1 << 0 // Platform has a wide color display
};
- static RenderEngine* create(EGLDisplay display, int hwcFormat, uint32_t featureFlags);
+ static std::unique_ptr<RenderEngine> create(EGLDisplay display,
+ int hwcFormat, uint32_t featureFlags);
static EGLConfig chooseEglConfig(EGLDisplay display, int format, bool logConfig);