Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 113ddd9e authored by John Reck's avatar John Reck
Browse files

Allow hwuimacro to choose a renderer

Test: this
Change-Id: I500b033257f317f8a3124e8072dc8d39d666b01b
parent 3b382900
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -178,7 +178,7 @@ ProfileType Properties::getProfileType() {
}

RenderPipelineType Properties::getRenderPipelineType() {
    if (RenderPipelineType::NotInitialized != sRenderPipelineType) {
    if (sRenderPipelineType != RenderPipelineType::NotInitialized) {
        return sRenderPipelineType;
    }
    char prop[PROPERTY_VALUE_MAX];
@@ -196,11 +196,17 @@ RenderPipelineType Properties::getRenderPipelineType() {
    return sRenderPipelineType;
}

#ifdef HWUI_GLES_WRAP_ENABLED
void Properties::overrideRenderPipelineType(RenderPipelineType type) {
    sRenderPipelineType = type;
#if !defined(HWUI_GLES_WRAP_ENABLED)
    // If we're doing actual rendering then we can't change the renderer after it's been set.
    // Unit tests can freely change this as often as it wants, though, as there's no actual
    // GL rendering happening
    if (sRenderPipelineType != RenderPipelineType::NotInitialized) {
        return;
    }
#endif
    sRenderPipelineType = type;
}

bool Properties::isSkiaEnabled() {
    auto renderType = getRenderPipelineType();
+1 −3
Original line number Diff line number Diff line
@@ -256,9 +256,7 @@ public:
    static bool skpCaptureEnabled;

    // Used for testing only to change the render pipeline.
#ifdef HWUI_GLES_WRAP_ENABLED
    static void overrideRenderPipelineType(RenderPipelineType);
#endif

private:
    static ProfileType sProfileType;
+27 −0
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ OPTIONS:
  --onscreen           Render tests on device screen. By default tests
                       are offscreen rendered
  --benchmark_format   Set output format. Possible values are tabular, json, csv
  --renderer=TYPE      Sets the render pipeline to use. May be opengl, skiagl, or skiavk
)");
}

@@ -146,6 +147,20 @@ static bool setBenchmarkFormat(const char* format) {
    return true;
}

static bool setRenderer(const char* renderer) {
    if (!strcmp(renderer, "opengl")) {
        Properties::overrideRenderPipelineType(RenderPipelineType::OpenGL);
    } else if (!strcmp(renderer, "skiagl")) {
        Properties::overrideRenderPipelineType(RenderPipelineType::SkiaGL);
    } else if (!strcmp(renderer, "skiavk")) {
        Properties::overrideRenderPipelineType(RenderPipelineType::SkiaVulkan);
    } else {
        fprintf(stderr, "Unknown format '%s'", renderer);
        return false;
    }
    return true;
}

// For options that only exist in long-form. Anything in the
// 0-255 range is reserved for short options (which just use their ASCII value)
namespace LongOpts {
@@ -158,6 +173,7 @@ enum {
    BenchmarkFormat,
    Onscreen,
    Offscreen,
    Renderer,
};
}

@@ -172,6 +188,7 @@ static const struct option LONG_OPTIONS[] = {
        {"benchmark_format", required_argument, nullptr, LongOpts::BenchmarkFormat},
        {"onscreen", no_argument, nullptr, LongOpts::Onscreen},
        {"offscreen", no_argument, nullptr, LongOpts::Offscreen},
        {"renderer", required_argument, nullptr, LongOpts::Renderer},
        {0, 0, 0, 0}};

static const char* SHORT_OPTIONS = "c:r:h";
@@ -252,6 +269,16 @@ void parseOptions(int argc, char* argv[]) {
                }
                break;

            case LongOpts::Renderer:
                if (!optarg) {
                    error = true;
                    break;
                }
                if (!setRenderer(optarg)) {
                    error = true;
                }
                break;

            case LongOpts::Onscreen:
                gOpts.renderOffscreen = false;
                break;