diff options
author | 2016-05-11 10:09:18 -0700 | |
---|---|---|
committer | 2016-05-11 10:09:18 -0700 | |
commit | 18a2f9dff839a3f60850c25e1a701b682a497afb (patch) | |
tree | 0113e4f746b09221f6ccce88beadb60432347682 /tools/gpu/TestContext.h | |
parent | 393c2ff0d2db9c5d84e6ed660ea9f546f438cb47 (diff) |
Add base class for GLTestContext and add new subclass VkTestContext.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1964243003
Review-Url: https://codereview.chromium.org/1964243003
Diffstat (limited to 'tools/gpu/TestContext.h')
-rw-r--r-- | tools/gpu/TestContext.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/tools/gpu/TestContext.h b/tools/gpu/TestContext.h new file mode 100644 index 0000000000..5143b8a6fa --- /dev/null +++ b/tools/gpu/TestContext.h @@ -0,0 +1,95 @@ + +/* + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef TestContext_DEFINED +#define TestContext_DEFINED + +#include "GrTypes.h" +#include "../private/SkGpuFenceSync.h" +#include "../private/SkTemplates.h" + +namespace sk_gpu_test { +/** + * An offscreen 3D context. This class is intended for Skia's internal testing needs and not + * for general use. + */ +class TestContext : public SkNoncopyable { +public: + virtual ~TestContext(); + + virtual bool isValid() const = 0; + + bool fenceSyncSupport() const { return fFenceSync != nullptr; } + + bool getMaxGpuFrameLag(int *maxFrameLag) const { + if (!fFenceSync) { + return false; + } + *maxFrameLag = kMaxFrameLag; + return true; + } + + void makeCurrent() const; + + virtual GrBackend backend() = 0; + virtual GrBackendContext backendContext() = 0; + + /** Swaps front and back buffer (if the context has such buffers) */ + void swapBuffers(); + + /** + * The only purpose of this function it to provide a means of scheduling + * work on the GPU (since all of the subclasses create primary buffers for + * testing that are small and not meant to be rendered to the screen). + * + * If the platform supports fence syncs (OpenGL 3.2+ or EGL_KHR_fence_sync), + * this will not swap any buffers, but rather emulate triple buffer synchronization + * using fences. + * + * Otherwise it will call the platform SwapBuffers method. This may or may + * not perform some sort of synchronization, depending on whether the + * drawing surface provided by the platform is double buffered. + */ + void waitOnSyncOrSwap(); + + /** + * This notifies the context that we are deliberately testing abandoning + * the context. It is useful for debugging contexts that would otherwise + * test that GPU resources are properly deleted. It also allows a debugging + * context to test that further API calls are not made by Skia GPU code. + */ + virtual void testAbandon(); + + /** + * returns the fencesync object owned by this GLTestContext + */ + SkGpuFenceSync *fenceSync() { return fFenceSync; } + +protected: + SkGpuFenceSync* fFenceSync; + + TestContext(); + + /** This should destroy the 3D context. */ + virtual void teardown(); + + virtual void onPlatformMakeCurrent() const = 0; + virtual void onPlatformSwapBuffers() const = 0; + +private: + enum { + kMaxFrameLag = 3 + }; + + SkPlatformGpuFence fFrameFences[kMaxFrameLag - 1]; + int fCurrentFenceIdx; + + typedef SkNoncopyable INHERITED; +}; +} // namespace sk_gpu_test +#endif |