Add mock context and use in ResourceCacheTest.
BUG=skia:2889
Review URL: https://codereview.chromium.org/702083003
diff --git a/src/gpu/GrTest.cpp b/src/gpu/GrTest.cpp
index 6013b16..efb37ca 100644
--- a/src/gpu/GrTest.cpp
+++ b/src/gpu/GrTest.cpp
@@ -40,3 +40,138 @@
void GrContext::purgeAllUnlockedResources() {
fResourceCache->purgeAllUnlocked();
}
+
+///////////////////////////////////////////////////////////////////////////////
+// Code for the mock context. It's built on a mock GrGpu class that does nothing.
+////
+
+#include "GrBufferAllocPool.h"
+#include "GrInOrderDrawBuffer.h"
+#include "GrGpu.h"
+
+class MockGpu : public GrGpu {
+public:
+ MockGpu(GrContext* context) : INHERITED(context) { fCaps.reset(SkNEW(GrDrawTargetCaps)); }
+ virtual ~MockGpu() { }
+ virtual bool canWriteTexturePixels(const GrTexture*,
+ GrPixelConfig srcConfig) const SK_OVERRIDE {
+ return true;
+ }
+
+ virtual bool readPixelsWillPayForYFlip(GrRenderTarget* renderTarget,
+ int left, int top,
+ int width, int height,
+ GrPixelConfig config,
+ size_t rowBytes) const SK_OVERRIDE { return false; }
+ virtual void buildProgramDesc(const GrOptDrawState&,
+ const GrProgramDesc::DescInfo&,
+ GrGpu::DrawType,
+ const GrDeviceCoordTexture* dstCopy,
+ GrProgramDesc* desc) SK_OVERRIDE { }
+
+ virtual void discard(GrRenderTarget*) SK_OVERRIDE { }
+
+private:
+ virtual void onResetContext(uint32_t resetBits) { };
+ virtual GrTexture* onCreateTexture(const GrSurfaceDesc& desc,
+ const void* srcData,
+ size_t rowBytes) SK_OVERRIDE {
+ return NULL;
+ }
+
+ virtual GrTexture* onCreateCompressedTexture(const GrSurfaceDesc& desc,
+ const void* srcData) SK_OVERRIDE {
+ return NULL;
+ }
+
+ virtual GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&) SK_OVERRIDE {
+ return NULL;
+ }
+
+ virtual GrRenderTarget* onWrapBackendRenderTarget(
+ const GrBackendRenderTargetDesc&) SK_OVERRIDE {
+ return NULL;
+ }
+
+ virtual GrVertexBuffer* onCreateVertexBuffer(size_t size, bool dynamic) SK_OVERRIDE {
+ return NULL;
+ }
+
+ virtual GrIndexBuffer* onCreateIndexBuffer(size_t size, bool dynamic) SK_OVERRIDE {
+ return NULL;
+ }
+
+ virtual void onGpuClear(GrRenderTarget*, const SkIRect* rect, GrColor color,
+ bool canIgnoreRect) SK_OVERRIDE { }
+
+ virtual void onClearStencilClip(GrRenderTarget*,
+ const SkIRect& rect,
+ bool insideClip) SK_OVERRIDE { }
+
+ virtual void onGpuDraw(const DrawInfo&) SK_OVERRIDE { }
+ virtual bool onReadPixels(GrRenderTarget* target,
+ int left, int top, int width, int height,
+ GrPixelConfig,
+ void* buffer,
+ size_t rowBytes) SK_OVERRIDE {
+ return false;
+ }
+
+ virtual bool onWriteTexturePixels(GrTexture* texture,
+ int left, int top, int width, int height,
+ GrPixelConfig config, const void* buffer,
+ size_t rowBytes) SK_OVERRIDE {
+ return false;
+ }
+
+ virtual void onResolveRenderTarget(GrRenderTarget* target) SK_OVERRIDE {
+ return;
+ }
+
+ virtual bool createStencilBufferForRenderTarget(GrRenderTarget*, int width,
+ int height) SK_OVERRIDE {
+ return false;
+ }
+
+ virtual bool attachStencilBufferToRenderTarget(GrStencilBuffer*, GrRenderTarget*) SK_OVERRIDE {
+ return false;
+ }
+
+ virtual bool flushGraphicsState(DrawType,
+ const GrClipMaskManager::ScissorState&,
+ const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE {
+ return false;
+ }
+
+ virtual void clearStencil(GrRenderTarget* target) SK_OVERRIDE { }
+
+ virtual void didAddGpuTraceMarker() SK_OVERRIDE { }
+ virtual void didRemoveGpuTraceMarker() SK_OVERRIDE { }
+
+ typedef GrGpu INHERITED;
+};
+
+GrContext* GrContext::CreateMockContext() {
+ GrContext* context = SkNEW_ARGS(GrContext, (Options()));
+
+ context->initMockContext();
+ return context;
+}
+
+void GrContext::initMockContext() {
+ SkASSERT(NULL == fGpu);
+ fGpu = SkNEW_ARGS(MockGpu, (this));
+ SkASSERT(fGpu);
+ this->initCommon();
+
+ // We delete these because we want to test the cache starting with zero resources. Also, none of
+ // these objects are required for any of tests that use this context. TODO: make stop allocating
+ // resources in the buffer pools.
+ SkDELETE(fDrawBuffer);
+ SkDELETE(fDrawBufferVBAllocPool);
+ SkDELETE(fDrawBufferIBAllocPool);
+
+ fDrawBuffer = NULL;
+ fDrawBufferVBAllocPool = NULL;
+ fDrawBufferIBAllocPool = NULL;
+}