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

Commit 45be9185 authored by Leon Scroggins III's avatar Leon Scroggins III
Browse files

RE: Add a test verifying we've compiled a min no of shaders

To prevent regressions, verify that SkiaGLRenderEngine compiles some
number of shaders. This varies per device, so use a lower bound instead
of an exact number. This would have caught the regression referenced in
I9f0e9e8535feee48700f1c896f26833b6095764d, though it could miss a
smaller regression.

Repurpose reportShadersCompiled for this: make it return the total
number of shaders. (With the old behavior, its value is reset when it is
called for the print statement at the end of Cache::primeShaderCache.)
Update its only client to still have the same behavior.

Remove assertShadersCompiled - we decided against that approach in
Ia0c63402e8b2f6ee91f59603951602511bfae853.

Bug: 190487656
Bug: 222355787
Test: this
Change-Id: I3c1108655456fc8aa660ff3f272e0b9b20790c60
parent ae07fe53
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -439,7 +439,7 @@ void Cache::primeShaderCache(SkiaRenderEngine* renderengine) {

        const nsecs_t timeAfter = systemTime();
        const float compileTimeMs = static_cast<float>(timeAfter - timeBefore) / 1.0E6;
        const int shadersCompiled = renderengine->reportShadersCompiled();
        const int shadersCompiled = renderengine->reportShadersCompiled() - previousCount;
        ALOGD("Shader cache generated %d shaders in %f ms\n", shadersCompiled, compileTimeMs);
    }
}
+1 −7
Original line number Diff line number Diff line
@@ -294,14 +294,8 @@ void SkiaGLRenderEngine::SkSLCacheMonitor::store(const SkData& key, const SkData
    mShadersCachedSinceLastCall++;
}

void SkiaGLRenderEngine::assertShadersCompiled(int numShaders) {
    const int cached = mSkSLCacheMonitor.shadersCachedSinceLastCall();
    LOG_ALWAYS_FATAL_IF(cached != numShaders, "Attempted to cache %i shaders; cached %i",
                        numShaders, cached);
}

int SkiaGLRenderEngine::reportShadersCompiled() {
    return mSkSLCacheMonitor.shadersCachedSinceLastCall();
    return mSkSLCacheMonitor.totalShadersCompiled();
}

SkiaGLRenderEngine::SkiaGLRenderEngine(const RenderEngineCreationArgs& args, EGLDisplay display,
+2 −1
Original line number Diff line number Diff line
@@ -61,7 +61,6 @@ public:
    bool supportsProtectedContent() const override;
    void useProtectedContext(bool useProtectedContext) override;
    bool supportsBackgroundBlur() override { return mBlurFilter != nullptr; }
    void assertShadersCompiled(int numShaders) override;
    void onActiveDisplaySizeChanged(ui::Size size) override;
    int reportShadersCompiled() override;

@@ -178,6 +177,8 @@ private:
            return shadersCachedSinceLastCall;
        }

        int totalShadersCompiled() const { return mTotalShadersCompiled; }

    private:
        int mShadersCachedSinceLastCall = 0;
    };
+0 −1
Original line number Diff line number Diff line
@@ -45,7 +45,6 @@ public:
    virtual bool isProtected() const override { return false; } // mInProtectedContext; }
    virtual bool supportsProtectedContent() const override { return false; };
    virtual int getContextPriority() override { return 0; }
    virtual void assertShadersCompiled(int numShaders) {}
    virtual int reportShadersCompiled() { return 0; }
    virtual void setEnableTracing(bool tracingEnabled) override;

+17 −0
Original line number Diff line number Diff line
@@ -2902,6 +2902,23 @@ TEST_P(RenderEngineTest, r8_respects_color_transform_when_device_handles) {
    expectBufferColor(Rect(1, 0, 2, 1), 255, 0, 0, 255); // Still red.
    expectBufferColor(Rect(0, 0, 1, 1), 0,  70, 0, 255);
}

TEST_P(RenderEngineTest, primeShaderCache) {
    if (GetParam()->type() == renderengine::RenderEngine::RenderEngineType::GLES) {
        GTEST_SKIP();
    }

    initializeRenderEngine();

    auto fut = mRE->primeCache();
    if (fut.valid()) {
        fut.wait();
    }

    const int minimumExpectedShadersCompiled = GetParam()->useColorManagement() ? 60 : 30;
    ASSERT_GT(static_cast<skia::SkiaGLRenderEngine*>(mRE.get())->reportShadersCompiled(),
              minimumExpectedShadersCompiled);
}
} // namespace renderengine
} // namespace android