summaryrefslogtreecommitdiff
path: root/libs/renderengine/RenderEngine.cpp
diff options
context:
space:
mode:
author Ana Krulec <akrulec@google.com> 2020-02-26 12:16:40 -0800
committer Ana Krulec <akrulec@google.com> 2020-05-12 16:59:56 -0700
commit9bc9dc6953628b3a8e48a08e3156c7710f279920 (patch)
tree7cbe1a5243a06958a7d8a402c9e7c9df913bb479 /libs/renderengine/RenderEngine.cpp
parentd29f327a2e093c50d7fcc81dd2b7118e2eb450d7 (diff)
Creating a threaded version of the Render Engine.
This class contains a thread. Each time a function of this class is called, we create a lambda function that is put on a queue. The main thread then executes the functions in order. In V1, all elements are passed by reference, and the main thread blocks on the execution of this thread. In the future iterations, the lambda makes copies of elements that should exist regardless of what happens to the thread that calls into this thread. go/speculative-render-engine for more info. Test: Activate blur. Collect systrace. Test: Open Chrome. Collect systrace. Test: atest RenderEngineThreadedTest Bug: 155929501 Change-Id: I246c6c1abb77a4c96c0867e722757326f8069b16
Diffstat (limited to 'libs/renderengine/RenderEngine.cpp')
-rw-r--r--libs/renderengine/RenderEngine.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/libs/renderengine/RenderEngine.cpp b/libs/renderengine/RenderEngine.cpp
index 0fdf093b2f..f0eb34be03 100644
--- a/libs/renderengine/RenderEngine.cpp
+++ b/libs/renderengine/RenderEngine.cpp
@@ -20,19 +20,33 @@
#include <log/log.h>
#include <private/gui/SyncFeatures.h>
#include "gl/GLESRenderEngine.h"
+#include "threaded/RenderEngineThreaded.h"
namespace android {
namespace renderengine {
std::unique_ptr<impl::RenderEngine> RenderEngine::create(const RenderEngineCreationArgs& args) {
+ RenderEngineType renderEngineType = args.renderEngineType;
+
+ // Keep the ability to override by PROPERTIES:
char prop[PROPERTY_VALUE_MAX];
- property_get(PROPERTY_DEBUG_RENDERENGINE_BACKEND, prop, "gles");
+ property_get(PROPERTY_DEBUG_RENDERENGINE_BACKEND, prop, "");
if (strcmp(prop, "gles") == 0) {
- ALOGD("RenderEngine GLES Backend");
- return renderengine::gl::GLESRenderEngine::create(args);
+ renderEngineType = RenderEngineType::GLES;
+ }
+ if (strcmp(prop, "threaded") == 0) {
+ renderEngineType = RenderEngineType::THREADED;
+ }
+
+ switch (renderEngineType) {
+ case RenderEngineType::THREADED:
+ ALOGD("Threaded RenderEngine with GLES Backend");
+ return renderengine::threaded::RenderEngineThreaded::create(args);
+ case RenderEngineType::GLES:
+ default:
+ ALOGD("RenderEngine with GLES Backend");
+ return renderengine::gl::GLESRenderEngine::create(args);
}
- ALOGE("UNKNOWN BackendType: %s, create GLES RenderEngine.", prop);
- return renderengine::gl::GLESRenderEngine::create(args);
}
RenderEngine::~RenderEngine() = default;