Skip to content

Commit 37cceb7

Browse files
LeonScrogginsAndroid (Google) Code Review
authored andcommitted
Merge "vulkan_renderengine: Check for support first" into main
2 parents 89d11a3 + f3369ed commit 37cceb7

5 files changed

Lines changed: 26 additions & 20 deletions

File tree

libs/renderengine/include/renderengine/RenderEngine.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ class RenderEngine {
104104

105105
static std::unique_ptr<RenderEngine> create(const RenderEngineCreationArgs& args);
106106

107+
static bool canSupport(GraphicsApi);
108+
107109
virtual ~RenderEngine() = 0;
108110

109111
// ----- BEGIN DEPRECATED INTERFACE -----

libs/renderengine/skia/SkiaVkRenderEngine.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ static GrVkGetProc sGetProc = [](const char* proc_name, VkInstance instance, VkD
287287
CHECK_NONNULL(vk##F)
288288

289289
VulkanInterface initVulkanInterface(bool protectedContent = false) {
290+
const nsecs_t timeBefore = systemTime();
290291
VulkanInterface interface;
291292

292293
VK_GET_PROC(EnumerateInstanceVersion);
@@ -598,7 +599,9 @@ VulkanInterface initVulkanInterface(bool protectedContent = false) {
598599
interface.isProtected = protectedContent;
599600
// funcs already initialized
600601

601-
ALOGD("%s: Success init Vulkan interface", __func__);
602+
const nsecs_t timeAfter = systemTime();
603+
const float initTimeMs = static_cast<float>(timeAfter - timeBefore) / 1.0E6;
604+
ALOGD("%s: Success init Vulkan interface in %f ms", __func__, initTimeMs);
602605
return interface;
603606
}
604607

@@ -654,17 +657,25 @@ static void sSetupVulkanInterface() {
654657
}
655658
}
656659

660+
bool RenderEngine::canSupport(GraphicsApi graphicsApi) {
661+
switch (graphicsApi) {
662+
case GraphicsApi::GL:
663+
return true;
664+
case GraphicsApi::VK: {
665+
if (!sVulkanInterface.initialized) {
666+
sVulkanInterface = initVulkanInterface(false /* no protected content */);
667+
ALOGD("%s: initialized == %s.", __func__,
668+
sVulkanInterface.initialized ? "true" : "false");
669+
}
670+
return sVulkanInterface.initialized;
671+
}
672+
}
673+
}
674+
657675
namespace skia {
658676

659677
using base::StringAppendF;
660678

661-
bool SkiaVkRenderEngine::canSupportSkiaVkRenderEngine() {
662-
VulkanInterface temp = initVulkanInterface(false /* no protected content */);
663-
ALOGD("SkiaVkRenderEngine::canSupportSkiaVkRenderEngine(): initialized == %s.",
664-
temp.initialized ? "true" : "false");
665-
return temp.initialized;
666-
}
667-
668679
std::unique_ptr<SkiaVkRenderEngine> SkiaVkRenderEngine::create(
669680
const RenderEngineCreationArgs& args) {
670681
std::unique_ptr<SkiaVkRenderEngine> engine(new SkiaVkRenderEngine(args));

libs/renderengine/skia/SkiaVkRenderEngine.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ namespace skia {
2727

2828
class SkiaVkRenderEngine : public SkiaRenderEngine {
2929
public:
30-
// Returns false if Vulkan implementation can't support SkiaVkRenderEngine.
31-
static bool canSupportSkiaVkRenderEngine();
3230
static std::unique_ptr<SkiaVkRenderEngine> create(const RenderEngineCreationArgs& args);
3331
~SkiaVkRenderEngine() override;
3432

libs/renderengine/tests/RenderEngineTest.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class RenderEngineFactory {
107107

108108
virtual std::string name() = 0;
109109
virtual renderengine::RenderEngine::GraphicsApi graphicsApi() = 0;
110-
virtual bool apiSupported() = 0;
110+
bool apiSupported() { return renderengine::RenderEngine::canSupport(graphicsApi()); }
111111
std::unique_ptr<renderengine::RenderEngine> createRenderEngine() {
112112
renderengine::RenderEngineCreationArgs reCreationArgs =
113113
renderengine::RenderEngineCreationArgs::Builder()
@@ -131,10 +131,6 @@ class SkiaVkRenderEngineFactory : public RenderEngineFactory {
131131
renderengine::RenderEngine::GraphicsApi graphicsApi() override {
132132
return renderengine::RenderEngine::GraphicsApi::VK;
133133
}
134-
135-
bool apiSupported() override {
136-
return skia::SkiaVkRenderEngine::canSupportSkiaVkRenderEngine();
137-
}
138134
};
139135

140136
class SkiaGLESRenderEngineFactory : public RenderEngineFactory {
@@ -144,8 +140,6 @@ class SkiaGLESRenderEngineFactory : public RenderEngineFactory {
144140
renderengine::RenderEngine::GraphicsApi graphicsApi() {
145141
return renderengine::RenderEngine::GraphicsApi::GL;
146142
}
147-
148-
bool apiSupported() override { return true; }
149143
};
150144

151145
class RenderEngineTest : public ::testing::TestWithParam<std::shared_ptr<RenderEngineFactory>> {

services/surfaceflinger/SurfaceFlinger.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -816,9 +816,10 @@ void chooseRenderEngineType(renderengine::RenderEngineCreationArgs::Builder& bui
816816
builder.setThreaded(renderengine::RenderEngine::Threaded::YES)
817817
.setGraphicsApi(renderengine::RenderEngine::GraphicsApi::VK);
818818
} else {
819-
builder.setGraphicsApi(FlagManager::getInstance().vulkan_renderengine()
820-
? renderengine::RenderEngine::GraphicsApi::VK
821-
: renderengine::RenderEngine::GraphicsApi::GL);
819+
const auto kVulkan = renderengine::RenderEngine::GraphicsApi::VK;
820+
const bool useVulkan = FlagManager::getInstance().vulkan_renderengine() &&
821+
renderengine::RenderEngine::canSupport(kVulkan);
822+
builder.setGraphicsApi(useVulkan ? kVulkan : renderengine::RenderEngine::GraphicsApi::GL);
822823
}
823824
}
824825

0 commit comments

Comments
 (0)